// Create credential function async function createCredential() { let net = getNet() const client = new xrpl.Client(net) results = `\n\n===Creating Credential===\n\nConnecting to ${getNet()} ...` updateResults() await client.connect() results = `\n\nConnected.` updateResults() // Gather transaction info try { // Get account wallet from seed const wallet = xrpl.Wallet.fromSeed(accountSeedField.value) // Get subject const subject = subjectField.value // Get credential type - convert string to hex if needed let credentialType = credentialTypeField.value; if (!/^[0-9A-F]+$/i.test(credentialType)) { let hex = ''; for (let i = 0; i < credentialType.length; i++) { const charCode = credentialType.charCodeAt(i); const hexCharCode = charCode.toString(16).padStart(2, '0'); hex += hexCharCode; } credentialType = hex.toUpperCase(); } // Prepare transaction const transaction = { "TransactionType": "CredentialCreate", "Account": wallet.address, "Subject": subject, "CredentialType": credentialType } results = `\n\n===Preparing and Sending Transaction===\n\n${JSON.stringify(transaction, null, 2)}` updateResults() // Submit transaction const tx = await client.submitAndWait(transaction, {autofill: true, wallet: wallet}) if (tx.result.meta.TransactionResult == "tesSUCCESS") { // Parse for credential info const parsedResponse = JSON.parse(JSON.stringify(tx.result.meta.AffectedNodes, null, 2)) const credentialInfo = parsedResponse.find( node => node.CreatedNode && node.CreatedNode.LedgerEntryType === "Credential" ) results = `\n\n===Create Credential Result===\n\n${JSON.stringify(credentialInfo.CreatedNode, null, 2)}` } else { results = `\n\n===Error===\n\n${JSON.stringify(tx.result.meta.TransactionResult, null, 2)}: Check codes at https://xrpl.org/docs/references/protocol/transactions/types/credentialcreate#error-cases` } updateResults() } catch (error) { results = `\n\n===Error===\n\n${error}` updateResults() } client.disconnect() }