Calculate badge creation fee
This commit is contained in:
parent
c626864f0b
commit
04781069b7
@ -1,11 +1,15 @@
|
|||||||
/* eslint-disable eslint-comments/disable-enable-pair */
|
/* eslint-disable eslint-comments/disable-enable-pair */
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
||||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||||
/* eslint-disable camelcase */
|
/* eslint-disable camelcase */
|
||||||
import type { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate'
|
import type { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate'
|
||||||
|
import { toUtf8 } from '@cosmjs/encoding'
|
||||||
import type { Coin } from '@cosmjs/proto-signing'
|
import type { Coin } from '@cosmjs/proto-signing'
|
||||||
import { coin } from '@cosmjs/proto-signing'
|
import { coin } from '@cosmjs/proto-signing'
|
||||||
import type { logs } from '@cosmjs/stargate'
|
import type { logs } from '@cosmjs/stargate'
|
||||||
|
import sizeof from 'object-sizeof'
|
||||||
|
|
||||||
export interface InstantiateResponse {
|
export interface InstantiateResponse {
|
||||||
readonly contractAddress: string
|
readonly contractAddress: string
|
||||||
@ -261,6 +265,19 @@ export const badgeHub = (client: SigningCosmWasmClient, txSigner: string): Badge
|
|||||||
|
|
||||||
//Execute
|
//Execute
|
||||||
const createBadge = async (senderAddress: string, badge: Badge): Promise<string> => {
|
const createBadge = async (senderAddress: string, badge: Badge): Promise<string> => {
|
||||||
|
const feeRateRaw = await client.queryContractRaw(
|
||||||
|
contractAddress,
|
||||||
|
toUtf8(Buffer.from(Buffer.from('fee_rate').toString('hex'), 'hex').toString()),
|
||||||
|
)
|
||||||
|
|
||||||
|
const feeRate = JSON.parse(new TextDecoder().decode(feeRateRaw as Uint8Array))
|
||||||
|
console.log('Fee Rate:', feeRate)
|
||||||
|
|
||||||
|
console.log('badge size: ', sizeof(badge))
|
||||||
|
console.log('metadata size', sizeof(badge.metadata))
|
||||||
|
console.log('size of attributes ', sizeof(badge.metadata.attributes))
|
||||||
|
|
||||||
|
console.log('Total: ', Number(sizeof(badge)) + Number(sizeof(badge.metadata.attributes)))
|
||||||
const res = await client.execute(
|
const res = await client.execute(
|
||||||
senderAddress,
|
senderAddress,
|
||||||
contractAddress,
|
contractAddress,
|
||||||
@ -276,10 +293,25 @@ export const badgeHub = (client: SigningCosmWasmClient, txSigner: string): Badge
|
|||||||
},
|
},
|
||||||
'auto',
|
'auto',
|
||||||
'',
|
'',
|
||||||
[coin(912, 'ustars')],
|
[
|
||||||
|
coin(
|
||||||
|
(Number(sizeof(badge)) + Number(sizeof(badge.metadata.attributes))) * Number(feeRate.metadata),
|
||||||
|
'ustars',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
//[coin(1, 'ustars')],
|
||||||
)
|
)
|
||||||
|
|
||||||
return res.transactionHash
|
const events = res.logs
|
||||||
|
.map((log) => log.events)
|
||||||
|
.flat()
|
||||||
|
.find(
|
||||||
|
(event) =>
|
||||||
|
event.attributes.findIndex((attr) => attr.key === 'action' && attr.value === 'badges/hub/create_badge') > 0,
|
||||||
|
)!
|
||||||
|
const id = Number(events.attributes.find((attr) => attr.key === 'id')!.value)
|
||||||
|
|
||||||
|
return res.transactionHash.concat(`:${id}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const editBadge = async (senderAddress: string, id: number, metadata: Metadata): Promise<string> => {
|
const editBadge = async (senderAddress: string, id: number, metadata: Metadata): Promise<string> => {
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
"autoprefixer": "^10",
|
"autoprefixer": "^10",
|
||||||
"husky": "^7",
|
"husky": "^7",
|
||||||
"lint-staged": "^12",
|
"lint-staged": "^12",
|
||||||
|
"object-sizeof": "^1.6.0",
|
||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"tailwindcss": "^3",
|
"tailwindcss": "^3",
|
||||||
"typescript": "^4"
|
"typescript": "^4"
|
||||||
|
@ -72,6 +72,7 @@ const BadgeHubExecutePage: NextPage = () => {
|
|||||||
name: 'manager',
|
name: 'manager',
|
||||||
title: 'Manager',
|
title: 'Manager',
|
||||||
subtitle: 'Badge Hub Manager',
|
subtitle: 'Badge Hub Manager',
|
||||||
|
defaultValue: wallet.address,
|
||||||
})
|
})
|
||||||
|
|
||||||
const nameState = useInputState({
|
const nameState = useInputState({
|
||||||
@ -262,10 +263,11 @@ const BadgeHubExecutePage: NextPage = () => {
|
|||||||
const txHash = await toast.promise(dispatchExecute(payload), {
|
const txHash = await toast.promise(dispatchExecute(payload), {
|
||||||
error: `${type.charAt(0).toUpperCase() + type.slice(1)} execute failed!`,
|
error: `${type.charAt(0).toUpperCase() + type.slice(1)} execute failed!`,
|
||||||
loading: 'Executing message...',
|
loading: 'Executing message...',
|
||||||
success: (tx) => `Transaction ${tx} success!`,
|
success: (tx) => `Transaction ${tx.split(':')[0]} success!`,
|
||||||
})
|
})
|
||||||
if (txHash) {
|
if (txHash) {
|
||||||
setLastTx(txHash)
|
setLastTx(txHash.split(':')[0])
|
||||||
|
console.log(txHash.split(':')[1])
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -279,11 +281,11 @@ const BadgeHubExecutePage: NextPage = () => {
|
|||||||
let privKey: Buffer
|
let privKey: Buffer
|
||||||
do {
|
do {
|
||||||
privKey = crypto.randomBytes(32)
|
privKey = crypto.randomBytes(32)
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
||||||
} while (!secp256k1.privateKeyVerify(privKey))
|
} while (!secp256k1.privateKeyVerify(privKey))
|
||||||
|
|
||||||
const privateKey = privKey.toString('hex')
|
const privateKey = privKey.toString('hex')
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
console.log('Private Key: ', privateKey)
|
||||||
|
|
||||||
const publicKey = Buffer.from(secp256k1.publicKeyCreate(privKey)).toString('hex')
|
const publicKey = Buffer.from(secp256k1.publicKeyCreate(privKey)).toString('hex')
|
||||||
|
|
||||||
keyState.onChange(publicKey)
|
keyState.onChange(publicKey)
|
||||||
|
@ -6343,6 +6343,13 @@ object-keys@^1.1.1:
|
|||||||
resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
|
resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
|
||||||
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
||||||
|
|
||||||
|
object-sizeof@^1.6.0:
|
||||||
|
version "1.6.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/object-sizeof/-/object-sizeof-1.6.3.tgz#6edbbf26825b971fd7a32125a800ed2a9895af95"
|
||||||
|
integrity sha512-LGtilAKuDGKCcvu1Xg3UvAhAeJJlFmblo3faltmOQ80xrGwAHxnauIXucalKdTEksHp/Pq9tZGz1hfyEmjFJPQ==
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.6.0"
|
||||||
|
|
||||||
object.assign@^4.1.0, object.assign@^4.1.2:
|
object.assign@^4.1.0, object.assign@^4.1.2:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz"
|
resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz"
|
||||||
|
Loading…
Reference in New Issue
Block a user