// ******************************************************* // ************* Add Seconds to Current Date ************* // ******************************************************* function addSeconds(numOfSeconds, date = new Date()) { date.setSeconds(date.getSeconds() + numOfSeconds) date = Math.floor(date / 1000) date = date - 946684800 return date } // ******************************************************* // ***************** Create Time Escrow ****************** // ******************************************************* async function createTimeEscrow() { //-------------------------------------------- Prepare Finish and Cancel Dates let escrow_finish_date = new Date() let escrow_cancel_date = new Date() escrow_finish_date = addSeconds(parseInt(standbyEscrowFinishDateField.value)) escrow_cancel_date = addSeconds(parseInt(standbyEscrowCancelDateField.value)) //------------------------------------------------------Connect to the Ledger 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. Creating time-based escrow.\n' standbyResultField.value = results const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) const sendAmount = standbyAmountField.value results += '\nstandby_wallet.address: = ' + standby_wallet.address standbyResultField.value = results // ------------------------------------------------------- Prepare transaction const escrowTx = await client.autofill({ TransactionType: 'EscrowCreate', Account: standby_wallet.address, Amount: xrpl.xrpToDrops(sendAmount), Destination: standbyDestinationField.value, FinishAfter: escrow_finish_date, CancelAfter: escrow_cancel_date, }) // ------------------------------------------------ Sign prepared instructions const signed = standby_wallet.sign(escrowTx) // -------------------------------------------------------- Submit signed blob const tx = await client.submitAndWait(signed.tx_blob) results += '\nSequence Number (Save!): ' + JSON.stringify(tx.result.Sequence) results += '\n\nBalance changes: ' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) standbyBalanceField.value = await client.getXrpBalance(standby_wallet.address) operationalBalanceField.value = await client.getXrpBalance(operational_wallet.address) standbyResultField.value = results // ----------------------------------------------Disconnect from the XRP Ledger client.disconnect() } // End of createTimeEscrow() // ******************************************************* // ***************** Finish Time Escrow ****************** // ******************************************************* async function finishEscrow() { results = 'Connecting to the selected ledger.\n' operationalResultField.value = results let net = getNet() results = 'Connecting to ' + getNet() + '....' const client = new xrpl.Client(net) await client.connect() results += '\nConnected. Finishing escrow.\n' operationalResultField.value = results const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) const sendAmount = operationalAmountField.value results += '\noperational_wallet.address: = ' + operational_wallet.address operationalResultField.value = results // ------------------------------------------------------- Prepare transaction // Note that the destination is hard coded. const prepared = await client.autofill({ TransactionType: 'EscrowFinish', Account: operationalAccountField.value, Owner: standbyAccountField.value, OfferSequence: parseInt(operationalEscrowSequenceField.value), }) // ------------------------------------------------ Sign prepared instructions const signed = operational_wallet.sign(prepared) // -------------------------------------------------------- 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) client.disconnect() } // End of finishEscrow() // ******************************************************* // ************** Get Standby Escrows ******************** // ******************************************************* async function getStandbyEscrows() { let net = getNet() const client = new xrpl.Client(net) results = 'Connecting to ' + getNet() + '....' standbyResultField.value = results await client.connect() results += '\nConnected.' standbyResultField.value = results results = '\nGetting standby account escrows...\n' const escrow_objects = await client.request({ id: 5, command: 'account_objects', account: standbyAccountField.value, ledger_index: 'validated', type: 'escrow', }) results += JSON.stringify(escrow_objects.result, null, 2) standbyResultField.value = results client.disconnect() } // End of getStandbyEscrows() // ******************************************************* // ***************** Get Op Escrows ********************** // ******************************************************* async function getOperationalEscrows() { let net = getNet() const client = new xrpl.Client(net) results = 'Connecting to ' + getNet() + '....' operationalResultField.value = results await client.connect() results += '\nConnected.' operationalResultField.value = results results = '\nGetting operational account escrows...\n' const escrow_objects = await client.request({ id: 5, command: 'account_objects', account: operationalAccountField.value, ledger_index: 'validated', type: 'escrow', }) results += JSON.stringify(escrow_objects.result, null, 2) operationalResultField.value = results client.disconnect() } // End of getOperationalEscrows() // ******************************************************* // ************** Get Transaction Info ******************* // ******************************************************* async function getTransaction() { let net = getNet() const client = new xrpl.Client(net) results = 'Connecting to ' + getNet() + '....' operationalResultField.value = results await client.connect() results += '\nConnected.' operationalResultField.value = results results = '\nGetting transaction information...\n' const tx_info = await client.request({ id: 1, command: 'tx', transaction: operationalTransactionField.value, }) results += JSON.stringify(tx_info.result, null, 2) operationalResultField.value = results client.disconnect() } // End of getTransaction() // ******************************************************* // ****************** Cancel Escrow ********************** // ******************************************************* async function cancelEscrow() { let net = getNet() const client = new xrpl.Client(net) results = 'Connecting to ' + getNet() + '....' standbyResultField.value = results await client.connect() results += '\nConnected.' standbyResultField.value = results const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value) const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value) // ------------------------------------------------------- Prepare transaction const prepared = await client.autofill({ TransactionType: 'EscrowCancel', Account: standby_wallet.address, Owner: standbyAccountField.value, OfferSequence: parseInt(standbyEscrowSequenceNumberField.value), }) // ------------------------------------------------ Sign prepared instructions const signed = standby_wallet.sign(prepared) // -------------------------------------------------------- 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) client.disconnect() }