XRPLでのNFTのネイティブ実装
0020 XLS-20d Non-Fungible Token Support (native)
XRPLに追加されるもの
- NFToken オブジェクト
- NFTokenOffer
- NFTokenPage
NFToken
単体のNFTを表すオブジェクト NFTokenMintトランザクションによって作成される。 NFTokenBurnトランザクションによって削除される。
NFTokenOffer
NFTokenの売買に関する情報を持つオブジェクト
NFTokenPage
あるアカウントが保有するNFTokenを表すデータ構造
NFToken
フラグ
下記のフラグはNFT発行時のみ設定可能で、発行後は変更できない。
lsfBurnable 有効の場合、発行者(または発行者に許可された者)または所有者はNFTをバーン可能
lsfOnlyXRP 有効の場合、NFTはXRPでのみ取引が可能
lsfTrustLine 有効の場合、発行者に対して、支払いに使用されるトークンのトラストラインを自動的に設定する
lsfTransferable 有効の場合、発行者以外はNFTの譲渡、取引が不可能
lsfIssuerCanCanselOffers 有効の場合、発行者は第3者のオファーをキャンセル可能
lsfIssuerApprovalRequired 有効の場合、オファーを行うためには発行者の許可が必要
lsfReservedFlag 将来的に使用される予約フラグ
手数料
0.00%~99.99%の間で設定可能
データとメタデータ
- URI データやメタデータを格納可能なNFTokenのフィールド IPFS URI等を指定する
- Domain
発行者のアカウントのDomainフィールドへ外部参照を指定
例)
https://example.com/.well-known/xrpl-nft/{:tokenid:}
トランザクション
以下のトランザクションが追加されます
- NFTokenMint
- NFTokenBurn
NFTokenMint
NFTを発行するトランザクション NFTokenが作成され、NFTokenPageへ追加されます
Example
{
"TransactionType": "NFTokenMint",
"Account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"Issuer": "rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2",
"Fee": 314,
"Flags": 2147483659,
"Fee": 10,
"URI": "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi"
"Memos": [
{
"Memo": {
"MemoType": "687474703A2F2F6578616D706C652E636F6D2F6D656D6F2F67656E65726963",
"MemoData": "72656E74"
}
}
],
}
NFTokenBurn
NFTを削除するトランザクション
Example
{
"TransactionType": "NFTokenBurn",
"Account": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"Fee": 10,
"TokenID": "000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"
}
アカウントルートの設定
既存のAccount Rootへ以下のフィールドが追加されます
MintAccount NFTの発行を第三者へ委任可能にするフィールド
MintedTokens NFTokenMint トランザクション中に使用され、新しいオブジェクトの TokenID を形成するために使用される (NFTを発行するたびにインクリメントされると考えています)
BurnedTokens あるアカウントで発行されたNFTokenオブジェクトのうち、何個がまだ有効であるか(燃えていないか)を判断する簡便な方法を提供する ( ドキュメントではデクリメントとの記載があるがインクリメントではないかと考えています)