mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-04 20:05:50 +00:00
Add NFT Tutorial
This commit is contained in:
1104
content/tutorials/use-nfts/nftoken-tester-tutorial.md
Normal file
1104
content/tutorials/use-nfts/nftoken-tester-tutorial.md
Normal file
File diff suppressed because it is too large
Load Diff
419
content/tutorials/use-nfts/nftoken-tester.htm
Normal file
419
content/tutorials/use-nfts/nftoken-tester.htm
Normal file
@@ -0,0 +1,419 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src='https://unpkg.com/xrpl@2.1.0-beta.1'></script>
|
||||
<script>
|
||||
if (typeof module !== "undefined") var xrpl = require('xrpl')
|
||||
|
||||
//***************************
|
||||
//** Mint Token *************
|
||||
//***************************
|
||||
|
||||
async function mintToken() {
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
// Note that you must convert the token URL to a hexadecimal
|
||||
// value for this transaction.
|
||||
// ----------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
TransactionType: "NFTokenMint",
|
||||
Account: wallet.classicAddress,
|
||||
URI: xrpl.convertStringToHex(tokenUrl.value),
|
||||
Flags: parseInt(flags.value),
|
||||
TokenTaxon: 0 //Required, but if you have no use for it, set to zero.
|
||||
}
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet})
|
||||
|
||||
const nfts = await client.request({
|
||||
method: "account_nfts",
|
||||
account: wallet.classicAddress
|
||||
})
|
||||
console.log(nfts)
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
console.log("Transaction result:", tx.result.meta.TransactionResult)
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
client.disconnect()
|
||||
} //End of mintToken
|
||||
|
||||
//***************************
|
||||
//** Get Tokens *************
|
||||
//***************************
|
||||
|
||||
async function getTokens() {
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
const nfts = await client.request({
|
||||
method: "account_nfts",
|
||||
account: wallet.classicAddress
|
||||
})
|
||||
console.log(nfts)
|
||||
client.disconnect()
|
||||
} //End of getTokens
|
||||
|
||||
//***************************
|
||||
//** Burn Token *************
|
||||
//***************************
|
||||
|
||||
async function burnToken() {
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenBurn",
|
||||
"Account": wallet.classicAddress,
|
||||
"TokenID": tokenId.value
|
||||
}
|
||||
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet})
|
||||
const nfts = await client.request({
|
||||
method: "account_nfts",
|
||||
account: wallet.classicAddress
|
||||
})
|
||||
console.log(nfts)
|
||||
// Check transaction results -------------------------------------------------
|
||||
console.log("Transaction result:", tx.result.meta.TransactionResult)
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
client.disconnect()
|
||||
}
|
||||
// End of burnToken()
|
||||
|
||||
//********************************
|
||||
//** Create Sell Offer ***********
|
||||
//********************************
|
||||
|
||||
async function createSellOffer() {
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenCreateOffer",
|
||||
"Account": wallet.classicAddress,
|
||||
"TokenID": tokenId.value,
|
||||
"Amount": amount.value,
|
||||
"Flags": 1 //parseInt(flags.value)
|
||||
}
|
||||
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet})//AndWait
|
||||
|
||||
|
||||
console.log("***Sell Offers***")
|
||||
let nftSellOffers
|
||||
try {
|
||||
nftSellOffers = await client.request({
|
||||
method: "nft_sell_offers",
|
||||
tokenid: tokenId.value
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("No sell offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftSellOffers,null,2))
|
||||
console.log("***Buy Offers***")
|
||||
let nftBuyOffers
|
||||
try {
|
||||
nftBuyOffers = await client.request({
|
||||
method: "nft_buy_offers",
|
||||
tokenid: tokenId.value })
|
||||
} catch (err) {
|
||||
console.log("No buy offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftBuyOffers,null,2))
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
console.log("Transaction result:",
|
||||
JSON.stringify(tx.result.meta.TransactionResult, null, 2))
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
client.disconnect()
|
||||
// End of createSellOffer()
|
||||
}
|
||||
//********************************
|
||||
//** Create Buy Offer ***********
|
||||
//********************************
|
||||
|
||||
async function createBuyOffer() {
|
||||
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenCreateOffer",
|
||||
"Account": wallet.classicAddress,
|
||||
"Owner": owner.value,
|
||||
"TokenID": tokenId.value,
|
||||
"Amount": amount.value,
|
||||
"Flags": 0 //parseInt(flags.value)
|
||||
}
|
||||
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
const tx = await client.submit(transactionBlob,{wallet})//AndWait
|
||||
|
||||
console.log("***Sell Offers***")
|
||||
let nftSellOffers
|
||||
try {
|
||||
nftSellOffers = await client.request({
|
||||
method: "nft_sell_offers",
|
||||
tokenid: tokenId.value
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("No sell offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftSellOffers,null,2))
|
||||
console.log("***Buy Offers***")
|
||||
let nftBuyOffers
|
||||
try {
|
||||
nftBuyOffers = await client.request({
|
||||
method: "nft_buy_offers",
|
||||
tokenid: tokenId.value })
|
||||
} catch (err) {
|
||||
console.log("No buy offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftBuyOffers,null,2))
|
||||
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
console.log("Transaction result:",
|
||||
JSON.stringify(tx.result.meta.TransactionResult, null, 2))
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
client.disconnect()
|
||||
// End of createBuyOffer()
|
||||
}
|
||||
|
||||
//***************************
|
||||
//** Cancel Offer ***********
|
||||
//***************************
|
||||
|
||||
async function cancelOffer() {
|
||||
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
const tokenID = tokenOfferIndex.value
|
||||
const tokenIDs = [tokenID]
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenCancelOffer",
|
||||
"Account": wallet.classicAddress,
|
||||
"TokenIDs": tokenIDs
|
||||
}
|
||||
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet})
|
||||
|
||||
|
||||
console.log("***Sell Offers***")
|
||||
let nftSellOffers
|
||||
try {
|
||||
nftSellOffers = await client.request({
|
||||
method: "nft_sell_offers",
|
||||
tokenid: tokenId.value
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("No sell offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftSellOffers,null,2))
|
||||
console.log("***Buy Offers***")
|
||||
let nftBuyOffers
|
||||
try {
|
||||
nftBuyOffers = await client.request({
|
||||
method: "nft_buy_offers",
|
||||
tokenid: tokenId.value })
|
||||
} catch (err) {
|
||||
console.log("No buy offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftBuyOffers,null,2))
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
|
||||
console.log("Transaction result:",
|
||||
JSON.stringify(tx.result.meta.TransactionResult, null, 2))
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
|
||||
client.disconnect()
|
||||
// End of cancelOffer()
|
||||
}
|
||||
//***************************
|
||||
//** Get Offers *************
|
||||
//***************************
|
||||
|
||||
async function getOffers() {
|
||||
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
console.log("***Sell Offers***")
|
||||
let nftSellOffers
|
||||
try {
|
||||
nftSellOffers = await client.request({
|
||||
method: "nft_sell_offers",
|
||||
tokenid: tokenId.value
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("No sell offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftSellOffers,null,2))
|
||||
console.log("***Buy Offers***")
|
||||
let nftBuyOffers
|
||||
try {
|
||||
nftBuyOffers = await client.request({
|
||||
method: "nft_buy_offers",
|
||||
tokenid: tokenId.value })
|
||||
} catch (err) {
|
||||
console.log("No buy offers.")
|
||||
}
|
||||
console.log(JSON.stringify(nftBuyOffers,null,2))
|
||||
client.disconnect()
|
||||
// End of getOffers()
|
||||
}
|
||||
//***************************
|
||||
//** Accept Sell Offer ******
|
||||
//***************************
|
||||
|
||||
async function acceptSellOffer() {
|
||||
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenAcceptOffer",
|
||||
"Account": wallet.classicAddress,
|
||||
"SellOffer": tokenOfferIndex.value,
|
||||
}
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet})
|
||||
const nfts = await client.request({
|
||||
method: "account_nfts",
|
||||
account: wallet.classicAddress
|
||||
})
|
||||
console.log(JSON.stringify(nfts,null,2))
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
console.log("Transaction result:",
|
||||
JSON.stringify(tx.result.meta.TransactionResult, null, 2))
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
client.disconnect()
|
||||
// End of acceptSellOffer()
|
||||
}
|
||||
//***************************
|
||||
//** Accept Buy Offer ******
|
||||
//***************************
|
||||
|
||||
async function acceptBuyOffer() {
|
||||
|
||||
const wallet = xrpl.Wallet.fromSeed(secret.value)
|
||||
const client = new xrpl.Client("wss://devnet.xrpl.org/:51233")
|
||||
await client.connect()
|
||||
console.log("Connected to Sandbox")
|
||||
|
||||
// Prepare transaction -------------------------------------------------------
|
||||
const transactionBlob = {
|
||||
"TransactionType": "NFTokenAcceptOffer",
|
||||
"Account": wallet.classicAddress,
|
||||
"BuyOffer": tokenOfferIndex.value
|
||||
}
|
||||
// Submit signed blob --------------------------------------------------------
|
||||
const tx = await client.submitAndWait(transactionBlob,{wallet})
|
||||
const nfts = await client.request({
|
||||
method: "account_nfts",
|
||||
account: wallet.classicAddress
|
||||
})
|
||||
console.log(JSON.stringify(nfts,null,2))
|
||||
|
||||
// Check transaction results -------------------------------------------------
|
||||
console.log("Transaction result:",
|
||||
JSON.stringify(tx.result.meta.TransactionResult, null, 2))
|
||||
console.log("Balance changes:",
|
||||
JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2))
|
||||
client.disconnect()
|
||||
// End of submitTransaction()
|
||||
}
|
||||
</script>
|
||||
|
||||
<title>NFToken Tester</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>NFToken Tester</h1>
|
||||
<form id="theForm">
|
||||
<p>
|
||||
<button type="button" onClick="mintToken()">Mint Token</button>
|
||||
<button type="button" onClick="getTokens()">Get Tokens</button>
|
||||
<button type="button" onClick="burnToken()">Burn Token</button>
|
||||
</p>
|
||||
<p>
|
||||
<button type="button" onClick="createSellOffer()">Create Sell Offer</button>
|
||||
<button type="button" onClick="createBuyOffer()">Create Buy Offer</button>
|
||||
<button type="button" onClick="getOffers()">Get Offers</button>
|
||||
</p>
|
||||
<p>
|
||||
<button type="button" onClick="acceptSellOffer()">Accept Sell Offer</button>
|
||||
<button type="button" onClick="acceptBuyOffer()">Accept Buy Offer</button>
|
||||
<button type="button" onClick="cancelOffer()">Cancel Offer</button>
|
||||
</p>
|
||||
<table>
|
||||
<tr>
|
||||
<td align="right">Account</td>
|
||||
<td><input type="text" id="account" value="" size="40" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Secret</td>
|
||||
<td><input type="text" id="secret" value="" size="40" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Token URL</td>
|
||||
<td><input type="text" id="tokenUrl"
|
||||
value = "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi" size="80"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Flags</td>
|
||||
<td><input type="text" id="flags" value="1" size="10"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Token ID</td>
|
||||
<td><input type="text" id="tokenId" value="" size="80"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Amount</td>
|
||||
<td><input type="text" id="amount" value="1000000" size="20"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Token Offer Index</td>
|
||||
<td><input type="text" id="tokenOfferIndex" value="" size="80"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Owner</td>
|
||||
<td><input type="text" id="owner" value="" size="80"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user