XRPL NFTの売買を行う
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を自身のアカウントに送りつけられるようなこともなく、安全に保管、売買を行うことができます。
XRPレジャーにおいてNFT機能はプロトコルレベルで実装されているため、Ethereumをはじめとする他チェーンに存在するコントラクトリスクが存在しません。
バリデータによるオンレジャーのガバナンス投票により、NFTの機能に不具合が存在していても修正することができ、XRPレジャー内のすべてのNFTに対して修正が適用されます。
NFTの発行
NFT発行したいアカウントでNFTokenMint
トランザクションを送信することでNFTをミントすることができます。
発行時に指定するフラグ値でSBTとして発行したりロイヤリティの指定などを行うことができます。
NFTの発行についてはこちらの記事をご覧ください。
NFTの売買
NFTの売買はこちらの記事でも説明していますが、本記事ではより詳しく説明します。
オファーの作成
NFTの売買はNFT用のDEXを利用して行います。DEXではオファーを作成することで売買を行うことができます。
オファーには2種類存在し、NFTの購入希望者が作成する購入オファーとNFTの売却希望者(保有者)が作成する売却オファーが存在します。これらのオファーはNFTokenCreateOffer
トランザクションを利用して作成することができ、トランザクション内のフラグ値により購入オファーであるか売却オファーであるかを指定します。
購入オファーの作成
NFTの購入オファーを作成するには、NFTの購入希望者が購入を希望するNFTのIDを指定してNFTokenCreateOffer
トランザクションを送信します。
トランザクションには購入希望額やそのオファーの有効期限などを指定します。
購入オファーとしてトランザクションを送信する場合はフラグにtfSellNFToken
を設定しないようにします。
{
"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
を設定します。
{
"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
トランザクションを利用します。
NFTの保有者による購入オファーの承諾、またはNFTの購入者による売却オファーの承諾のパターンが存在します。
NFTokenAcceptOffer
トランザクションには承諾するNFTオファーのIDを指定します。NFTokenAccecptOffer
トランザクションでは購入/売却のフラグの設定は不要です。NFTオファーのIDが存在しない場合や自分のオファーの承認など不適切な承認の場合はトランザクションは失敗します。
{
"TransactionType": "NFTokenAcceptOffer",
"Account": "rs8jBmmfpwgmrSPgwMsh7CvKRmRt1JTVSX",
"NFTokenId": "68CD1F6F906494EA08C9CB5CAFA64DFA90D4E834B7151899B73231DE5A0C3B77",
}
xrpl.js
Xumm SDK
トランザクションが成功した場合、NFTの送付および売買代金の送付、売買代金に応じたロイヤリティの支払いが行われます。
まとめ
XRPレジャーのNFTはEVM系のNFTで利用されており、盗難リスクを含んでしまうapprove機能を利用することなく安全にNFTの売買を行うことができます。
また売買のためのコントラクトを用意する必要もなく、javascriptやpythonなどのコードのみで売買のためのトランザクションを送信することが可能です。
安全かつ高速で低手数料なXRPレジャーのNFTをぜひ触ってみてください。
興味を持たれた方はXRP Ledger開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
Discussion