Files
xrpl-dev-portal/content/_code-samples/quickstart/js/ripplex7-batch-minting.js
2023-06-07 13:50:16 -07:00

182 lines
6.0 KiB
JavaScript

// *******************************************************
// ************ Get Account from Seed ******************
// *******************************************************
async function getAccountFromSeed() {
let net = getNet()
const client = new xrpl.Client(net)
results = 'Connecting to ' + getNet() + '....'
standbyResultField.value = results
await client.connect()
results += '\nConnected, finding wallets.\n'
standbyResultField.value = results
// -------------------------------------------- Find the test account wallet.
var theSeed = seeds.value
const standby_wallet = xrpl.Wallet.fromSeed(theSeed)
// ------------------------------------------------- Get the current balance.
const standby_balance = (await client.getXrpBalance(standby_wallet.address))
// --------------------------------- Populate the fields for Standby account.
standbyAccountField.value = standby_wallet.address
standbyPubKeyField.value = standby_wallet.publicKey
standbyPrivKeyField.value = standby_wallet.privateKey
standbySeedField.value = standby_wallet.seed
standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address))
client.disconnect()
} // End of getAccountsFromSeeds()
// *******************************************************
// **************** Get Batch Tokens *********************
// *******************************************************
async function getBatchNFTs() {
const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value)
let net = getNet()
const client = new xrpl.Client(net)
results = 'Connecting to ' + net + '...'
standbyResultField.value = results
await client.connect()
results += '\nConnected. Getting NFTs...'
standbyResultField.value = results
results += "\n\nNFTs:\n"
let nfts = await client.request({
method: "account_nfts",
account: standby_wallet.classicAddress,
limit: 400
})
results += JSON.stringify(nfts,null,2)
while (nfts.result.marker)
{
nfts = await client.request({
method: "account_nfts",
account: standby_wallet.classicAddress,
limit: 400,
marker: nfts.result.marker
})
results += '\n' + JSON.stringify(nfts,null,2)
}
standbyResultField.value = results
client.disconnect()
} //End of getBatchTokens()
// *******************************************************
// ****************** Batch Mint ***********************
// *******************************************************
async function batchMint() {
//--------------------- Connect to the XRP Ledger and get the account wallet.
let net = getNet()
const client = new xrpl.Client(net)
results = 'Connecting to ' + getNet() + '....'
standbyResultField.value = results
await client.connect()
results += '\nConnected, finding wallet.'
standbyResultField.value = results
standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value)
standbyResultField.value = results
//----------------- Get account information, particularly the Sequence number.
const account_info = await client.request({
"command": "account_info",
"account": standby_wallet.address
})
my_sequence = account_info.result.account_data.Sequence
results += "\n\nSequence Number: " + my_sequence + "\n\n"
standbyResultField.value = results
/* ###################################
Create ticket numbers for the batch
Without tickets, if one transaction fails, all others in the batch fail.
With tickets, there can be failures, but the rest will continue, and you
can investigate any problems afterward.
*/
//---------------------- Parse the requested number from NFTokenCountField.
const nftokenCount = parseInt(standbyNFTokenCountField.value)
//-------------------------------------------- Create the transaction hash.
const ticketTransaction = await client.autofill({
"TransactionType": "TicketCreate",
"Account": standby_wallet.address,
"TicketCount": nftokenCount,
"Sequence": my_sequence
})
//---------------------------------------------------- Sign the transaction.
const signedTransaction = standby_wallet.sign(ticketTransaction)
//-------------------------- Submit the transaction and wait for the result.
const tx = await client.submitAndWait(signedTransaction.tx_blob)
let response = await client.request({
"command": "account_objects",
"account": standby_wallet.address,
"type": "ticket"
})
//------------------------------------ Populate the tickets array variable.
let tickets = []
for (let i=0; i < nftokenCount; i++) {
tickets[i] = response.result.account_objects[i].TicketSequence
}
//-------------------------------------------------------- Report progress.
results += "Tickets generated, minting NFTs.\n\n"
standbyResultField.value = results
// ###################################
// Mint NFTs
for (let i=0; i < nftokenCount; i++) {
const transactionBlob = {
"TransactionType": "NFTokenMint",
"Account": standby_wallet.classicAddress,
"URI": xrpl.convertStringToHex(standbyTokenUrlField.value),
"Flags": parseInt(standbyFlagsField.value),
"TransferFee": parseInt(standbyTransferFeeField.value),
"Sequence": 0,
"TicketSequence": tickets[i],
"LastLedgerSequence": null,
"NFTokenTaxon": 0
}
//------------------------------------------------------ Submit signed blob.
const tx = client.submit(transactionBlob, { wallet: standby_wallet} )
}
results += "\n\nNFTs:\n"
let nfts = await client.request({
method: "account_nfts",
account: standby_wallet.classicAddress,
limit: 400
})
results += JSON.stringify(nfts,null,2)
while (nfts.result.marker)
{
nfts = await client.request({
method: "account_nfts",
account: standby_wallet.classicAddress,
limit: 400,
marker: nfts.result.marker
})
results += '\n' + JSON.stringify(nfts,null,2)
}
results += '\n\nTransaction result: '+ tx.result.meta.TransactionResult
results += '\n\nNFTs: ' + JSON.stringify(nfts, null, 2)
standbyBalanceField.value = (await client.getXrpBalance(standby_wallet.address))
standbyResultField.value = results
client.disconnect()
} // End of batchMint()