Handle non-STARS creation fees for open/limited edition minter
This commit is contained in:
parent
fa1475f109
commit
3bbed658a7
@ -5,6 +5,7 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||||
import { toUtf8 } from '@cosmjs/encoding'
|
import { toUtf8 } from '@cosmjs/encoding'
|
||||||
|
import type { Coin } from '@cosmjs/proto-signing'
|
||||||
import { coin } from '@cosmjs/proto-signing'
|
import { coin } from '@cosmjs/proto-signing'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
@ -13,7 +14,7 @@ import type { MinterType } from 'components/collections/actions/Combobox'
|
|||||||
import { Conditional } from 'components/Conditional'
|
import { Conditional } from 'components/Conditional'
|
||||||
import { ConfirmationModal } from 'components/ConfirmationModal'
|
import { ConfirmationModal } from 'components/ConfirmationModal'
|
||||||
import { LoadingModal } from 'components/LoadingModal'
|
import { LoadingModal } from 'components/LoadingModal'
|
||||||
import { type TokenInfo } from 'config/token'
|
import { type TokenInfo, tokensList } from 'config/token'
|
||||||
import { useContracts } from 'contexts/contracts'
|
import { useContracts } from 'contexts/contracts'
|
||||||
import { addLogItem } from 'contexts/log'
|
import { addLogItem } from 'contexts/log'
|
||||||
import type { DispatchExecuteArgs as OpenEditionFactoryDispatchExecuteArgs } from 'contracts/openEditionFactory/messages/execute'
|
import type { DispatchExecuteArgs as OpenEditionFactoryDispatchExecuteArgs } from 'contracts/openEditionFactory/messages/execute'
|
||||||
@ -73,7 +74,7 @@ export interface OpenEditionMinterDetailsDataProps {
|
|||||||
interface OpenEditionMinterCreatorProps {
|
interface OpenEditionMinterCreatorProps {
|
||||||
onChange: (data: OpenEditionMinterCreatorDataProps) => void
|
onChange: (data: OpenEditionMinterCreatorDataProps) => void
|
||||||
onDetailsChange: (data: OpenEditionMinterDetailsDataProps) => void
|
onDetailsChange: (data: OpenEditionMinterDetailsDataProps) => void
|
||||||
openEditionMinterCreationFee?: string
|
openEditionMinterCreationFee?: Coin
|
||||||
minimumMintPrice?: string
|
minimumMintPrice?: string
|
||||||
minterType?: MinterType
|
minterType?: MinterType
|
||||||
mintTokenFromFactory?: TokenInfo | undefined
|
mintTokenFromFactory?: TokenInfo | undefined
|
||||||
@ -480,20 +481,45 @@ export const OpenEditionMinterCreator = ({
|
|||||||
|
|
||||||
const checkwalletBalance = async () => {
|
const checkwalletBalance = async () => {
|
||||||
if (!wallet.isWalletConnected) throw new Error('Wallet not connected.')
|
if (!wallet.isWalletConnected) throw new Error('Wallet not connected.')
|
||||||
let amountNeeded = 0
|
const queryClient = await wallet.getCosmWasmClient()
|
||||||
if (whitelistDetails?.whitelistState === 'new' && whitelistDetails.memberLimit) {
|
const creationFeeDenom = tokensList.find((token) => token.denom === openEditionMinterCreationFee?.denom)
|
||||||
amountNeeded =
|
await queryClient.getBalance(wallet.address || '', 'ustars').then(async (starsBalance) => {
|
||||||
Math.ceil(Number(whitelistDetails.memberLimit) / 1000) * 100000000 + Number(openEditionMinterCreationFee)
|
await queryClient
|
||||||
} else {
|
.getBalance(wallet.address || '', openEditionMinterCreationFee?.denom as string)
|
||||||
amountNeeded = openEditionMinterCreationFee ? Number(openEditionMinterCreationFee) : 0
|
.then((creationFeeDenomBalance) => {
|
||||||
}
|
if (whitelistDetails?.whitelistState === 'new' && whitelistDetails.memberLimit) {
|
||||||
await (await wallet.getCosmWasmClient()).getBalance(wallet.address || '', 'ustars').then((balance) => {
|
const whitelistCreationFee = Math.ceil(Number(whitelistDetails.memberLimit) / 1000) * 100000000
|
||||||
if (amountNeeded >= Number(balance.amount))
|
if (openEditionMinterCreationFee?.denom === 'ustars') {
|
||||||
throw new Error(
|
const amountNeeded = whitelistCreationFee + Number(openEditionMinterCreationFee.amount)
|
||||||
`Insufficient wallet balance to instantiate the required contracts. Needed amount: ${(
|
if (amountNeeded >= Number(starsBalance.amount))
|
||||||
amountNeeded / 1000000
|
throw new Error(
|
||||||
).toString()} STARS`,
|
`Insufficient wallet balance to instantiate the required contracts. Needed amount: ${(
|
||||||
)
|
amountNeeded / 1000000
|
||||||
|
).toString()} STARS`,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
if (whitelistCreationFee >= Number(starsBalance.amount))
|
||||||
|
throw new Error(
|
||||||
|
`Insufficient wallet balance to instantiate the whitelist. Needed amount: ${(
|
||||||
|
whitelistCreationFee / 1000000
|
||||||
|
).toString()} STARS`,
|
||||||
|
)
|
||||||
|
if (Number(openEditionMinterCreationFee?.amount) > Number(creationFeeDenomBalance.amount))
|
||||||
|
throw new Error(
|
||||||
|
`Insufficient wallet balance to instantiate the required contracts. Needed amount: ${(
|
||||||
|
Number(openEditionMinterCreationFee?.amount) / 1000000
|
||||||
|
).toString()} ${
|
||||||
|
creationFeeDenom ? creationFeeDenom.displayName : openEditionMinterCreationFee?.denom
|
||||||
|
}`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else if (Number(openEditionMinterCreationFee?.amount) > Number(creationFeeDenomBalance.amount))
|
||||||
|
throw new Error(
|
||||||
|
`Insufficient wallet balance to instantiate the required contracts. Needed amount: ${(
|
||||||
|
Number(openEditionMinterCreationFee?.amount) / 1000000
|
||||||
|
).toString()} ${creationFeeDenom ? creationFeeDenom.displayName : openEditionMinterCreationFee?.denom}`,
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -899,7 +925,7 @@ export const OpenEditionMinterCreator = ({
|
|||||||
messages: openEditionFactoryMessages,
|
messages: openEditionFactoryMessages,
|
||||||
txSigner: wallet.address || '',
|
txSigner: wallet.address || '',
|
||||||
msg,
|
msg,
|
||||||
funds: [coin(openEditionMinterCreationFee as string, 'ustars')],
|
funds: [openEditionMinterCreationFee as Coin],
|
||||||
updatable: collectionDetails?.updatable,
|
updatable: collectionDetails?.updatable,
|
||||||
}
|
}
|
||||||
await openEditionFactoryDispatchExecute(payload)
|
await openEditionFactoryDispatchExecute(payload)
|
||||||
|
@ -130,7 +130,7 @@ const CollectionCreationPage: NextPage = () => {
|
|||||||
const [vendingMinterCreationFee, setVendingMinterCreationFee] = useState<Coin | null>(null)
|
const [vendingMinterCreationFee, setVendingMinterCreationFee] = useState<Coin | null>(null)
|
||||||
const [baseMinterCreationFee, setBaseMinterCreationFee] = useState<Coin | null>(null)
|
const [baseMinterCreationFee, setBaseMinterCreationFee] = useState<Coin | null>(null)
|
||||||
const [vendingMinterUpdatableCreationFee, setVendingMinterUpdatableCreationFee] = useState<Coin | null>(null)
|
const [vendingMinterUpdatableCreationFee, setVendingMinterUpdatableCreationFee] = useState<Coin | null>(null)
|
||||||
const [openEditionMinterCreationFee, setOpenEditionMinterCreationFee] = useState<Coin | null>(null)
|
const [openEditionMinterCreationFee, setOpenEditionMinterCreationFee] = useState<Coin | undefined>(undefined)
|
||||||
const [vendingMinterFlexCreationFee, setVendingMinterFlexCreationFee] = useState<Coin | null>(null)
|
const [vendingMinterFlexCreationFee, setVendingMinterFlexCreationFee] = useState<Coin | null>(null)
|
||||||
const [baseMinterUpdatableCreationFee, setBaseMinterUpdatableCreationFee] = useState<Coin | null>(null)
|
const [baseMinterUpdatableCreationFee, setBaseMinterUpdatableCreationFee] = useState<Coin | null>(null)
|
||||||
const [minimumMintPrice, setMinimumMintPrice] = useState<string | null>('0')
|
const [minimumMintPrice, setMinimumMintPrice] = useState<string | null>('0')
|
||||||
@ -1958,7 +1958,7 @@ const CollectionCreationPage: NextPage = () => {
|
|||||||
onChange={setOpenEditionMinterCreatorData}
|
onChange={setOpenEditionMinterCreatorData}
|
||||||
onDetailsChange={setOpenEditionMinterDetails}
|
onDetailsChange={setOpenEditionMinterDetails}
|
||||||
openEditionFactoryAddress={openEditionFactoryAddress}
|
openEditionFactoryAddress={openEditionFactoryAddress}
|
||||||
openEditionMinterCreationFee={openEditionMinterCreationFee?.amount as string}
|
openEditionMinterCreationFee={openEditionMinterCreationFee}
|
||||||
/>
|
/>
|
||||||
</Conditional>
|
</Conditional>
|
||||||
<div className="mx-10">
|
<div className="mx-10">
|
||||||
|
Loading…
Reference in New Issue
Block a user