Skip to content

Commit

Permalink
⚡️ Merge class create & mint/send NFT tx when not size limited (#355)
Browse files Browse the repository at this point in the history
* ⚡️ Merge class and mint/send nft tx no size limited

* 🎨 Compact message array concatenation
  • Loading branch information
williamchong committed Jun 5, 2023
1 parent 2e96d3d commit cc846fe
Showing 1 changed file with 52 additions and 20 deletions.
72 changes: 52 additions & 20 deletions pages/nft/iscn/_iscnId.vue
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,10 @@ export default class NFTTestMintPage extends Vue {
return this.walletType === 'liker-id'
}
get isTransactionSizeLimited() {
return this.isUsingLikerLandApp
}
get createNftClassPayload() {
let metadata: {[key: string]: any} = {
image: this.ogImageUri,
Expand Down Expand Up @@ -450,10 +454,10 @@ export default class NFTTestMintPage extends Vue {
}
get premintAmount() {
if (this.isUsingLikerLandApp) {
return 35;
if (this.isTransactionSizeLimited) {
return 32;
}
return this.isWritingNFT ? 500 : 100;
return 256;
}
get imgSrc() {
Expand Down Expand Up @@ -851,7 +855,7 @@ export default class NFTTestMintPage extends Vue {
const existingClassesLength = classes?.length || 0;
const expectedClassId = calculateNFTClassIdByISCNId(this.iscnId, existingClassesLength)
const messages = [formatMsgNewClass(
let messages = [formatMsgNewClass(
this.address,
this.iscnId,
this.createNftClassPayload,
Expand All @@ -860,7 +864,16 @@ export default class NFTTestMintPage extends Vue {
if (config) {
messages.push(formatMsgCreateRoyaltyConfig(this.address, expectedClassId, config))
}
await signingClient.sendMessages(this.address, messages);
const { mintMessages, sendMessages } = this.getNFTMessages(expectedClassId);
if (!this.isTransactionSizeLimited) {
messages.push(...mintMessages, ...sendMessages);
const res = await signingClient.sendMessages(this.address, messages);
this.mintNFTResult = res;
this.sendNFTResult = res;
} else {
messages = messages.concat(mintMessages);
this.mintNFTResult = await signingClient.sendMessages(this.address, messages);
}
classId = expectedClassId
} catch (error) {
logTrackerEvent(this, 'IscnMintNFT', 'CreateNftClassError', (error as Error).toString(), 1);
Expand Down Expand Up @@ -912,39 +925,58 @@ export default class NFTTestMintPage extends Vue {
return null;
}
async mintNFT() {
await this.initIfNecessary()
try {
if (!this.signer) return
const signingClient = await getSigningClient()
await signingClient.setSigner(this.signer)
if (!this.nftsIds.length) this.nftsIds = [...Array(this.premintAmount).keys()]
getNFTMessages(classId = this.classId) {
if (!this.nftsIds.length) this.nftsIds = [...Array(this.premintAmount).keys()]
.map((_) => `${this.isWritingNFT ? 'writing-' : ''}${uuidv4()}`);
const nfts = this.nftsIds.map(id => this.getMintNftPayload(id))
const mintMessages = nfts.map((i) =>
formatMsgMintNFT(this.address, this.classId, i),
formatMsgMintNFT(this.address, classId, i),
)
const nftsToSend = nfts.filter((_, index) => index >= this.reserveNft)
const sendMessages = nftsToSend.map((i) =>
formatMsgSend(this.address, LIKER_NFT_API_WALLET, this.classId, i.id),
formatMsgSend(this.address, LIKER_NFT_API_WALLET, classId, i.id),
)
return {
mintMessages,
sendMessages,
}
}
async mintNFT() {
await this.initIfNecessary()
try {
if (!this.signer) return
const signingClient = await getSigningClient()
await signingClient.setSigner(this.signer)
logTrackerEvent(this, 'IscnMintNFT', 'MintNFT', this.classId, 1);
const shouldMintNFT = !this.mintNFTResult
const shouldSendNFT = this.isWritingNFT && !this.sendNFTResult
const { mintMessages, sendMessages } = this.getNFTMessages();
let messages: any[] = []
if (shouldMintNFT) {
this.mintNFTResult = await signingClient.sendMessages(
this.address,
mintMessages,
)
if (this.isTransactionSizeLimited) {
this.mintNFTResult = await signingClient.sendMessages(
this.address,
mintMessages,
)
} else {
messages.push(...mintMessages)
}
}
if (shouldSendNFT) {
messages = messages.concat(sendMessages)
this.sendNFTResult = await signingClient.sendMessages(
this.address,
sendMessages,
messages,
)
// mintNFTResult not set means mint is sent together with send
if (shouldMintNFT && !this.mintNFTResult) {
this.mintNFTResult = this.sendNFTResult;
}
}
} catch (error) {
logTrackerEvent(
Expand Down

0 comments on commit cc846fe

Please sign in to comment.