🔍

XRPL NFTの売買を行う

2023/05/15に公開

XRPレジャー

XRPレジャー(XRPL)はオープンソースかつパーミッションレスなブロックチェーンです。2012年にBitcoinの初期コントリビューターを含む3人の開発者によって作成され、10年以上稼働し続けています。

3~4秒ほどのファイナリティ速度や高いスループット、低い手数料などの特徴を持ち、NFTやDEXなどの機能をネイティブ(特定のコントラクトのデプロイが不要)に持っています。

XRPレジャーのNFT

2022年10月にXRPレジャーメインネットにてバリデータによるオンレジャーのガバナンス投票の結果、NFT機能が利用可能になりました。
NFTの発行や売買に必要となる手数料が低く(0.00001XRP=0.001円程度)、売買に伴うロイヤリティに強制力があることが大きな特徴です。
また、XRPレジャーの仕組み上approveによる盗難リスクや不要なNFTを自身のアカウントに送りつけられるようなこともなく、安全に保管、売買を行うことができます

https://xrpl.org/ja/non-fungible-tokens.html#xrp-ledger上のnft

XRPレジャーにおいてNFT機能はプロトコルレベルで実装されているため、Ethereumをはじめとする他チェーンに存在するコントラクトリスクが存在しません。
バリデータによるオンレジャーのガバナンス投票により、NFTの機能に不具合が存在していても修正することができ、XRPレジャー内のすべてのNFTに対して修正が適用されます。

NFTの発行

NFT発行したいアカウントでNFTokenMintトランザクションを送信することでNFTをミントすることができます。
発行時に指定するフラグ値でSBTとして発行したりロイヤリティの指定などを行うことができます。

NFTの発行についてはこちらの記事をご覧ください。

https://zenn.dev/tequ/articles/try-xrpl-nft#1.-nftをミントする。

NFTの売買

NFTの売買はこちらの記事でも説明していますが、本記事ではより詳しく説明します。

https://zenn.dev/tequ/articles/try-xrpl-nft#3.-売却オファーを作成する。

オファーの作成

NFTの売買はNFT用のDEXを利用して行います。DEXではオファーを作成することで売買を行うことができます。
オファーには2種類存在し、NFTの購入希望者が作成する購入オファーとNFTの売却希望者(保有者)が作成する売却オファーが存在します。これらのオファーはNFTokenCreateOfferトランザクションを利用して作成することができ、トランザクション内のフラグ値により購入オファーであるか売却オファーであるかを指定します。

https://xrpl.org/ja/nftokencreateoffer.html

購入オファーの作成

NFTの購入オファーを作成するには、NFTの購入希望者が購入を希望するNFTのIDを指定してNFTokenCreateOfferトランザクションを送信します。
トランザクションには購入希望額やそのオファーの有効期限などを指定します。

購入オファーとしてトランザクションを送信する場合はフラグにtfSellNFTokenを設定しないようにします。

nft-create-buy-offer
{
  "TransactionType": "NFTokenCreateOffer",
  "Account": "rs8jBmmfpwgmrSPgwMsh7CvKRmRt1JTVSX",
  "NFTokenID": "000100001E962F495F07A990F4ED55ACCFEEF365DBAA76B6A048C0A200000007",
  "Amount": "1000000", // 1XRP(=1,000,000drops)で購入希望
  "Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", // 設定した場合、このアカウントのみがオファーを承認可能
  // "Flags": 1 // tfSellNFTokenフラグを設定しない
}

以下はXRPレジャーのjavascriptクライアントライブラリであるxrpl.jsとノンカストディアルモバイルウォレットであるXummのSDKを利用したサンプルコードです。

xrpl.js
Xumm SDK

売却オファーの作成

NFTの売却オファーを作成するには、NFTの保有者が売却を希望するNFTのIDを指定してNFTokenCreateOfferトランザクションを送信します。
トランザクションには売却希望額や売却先そのオファーの有効期限などを指定することができます。

売却オファーとしてトランザクションを送信する場合はフラグにtfSellNFTokenを設定します。

nft-create-sell-offer.js
{
  "TransactionType": "NFTokenCreateOffer",
  "Account": "rs8jBmmfpwgmrSPgwMsh7CvKRmRt1JTVSX",
  "NFTokenID": "000100001E962F495F07A990F4ED55ACCFEEF365DBAA76B6A048C0A200000007",
  "Amount": "1000000", // 1XRP(=1,000,000drops)で売却希望
  "Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", // 設定した場合、このアカウントのみがオファーを承認可能
  "Flags": 1 // tfSellNFTokenフラグを設定
}
xrpl.js
Xumm SDK

オファーの承諾

XRPLのNFTではNFTokenCreateOfferトランザクションで作成されたオファーは自動的にマッチングされません。
NFT取引を実行するにはNFTokenAcceptOfferトランザクションを利用します。

https://xrpl.org/ja/nftokenacceptoffer.html

NFTの保有者による購入オファーの承諾、またはNFTの購入者による売却オファーの承諾のパターンが存在します。

NFTokenAcceptOfferトランザクションには承諾するNFTオファーのIDを指定します。NFTokenAccecptOfferトランザクションでは購入/売却のフラグの設定は不要です。NFTオファーのIDが存在しない場合や自分のオファーの承認など不適切な承認の場合はトランザクションは失敗します。

nft-accept-offer.js
{
  "TransactionType": "NFTokenAcceptOffer",
  "Account": "rs8jBmmfpwgmrSPgwMsh7CvKRmRt1JTVSX",
  "NFTokenId": "68CD1F6F906494EA08C9CB5CAFA64DFA90D4E834B7151899B73231DE5A0C3B77",
}
xrpl.js
Xumm SDK

トランザクションが成功した場合、NFTの送付および売買代金の送付、売買代金に応じたロイヤリティの支払いが行われます。

まとめ

XRPレジャーのNFTはEVM系のNFTで利用されており、盗難リスクを含んでしまうapprove機能を利用することなく安全にNFTの売買を行うことができます。
また売買のためのコントラクトを用意する必要もなく、javascriptやpythonなどのコードのみで売買のためのトランザクションを送信することが可能です。

安全かつ高速低手数料なXRPレジャーのNFTをぜひ触ってみてください。

興味を持たれた方はXRP Ledger開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
https://xrpldevs.org

Discussion