mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-21 04:05:49 +00:00
WIP broker-sale.md
This commit is contained in:
256
content/tutorials/quickstart/broker-sale.md
Normal file
256
content/tutorials/quickstart/broker-sale.md
Normal file
@@ -0,0 +1,256 @@
|
||||
---
|
||||
html: broker-sale.html
|
||||
parent: xrpl-quickstart.html
|
||||
blurb: Broker a sale between a sell offer and a buy offer.
|
||||
labels:
|
||||
- Accounts
|
||||
- Quickstart
|
||||
- Broker
|
||||
- XRP
|
||||
---
|
||||
# Broker a NFToken Sale
|
||||
|
||||
## Usage
|
||||
|
||||
## Code Walkthrough
|
||||
|
||||
// Add Issuer - perhaps as a new IssueToken button and Token Taxon
|
||||
|
||||
// *******************************************************
|
||||
// *******************************************************
|
||||
// ************** Broker Transactions ********************
|
||||
// *******************************************************
|
||||
// *******************************************************
|
||||
|
||||
// *******************************************************
|
||||
// *************** Broker Get Offers *********************
|
||||
// *******************************************************
|
||||
|
||||
async function brGetOffers() {
|
||||
const standby_wallet = xrpl.Wallet.fromSeed(brokerSeedField.value)
|
||||
let net = getNet()
|
||||
const client = new xrpl.Client(net)
|
||||
results = 'Connecting to ' + getNet() + '...'
|
||||
document.getElementById('brokerResultField').value = results
|
||||
await client.connect()
|
||||
results += '\nConnected. Getting offers...'
|
||||
document.getElementById('brokerResultField').value = results
|
||||
|
||||
results += '\n\n***Sell Offers***\n'
|
||||
let nftSellOffers
|
||||
try {
|
||||
nftSellOffers = await client.request({
|
||||
method: "nft_sell_offers",
|
||||
nft_id: brokerTokenIdField.value
|
||||
})
|
||||
} catch (err) {
|
||||
nftSellOffers = 'No sell offers.'
|
||||
}
|
||||
results += JSON.stringify(nftSellOffers,null,2)
|
||||
document.getElementById('brokerResultField').value = results
|
||||
|
||||
results += '\n\n***Buy Offers***\n'
|
||||
let nftBuyOffers
|
||||
try {
|
||||
nftBuyOffers = await client.request({
|
||||
method: "nft_buy_offers",
|
||||
nft_id: brokerTokenIdField.value })
|
||||
} catch (err) {
|
||||
nftBuyOffers = 'No buy offers.'
|
||||
}
|
||||
results += JSON.stringify(nftBuyOffers,null,2)
|
||||
|
||||
document.getElementById('brokerResultField').value = results
|
||||
|
||||
client.disconnect()
|
||||
// End of getOffers()
|
||||
}
|
||||
|
||||
// *******************************************************
|
||||
// ******************* Broker Sale ***********************
|
||||
// *******************************************************
|
||||
|
||||
async function brokerSale() {
|
||||
const standby_wallet = xrpl.Wallet.fromSeed(standbySeedField.value)
|
||||
const operational_wallet = xrpl.Wallet.fromSeed(operationalSeedField.value)
|
||||
const broker_wallet = xrpl.Wallet.fromSeed (brokerSeedField.value)
|
||||
let net = getNet()
|
||||
const client = new xrpl.Client(net)
|
||||
results = 'Connecting to ' + getNet() + '...'
|
||||
document.getElementById('brokerResultField').value = results
|
||||
await client.connect()
|
||||
results += '\nConnected. Brokering sale...'
|
||||
document.getElementById('brokerResultField').value = results
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenAcceptOffer",
|
||||
"Account": broker_wallet.classicAddress,
|
||||
"NFTokenSellOffer": brokerTokenSellOfferIndexField.value,
|
||||
"NFTokenBuyOffer": brokerTokenBuyOfferIndexField.value,
|
||||
"Fee": brokerBrokerFeeField.value
|
||||
}
|
||||
// Submit transaction --------------------------------------------------------
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet: broker_wallet})
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
results += "\n\nTransaction result:\n" +
|
||||
JSON.stringify(tx.result.meta.TransactionResult, null, 2)
|
||||
results += "\nBalance changes:\n" +
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2)
|
||||
document.getElementById('operationalBalanceField').value =
|
||||
(await client.getXrpBalance(operational_wallet.address))
|
||||
document.getElementById('standbyBalanceField').value =
|
||||
(await client.getXrpBalance(standby_wallet.address))
|
||||
document.getElementById('brokerBalanceField').value =
|
||||
(await client.getXrpBalance(broker_wallet.address))
|
||||
document.getElementById('brokerResultField').value = results
|
||||
client.disconnect()
|
||||
// End of brokerAcceptBrokeredOffer()
|
||||
}
|
||||
|
||||
// ***************************************************************************
|
||||
// ************** Revised Functions ******************************************
|
||||
// ***************************************************************************
|
||||
|
||||
// *******************************************************
|
||||
// ************* Get Account *****************************
|
||||
// *******************************************************
|
||||
|
||||
|
||||
async function getAccount(type) {
|
||||
let net = getNet()
|
||||
|
||||
const client = new xrpl.Client(net)
|
||||
results = 'Connecting to ' + net + '....'
|
||||
|
||||
// This uses the default faucet for Testnet/Devnet
|
||||
let faucetHost = null
|
||||
if(document.getElementById("xls").checked) {
|
||||
faucetHost = "faucet-nft.ripple.com"
|
||||
}
|
||||
|
||||
if (type == 'standby') {
|
||||
document.getElementById('standbyResultField').value = results
|
||||
}
|
||||
if (type == 'operational') {
|
||||
document.getElementById('operationalResultField').value = results
|
||||
}
|
||||
if (type == 'broker') {
|
||||
document.getElementById('brokerResultField').value = results
|
||||
}
|
||||
await client.connect()
|
||||
|
||||
results += '\nConnected, funding wallet.'
|
||||
if (type == 'standby') {
|
||||
document.getElementById('standbyResultField').value = results
|
||||
}
|
||||
if (type == 'operational') {
|
||||
document.getElementById('operationalResultField').value = results
|
||||
}
|
||||
if (type == 'broker') {
|
||||
document.getElementById('brokerResultField').value = results
|
||||
}
|
||||
|
||||
// -----------------------------------Create and fund a test account wallet
|
||||
const my_wallet = (await client.fundWallet(null, { faucetHost })).wallet
|
||||
|
||||
results += '\nGot a wallet.'
|
||||
if (type == 'standby') {
|
||||
document.getElementById('standbyResultField').value = results
|
||||
}
|
||||
if (type == 'operational') {
|
||||
document.getElementById('operationalResultField').value = results
|
||||
}
|
||||
if (type == 'broker') {
|
||||
document.getElementById('brokerResultField').value = results
|
||||
}
|
||||
|
||||
// -----------------------------------Get the current balance.
|
||||
const my_balance = (await client.getXrpBalance(my_wallet.address))
|
||||
|
||||
if (type == 'standby') {
|
||||
document.getElementById('standbyAccountField').value = my_wallet.address
|
||||
document.getElementById('standbyPubKeyField').value = my_wallet.publicKey
|
||||
document.getElementById('standbyPrivKeyField').value = my_wallet.privateKey
|
||||
document.getElementById('standbyBalanceField').value =
|
||||
(await client.getXrpBalance(my_wallet.address))
|
||||
document.getElementById('standbySeedField').value = my_wallet.seed
|
||||
results += '\nStandby account created.'
|
||||
document.getElementById('standbyResultField').value = results
|
||||
}
|
||||
if (type == 'operational') {
|
||||
document.getElementById('operationalAccountField').value = my_wallet.address
|
||||
document.getElementById('operationalPubKeyField').value = my_wallet.publicKey
|
||||
document.getElementById('operationalPrivKeyField').value = my_wallet.privateKey
|
||||
document.getElementById('operationalSeedField').value = my_wallet.seed
|
||||
document.getElementById('operationalBalanceField').value =
|
||||
(await client.getXrpBalance(my_wallet.address))
|
||||
results += '\nOperational account created.'
|
||||
document.getElementById('operationalResultField').value = results
|
||||
}
|
||||
if (type == 'broker') {
|
||||
document.getElementById('brokerAccountField').value = my_wallet.address
|
||||
document.getElementById('brokerPubKeyField').value = my_wallet.publicKey
|
||||
document.getElementById('brokerPrivKeyField').value = my_wallet.privateKey
|
||||
document.getElementById('brokerSeedField').value = my_wallet.seed
|
||||
document.getElementById('brokerBalanceField').value =
|
||||
(await client.getXrpBalance(my_wallet.address))
|
||||
results += '\nBroker account created.'
|
||||
document.getElementById('brokerResultField').value = results
|
||||
}
|
||||
// --------------- Capture the seeds for accounts for ease of reload.
|
||||
document.getElementById('seeds').value = standbySeedField.value + '\n' + operationalSeedField.value + "\n" + brokerSeedField.value
|
||||
client.disconnect()
|
||||
} // End of getAccount()
|
||||
|
||||
// *******************************************************
|
||||
// ********** Get Accounts from Seeds ********************
|
||||
// *******************************************************
|
||||
|
||||
async function getAccountsFromSeeds() {
|
||||
let net = getNet()
|
||||
const client = new xrpl.Client(net)
|
||||
results = 'Connecting to ' + getNet() + '....'
|
||||
document.getElementById('standbyResultField').value = results
|
||||
await client.connect()
|
||||
results += '\nConnected, finding wallets.\n'
|
||||
document.getElementById('standbyResultField').value = results
|
||||
|
||||
// -----------------------------------Find the test account wallets
|
||||
var lines = seeds.value.split('\n');
|
||||
const standby_wallet = xrpl.Wallet.fromSeed(lines[0])
|
||||
const operational_wallet = xrpl.Wallet.fromSeed(lines[1])
|
||||
const broker_wallet = xrpl.Wallet.fromSeed(lines[2])
|
||||
|
||||
// -----------------------------------Get the current balance.
|
||||
const standby_balance = (await client.getXrpBalance(standby_wallet.address))
|
||||
const operational_balance = (await client.getXrpBalance(operational_wallet.address))
|
||||
const broker_balance = (await client.getXrpBalance(broker_wallet.address))
|
||||
|
||||
document.getElementById('standbyAccountField').value = standby_wallet.address
|
||||
document.getElementById('standbyPubKeyField').value = standby_wallet.publicKey
|
||||
document.getElementById('standbyPrivKeyField').value = standby_wallet.privateKey
|
||||
document.getElementById('standbySeedField').value = standby_wallet.seed
|
||||
document.getElementById('standbyBalanceField').value =
|
||||
(await client.getXrpBalance(standby_wallet.address))
|
||||
|
||||
document.getElementById('operationalAccountField').value = operational_wallet.address
|
||||
document.getElementById('operationalPubKeyField').value = operational_wallet.publicKey
|
||||
document.getElementById('operationalPrivKeyField').value = operational_wallet.privateKey
|
||||
document.getElementById('operationalSeedField').value = operational_wallet.seed
|
||||
document.getElementById('operationalBalanceField').value =
|
||||
(await client.getXrpBalance(operational_wallet.address))
|
||||
|
||||
document.getElementById('brokerAccountField').value = broker_wallet.address
|
||||
document.getElementById('brokerPubKeyField').value = broker_wallet.publicKey
|
||||
document.getElementById('brokerPrivKeyField').value = broker_wallet.privateKey
|
||||
document.getElementById('brokerSeedField').value = broker_wallet.seed
|
||||
document.getElementById('brokerBalanceField').value =
|
||||
(await client.getXrpBalance(broker_wallet.address))
|
||||
|
||||
client.disconnect()
|
||||
|
||||
getBalances()
|
||||
|
||||
} // End of getAccountsFromSeeds()
|
||||
Reference in New Issue
Block a user