Merge pull request #1585 from XRPLF/nft_update_11_14

Update tutorial for testnet
This commit is contained in:
Dennis Dawson
2022-11-15 15:09:31 -08:00
committed by GitHub
46 changed files with 21 additions and 1582 deletions

View File

@@ -1,3 +0,0 @@
# NFToken Test Harness
Build an interface that can mint and trade non-fungible tokens (NFTs) on the NFT-Devnet.

View File

@@ -1,420 +0,0 @@
<html>
<head>
<script src='https://unpkg.com/xrpl@2.2.1/build/xrpl-latest-min.js'></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://xls20-sandbox.rippletest.net: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),
NFTokenTaxon: 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://xls20-sandbox.rippletest.net: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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
// Prepare transaction -------------------------------------------------------
const transactionBlob = {
"TransactionType": "NFTokenBurn",
"Account": wallet.classicAddress,
"NFTokenID": 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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
// Prepare transaction -------------------------------------------------------
const transactionBlob = {
"TransactionType": "NFTokenCreateOffer",
"Account": wallet.classicAddress,
"NFTokenID": tokenId.value,
"Amount": amount.value,
"Flags": 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",
nft_id: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",
nft_id: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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
// Prepare transaction -------------------------------------------------------
const transactionBlob = {
"TransactionType": "NFTokenCreateOffer",
"Account": wallet.classicAddress,
"Owner": owner.value,
"NFTokenID": tokenId.value,
"Amount": amount.value,
"Flags": parseInt(flags.value)
}
// 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",
nft_id: 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",
nft_id: 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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
const tokenOfferID = tokenOfferIndex.value
const tokenOffers = [tokenOfferID]
// Prepare transaction -------------------------------------------------------
const transactionBlob = {
"TransactionType": "NFTokenCancelOffer",
"Account": wallet.classicAddress,
"NFTokenOffers": tokenOffers
}
// 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",
nft_id: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",
nft_id: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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
console.log("***Sell Offers***")
let nftSellOffers
try {
nftSellOffers = await client.request({
method: "nft_sell_offers",
nft_id: 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",
nft_id: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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
// Prepare transaction -------------------------------------------------------
const transactionBlob = {
"TransactionType": "NFTokenAcceptOffer",
"Account": wallet.classicAddress,
"NFTokenSellOffer": 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://xls20-sandbox.rippletest.net:51233")
await client.connect()
console.log("Connected to Sandbox")
// Prepare transaction -------------------------------------------------------
const transactionBlob = {
"TransactionType": "NFTokenAcceptOffer",
"Account": wallet.classicAddress,
"NFTokenBuyOffer": 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>&nbsp;&nbsp;
<button type="button" onClick="getTokens()">Get Tokens</button>&nbsp;&nbsp;
<button type="button" onClick="burnToken()">Burn Token</button>&nbsp;&nbsp;
</p>
<p>
<button type="button" onClick="createSellOffer()">Create Sell Offer</button>&nbsp;&nbsp;
<button type="button" onClick="createBuyOffer()">Create Buy Offer</button>&nbsp;&nbsp;
<button type="button" onClick="getOffers()">Get Offers</button>
</p>
<p>
<button type="button" onClick="acceptSellOffer()">Accept Sell Offer</button>&nbsp;&nbsp;
<button type="button" onClick="acceptBuyOffer()">Accept Buy Offer</button>&nbsp;&nbsp;
<button type="button" onClick="cancelOffer()">Cancel Offer</button>&nbsp;&nbsp;
</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>

View File

@@ -27,11 +27,11 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port
## Get Accounts
1. Open `6.authorized-minter.html` in a browser.
2. Get test accounts.
1. If you have existing NFT-Devnet account seeds:
2. Choose your ledger instance (_Testnet_ or _Devnet_).
1. If you have existing test account seeds:
1. Paste the account seeds in the **Seeds** field.
2. Click **Get Accounts from Seeds**.
2. If you do not have existing NFT-Devnet accounts:
2. If you do not have existing test accounts:
1. Click **Get New Standby Account**.
2. Click **Get New Operational Account**.
@@ -398,9 +398,6 @@ Update the form with fields and buttons to support the new functions.
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">

View File

@@ -23,10 +23,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port
1. Open `7.batch-minting.html` in a browser.
2. Get a test account.
1. If you want to use an existing NFT-Devnet account seed:
1. If you want to use an existing account seed:
1. Paste the account seed in the **Seed** field.
2. Click **Get Account from Seed**.
2. If you do not want to use an existing NFT-Devnet account seed, click **Get New Standby Account**.
2. If you do not want to use an existing account seed, click **Get New Standby Account**.
**Note:** Running this command throws an error in the JavaScript console because the `getAccountsFromSeeds` function in `ripplex1-send-xrp.js` looks for the operational seed field, which is not included in this form. You can ignore the error (or fix it in your own implementation).
@@ -360,9 +360,6 @@ For this form:
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">

View File

@@ -28,12 +28,12 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port
## Get Accounts
1. Open `5.broker-nfts.html` in a browser.
2. Choose **XLS20-NFT** as your ledger instance.
2. Choose your ledger instance.
3. Get test accounts.
1. If you have existing NFT-Devnet account seeds:
1. If you have existing account seeds:
1. Paste 3 account seeds in the **Seeds** field.
2. Click **Get Accounts from Seeds**.
2. If you do not have NFT-Devnet account seeds:
2. If you do not have account seeds:
1. Click **Get New Standby Account**.
2. Click **Get New Operational Account**.
3. Click **Get New Broker Account**
@@ -625,9 +625,6 @@ Revise the HTML form to add a new Broker section at the top.
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">

View File

@@ -10,24 +10,18 @@ labels:
---
# 1. Create Accounts and Send XRP
This example shows how to:
1. Create accounts on the Testnet, funded with 10000 test XRP with no actual value.
2. Retrieve the accounts from seed values.
3. Transfer XRP between accounts.
When you create an account, you receive a public/private key pair offline. It does not appear on the ledger until it is funded with XRP. This example shows how to create accounts for Testnet, but not how to create an account that you can use on Mainnet.
![Token Test Harness](img/quickstart2.png)
## Prerequisites
To get started, create a new folder on your local disk and install the JavaScript library using `npm`.
@@ -47,7 +41,7 @@ To get test accounts:
1. Open `1.get-accounts-send-xrp.html` in a browser
2. Choose **NFT-Devnet**, **Testnet**, or **Devnet**.
2. Choose **Testnet** or **Devnet**.
3. Click **Get New Standby Account**.
4. Click **Get New Operational Account.**
5. Copy and paste the **Seeds** field in a persistent location, such as a Notepad, so that you can reuse the accounts after reloading the form.
@@ -80,7 +74,7 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port
## ripplex-1-send-xrp.js
This example can be used with any XRP Ledger network. Currently, there are _Testnet_ and _Devnet,_ with the experimental _NFT-Devnet_ server with support for NFTokens. You can update the code to choose different or additional XRP Ledger networks.
This example can be used with any XRP Ledger network, _Testnet_, or _Devnet_. You can update the code to choose different or additional XRP Ledger networks.
### getNet()
@@ -100,7 +94,6 @@ This function uses brute force `if` statements to discover the selected network
```
let net
if (document.getElementById("xls").checked) net = "wss://xls20-sandbox.rippletest.net:51233"
if (document.getElementById("tn").checked) net = "wss://s.altnet.rippletest.net:51233"
if (document.getElementById("dn").checked) net = "wss://s.devnet.rippletest.net:51233"
return net
@@ -380,7 +373,6 @@ Connect to your selected ledger.
```
Prepare the transaction. This is a Payment transaction from the standby wallet to the operational wallet.
The _Payment_ transaction expects the XRP to be expressed in drops, or 1/millionth of an XRP. You can use the xrpToDrops utility to convert the send amount for you (which beats having to type an extra 6 zeroes to send 1 XRP).
@@ -542,9 +534,6 @@ Create a standard HTML form to send transactions and requests, then display the
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">

View File

@@ -648,9 +648,6 @@ Update the form to support the new functions.
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">

View File

@@ -12,10 +12,12 @@ labels:
This example shows how to:
1. Mint new Non-Fungible Tokens (NFTokens).
1. Mint new Non-fungible Tokens (NFTokens).
2. Get a list of existing NFTokens.
3. Delete (Burn) a NFToken.
![Test harness with mint NFToken fields](img/quickstart8.png)
@@ -30,10 +32,10 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port
1. Open `3.mint-nfts.html` in a browser.
2. Get test accounts.
1. If you have existing NFT-Devnet account seeds:
1. If you have existing Testnet account seeds:
1. Paste the account seeds in the **Seeds** field.
2. Click **Get Accounts from Seeds**.
2. If you do not have existing NFT-Devnet accounts:
2. If you do not have existing Testnet accounts:
1. Click **Get New Standby Account**.
2. Click **Get New Operational Account**.
@@ -480,11 +482,7 @@ Bold text in the following indicates changes to the form that support the new fu
<body>
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
Choose your ledger instance:
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">
<label for="testnet">Testnet</label>

View File

@@ -10,9 +10,10 @@ labels:
# 4. Transfer NFTokens
This example shows how to:
1. Create NFToken Sell Offers.
2. Create NFToken Buy Offers.
3. Accept NFToken Sell Offers.
@@ -35,12 +36,12 @@ You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-port
1. Open `4.transfer-nftokens.html` in a browser.
2. Choose **XLS20-NFT** as your ledger instance.
2. Choose your ledger instance (**Testnet** or **Devnet**).
3. Get test accounts.
1. If you have existing NFT-Devnet account seeds
1. If you have existing test account seeds
1. Paste account seeds in the **Seeds** field.
2. Click **Get Accounts from Seeds**.
2. If you do not have NFT-Devnet account seeds:
2. If you do not have test account seeds:
1. Click **Get New Standby Account**.
2. Click **Get New Operational Account**.
@@ -1189,9 +1190,6 @@ Update the form with fields and buttons to support the new functions.
<h1>Token Test Harness</h1>
<form id="theForm">
Choose your ledger instance:
<input type="radio" id="xls" name="server"
value="wss://xls20-sandbox.rippletest.net:51233" checked>
<label for="xls20">XLS20-NFT</label>
&nbsp;&nbsp;
<input type="radio" id="tn" name="server"
value="wss://s.altnet.rippletest.net:51233">

File diff suppressed because it is too large Load Diff

View File

@@ -1595,12 +1595,6 @@ pages:
- en
- ja
# TODO: translate
- md: tutorials/use-tokens/nftoken-tester-tutorial.md
targets:
- en
- ja
# TODO: translate this page & blurb
- md: tutorials/use-tokens/enable-no-freeze.md
targets:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -101,7 +101,6 @@
<ul class="nav flex-column">
<li class="nav-item"><a href="nft-conceptual-overview.html" class="nav-link">NFT Conceptual Overview</a></li>
<li class="nav-item"><a href="nftoken.html" class="nav-link">NFToken Format</a></li>
<li class="nav-item"><a href="nftoken-tester-tutorial.html" class="nav-link">NFToken Tester Tutorial</a></li>
</ul>
</div>
</div>