Files
xrpl-dev-portal/_code-samples/modular-tutorials/create-offer.js
Mayukha Vadari 0b247281eb run prettier
2026-01-12 14:19:31 -05:00

129 lines
4.1 KiB
JavaScript

/***********************************
*********** Create Offer **********
**********************************/
async function createOffer() {
let net = getNet()
const client = new xrpl.Client(net)
await client.connect()
let results = `===Connected to ${net}, getting wallet....===\n`
resultField.value = results
const wallet = xrpl.Wallet.fromSeed(accountSeedField.value)
try {
if (getCurrencyField.value == 'XRP') {
takerGets = xrpl.xrpToDrops(getAmountField.value)
} else {
takerGetsString =
'{"currency": "' +
getCurrencyField.value +
'",\n' +
'"issuer": "' +
getIssuerField.value +
'",\n' +
'"value": "' +
getAmountField.value +
'"}'
takerGets = JSON.parse(takerGetsString)
}
if (payCurrencyField.value == 'XRP') {
takerPays = xrpl.xrpToDrops(payAmountField.value)
} else {
takerPaysString =
'{"currency": "' +
payCurrencyField.value +
'",\n' +
'"issuer": "' +
payIssuerField.value +
'",\n' +
'"value": "' +
payAmountField.value +
'"}'
takerPays = JSON.parse(takerPaysString)
}
const prepared = await client.autofill({
TransactionType: 'OfferCreate',
Account: wallet.address,
TakerGets: takerGets,
TakerPays: takerPays,
})
const signed = wallet.sign(prepared)
const tx = await client.submitAndWait(signed.tx_blob)
results = '\n\n===Offer created===\n\n' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2)
resultField.value += results
xrpBalanceField.value = await client.getXrpBalance(wallet.address)
} catch (err) {
console.error('Error creating offer:', err)
results = `\nError: ${err.message}\n`
resultField.value += results
throw err // Re-throw the error to be handled by the caller
} finally {
// Disconnect from the client
client.disconnect()
}
} // End of createOffer()
/***********************************
************ Get Offers ***********
**********************************/
async function getOffers() {
let net = getNet()
const client = new xrpl.Client(net)
await client.connect()
let results = `===Connected to ' + ${net}, getting offers....===\n`
const wallet = xrpl.Wallet.fromSeed(accountSeedField.value)
resultField.value = results
results += '\n\n=== Offers ===\n'
let offers
try {
offers = await client.request({
method: 'account_offers',
account: wallet.address,
ledger_index: 'validated',
})
results = JSON.stringify(offers, null, 2)
resultField.value += results
} catch (err) {
console.error('Error getting offers:', err)
results = `\nError: ${err.message}\n`
resultField.value += results
throw err // Re-throw the error to be handled by the caller
} finally {
client.disconnect()
}
} // End of getOffers()
/***********************************
*********** Cancel Offer **********
**********************************/
async function cancelOffer() {
let net = getNet()
const client = new xrpl.Client(net)
await client.connect()
let results = `===Connected to ${net}, canceling offer.===\n`
resultField.value = results
const wallet = xrpl.Wallet.fromSeed(accountSeedField.value)
try {
// OfferSequence is the _seq_ value from getOffers.
const prepared = await client.autofill({
TransactionType: 'OfferCancel',
Account: wallet.address,
OfferSequence: parseInt(offerSequenceField.value),
})
const signed = wallet.sign(prepared)
const tx = await client.submitAndWait(signed.tx_blob)
results += '\nOffer canceled. Balance changes: \n' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2)
resultField.value = results
xrpBalanceField.value = await client.getXrpBalance(wallet.address)
} catch (err) {
console.error('Error canceling offer:', err)
results = `\nError: ${err.message}\n`
resultField.value += results
throw err // Re-throw the error to be handled by the caller
} finally {
// Disconnect from the client
client.disconnect()
}
} // End of cancelOffer()