/*********************************** *********** Create Offer ********** **********************************/ async function createOffer() { let takerGets = '' let takerPays = '' let net = getNet() let results = 'Connecting to ' + net + '....\n' const client = new xrpl.Client(net) await client.connect() results += 'Connected. Getting wallets.\n' standbyResultField.value = results const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) results += standbyNameField.value + ' account address: ' + standby_wallet.address + '\n' standbyResultField.value = results if (standbyTakerGetsCurrencyField.value == 'XRP') { takerGets = standbyTakerGetsValueField.value } else { takerGetsString = '{"currency": "' + standbyTakerGetsCurrencyField.value + '",\n' + '"issuer": "' + standbyTakerGetsIssuerField.value + '",\n' + '"value": "' + standbyTakerGetsValueField.value + '"}' takerGets = JSON.parse(takerGetsString) } if (standbyTakerPaysCurrencyField.value == 'XRP') { takerPays = standbyTakerPaysValueField.value } else { takerPaysString = '{"currency": "' + standbyTakerPaysCurrencyField.value + '",\n' + '"issuer": "' + standbyTakerPaysIssuerField.value + '",\n' + '"value": "' + standbyTakerPaysValueField.value + '"}' takerPays = JSON.parse(takerPaysString) } // -------------------------------------------------------- Prepare transaction const prepared = await client.autofill({ TransactionType: 'OfferCreate', Account: standby_wallet.address, TakerGets: takerGets, TakerPays: takerPays, }) // ------------------------------------------------- Sign prepared instructions const signed = standby_wallet.sign(prepared) results += '\nSubmitting transaction....' // -------------------------------------------------------- Submit signed blob const tx = await client.submitAndWait(signed.tx_blob) results += '\nBalance changes: ' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) standbyResultField.value = results standbyBalanceField.value = await client.getXrpBalance(standby_wallet.address) operationalBalanceField.value = await client.getXrpBalance(operational_wallet.address) getOffers() client.disconnect() } // End of createOffer() /*********************************** ************ Get Offers *********** **********************************/ async function getOffers() { let net = getNet() let results = 'Connecting to ' + net + '....\n' const client = new xrpl.Client(net) await client.connect() results += 'Connected.\n' const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) results += standbyNameField.value + ' account: ' + standby_wallet.address // -------------------------------------------------------- Prepare request results += '\n\n*** Offers ***\n' let offers try { const offers = await client.request({ method: 'account_offers', account: standby_wallet.address, ledger_index: 'validated', }) results += JSON.stringify(offers, null, 2) } catch (err) { results += err } standbyResultField.value = results client.disconnect() } // End of getOffers() /*********************************** *********** Cancel Offer ********** **********************************/ async function cancelOffer() { let results = 'Connecting to the selected ledger.\n' standbyResultField.value = results let net = getNet() results += 'Connecting to ' + net + '....\n' const client = new xrpl.Client(net) await client.connect() results += 'Connected.\n' standbyResultField.value = results const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) results += 'standby_wallet.address: = ' + standby_wallet.address standbyResultField.value = results // -------------------------------------------------------- Prepare transaction /* OfferSequence is the Seq value when you getOffers. */ const prepared = await client.autofill({ TransactionType: 'OfferCancel', Account: standby_wallet.address, OfferSequence: parseInt(standbyOfferSequenceField.value), }) // ------------------------------------------------- Sign prepared instructions const signed = standby_wallet.sign(prepared) // -------------------------------------------------------- Submit signed blob const tx = await client.submitAndWait(signed.tx_blob) results += '\nBalance changes: \n' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) standbyResultField.value = results standbyBalanceField.value = await client.getXrpBalance(standby_wallet.address) client.disconnect() } // End of cancelOffer() /********************************************* ************* Reciprocal Functions ********** ********************************************/ /*********************************** ********* OP Create Offer ********* **********************************/ async function oPcreateOffer() { let takerGets = '' let takerPays = '' operationalResultField.value = '' let net = getNet() let results = 'Connecting to ' + net + '....\n' const client = new xrpl.Client(net) await client.connect() results += 'Connected. Getting wallets.\n' operationalResultField.value = results const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) results += operationalNameField.value + ' account address: ' + operational_wallet.address + '\n' operationalResultField.value = results if (operationalTakerGetsCurrencyField.value == 'XRP') { takerGets = operationalTakerGetsValueField.value } else { takerGetsString = '{"currency": "' + operationalTakerGetsCurrencyField.value + '",\n' + '"issuer": "' + operationalTakerGetsIssuerField.value + '",\n' + '"value": "' + operationalTakerGetsValueField.value + '"}' takerGets = JSON.parse(takerGetsString) } if (operationalTakerPaysCurrencyField.value == 'XRP') { takerPays = operationalTakerPaysValueField.value } else { takerPaysString = '{"currency": "' + operationalTakerPaysCurrencyField.value + '",\n' + '"issuer": "' + operationalTakerPaysIssuerField.value + '",\n' + '"value": "' + operationalTakerPaysValueField.value + '"}' takerPays = JSON.parse(takerPaysString) } // -------------------------------------------------------- Prepare transaction const prepared = await client.autofill({ TransactionType: 'OfferCreate', Account: operational_wallet.address, TakerGets: takerGets, TakerPays: takerPays, }) // ------------------------------------------------- Sign prepared instructions const signed = operational_wallet.sign(prepared) results += '\nSubmitting transaction....' // -------------------------------------------------------- Submit signed blob const tx = await client.submitAndWait(signed.tx_blob) results += '\nBalance changes: ' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) operationalResultField.value = results standbyBalanceField.value = await client.getXrpBalance(standby_wallet.address) operationalBalanceField.value = await client.getXrpBalance(operational_wallet.address) getOffers() client.disconnect() } // End of oPcreateOffer() /*********************************** ********** OP Get Offers *********** ***********************************/ async function oPgetOffers() { let results = 'Connecting to the selected ledger.\n' operationalResultField.value = results let net = getNet() results = 'Connecting to ' + net + '....\n' const client = new xrpl.Client(net) await client.connect() results += 'Connected.\n' const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) results += operationalNameField.value + ' account: ' + operational_wallet.address operationalResultField.value = results // -------------------------------------------------------- Prepare request results += '\n\n*** Offers ***\n' let offers try { const offers = await client.request({ method: 'account_offers', account: operational_wallet.address, ledger_index: 'validated', }) results += JSON.stringify(offers, null, 2) } catch (err) { results += err } operationalResultField.value = results client.disconnect() } // End of oPgetOffers() /************************************ ********** Op Cancel Offer ********* ***********************************/ async function oPcancelOffer() { let net = getNet() let results = 'Connecting to ' + net + '....\n' const client = new xrpl.Client(net) await client.connect() results += 'Connected.\n' const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) results += 'wallet.address: = ' + operational_wallet.address operationalResultField.value = results // -------------------------------------------------------- Prepare transaction /* OfferSequence is the Seq value when you getOffers. */ const prepared = await client.autofill({ TransactionType: 'OfferCancel', Account: operational_wallet.address, OfferSequence: parseInt(operationalOfferSequenceField.value), }) // ------------------------------------------------- Sign prepared instructions const signed = operational_wallet.sign(prepared) // -------------------------------------------------------- Submit signed blob const tx = await client.submitAndWait(signed.tx_blob) results += '\nBalance changes: \n' + tx.result + '\n' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) operationalResultField.value = results operationalBalanceField.value = await client.getXrpBalance(operational_wallet.address) client.disconnect() } // End of oPcancelOffer()