mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2026-04-29 15:37:48 +00:00
129 lines
4.1 KiB
JavaScript
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()
|