0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

XRP LedgerでNFTのmint、transferするまでのチュートリアルを試しました。
XRPLではネイティブでNFTが扱えるので、スマートコントラクトを作るというよりはどうやって操作するのかを調査します。

とはいえ、公式リポジトリのnft mint処理のhtmlを開いて、実行しただけです。

アカウント作成

最初に紹介したhtmlを開いて、Get New Standby Accountをクリックするだけです。

image.png

これだけでtestnet上に使えるXRP配られて使える状態になるのは便利ですね。

NFT mint

Mint NFTボタンを押すだけです。

image.png

Transaction Receipt

nfts: {
  "result": {
    "ledger_hash": "C4A8F7A36EF9220967BF4918B16794CBD727FA22F0E3446DDD9C63C006F66972",
    "ledger_index": 12931659,
    "validated": true,
    "account": "r4awAxMKLoDmzgSDHwNivujgmAQWp5cZHR",
    "account_nfts": [
      {
        "NFTokenID": "00010000E755066744A0DCD4C71F15DE74D7EEEA5EFE111427615EC100C54F26",
        "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
        "Flags": 1,
        "Issuer": "r4awAxMKLoDmzgSDHwNivujgmAQWp5cZHR",
        "NFTokenTaxon": 0,
        "nft_serial": 12930854
      },
      {
        "NFTokenID": "00010000E755066744A0DCD4C71F15DE74D7EEEA5EFE11143E472FC200C54F27",
        "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
        "Flags": 1,
        "Issuer": "r4awAxMKLoDmzgSDHwNivujgmAQWp5cZHR",
        "NFTokenTaxon": 0,
        "nft_serial": 12930855
      },
      {
        "NFTokenID": "00010000E755066744A0DCD4C71F15DE74D7EEEA5EFE1114552D00C300C54F28",
        "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
        "Flags": 1,
        "Issuer": "r4awAxMKLoDmzgSDHwNivujgmAQWp5cZHR",
        "NFTokenTaxon": 0,
        "nft_serial": 12930856
      }
    ],
    "limit": 100
  },
  "id": 15,
  "api_version": 2,
  "type": "response",
  "warnings": [
    {
      "id": 2001,
      "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"
    }
  ]
}

Explorerで見るとこんな感じ。
image.png

コード

処理としては以下のようになっています。

  // Note that you must convert the token URL to a hexadecimal 
  // value for this transaction.
  // ------------------------------------------------------------------------
  const transactionJson = {
    "TransactionType": "NFTokenMint",
    "Account": standby_wallet.classicAddress,
    "URI": xrpl.convertStringToHex(standbyTokenUrlField.value),
    "Flags": parseInt(standbyFlagsField.value),
    "TransferFee": parseInt(standbyTransferFeeField.value),
    "NFTokenTaxon": 0 //Required, but if you have no use for it, set to zero.
  }

  // ----------------------------------------------------- Submit signed blob 
  const tx = await client.submitAndWait(transactionJson, { wallet: standby_wallet} )
  const nfts = await client.request({
    "method": "account_nfts",
    "account": standby_wallet.classicAddress
  })

Flagsは NFTTokenMint 時のみ設定可能で、後から変更不可です。

image.png
公式Docより引用

フラグ値計算例

例:lsfBurnable (0x0001), lsfOnlyXRP (0x0002), lsfTransferable (0x0008)
→ 合計値: 1 + 2 + 8 = 11
→ ビッグエンディアン表記: 0x000B

NFTのID

IDの採番は以下のようになっています。
image.png
公式Docより

Dの部分がNFTの種類(EVMでいうコントラクトアドレス)にあたる部分ですかね。

NFT Transfer

これも公式リポジトリのhtmlファイルをローカルで開いて実行しただけです。

image.png

EVMと違ってtransferした後に、受け取る側がAcceptしないといけないようです。正確にはCreate Sell Offerしてから受け取る側でNFT Offer Indexを指定してAccept Sell Offerをする必要があります。

なので、あるNFTを任意のアドレスに持たせるにはMint, Create Sell Offer, Accept Cell Offerの3つのtxが必要そうです。

image.png

疑問点

以下正しいかどうか裏取ってないのですが、ChatGPTの回答

シーケンス番号が1からじゃないのはなぜ?

Testnetではアカウントリセットとかあるので、以前に使われていた可能性がある

本番で確かめれば良さそう。

同いTaxon使ってるのにTaxon部分が発行する度に変わるのはなぜ?

NFT発行時にTaxonはscrambledされるため。ただし、XRPL APIでは取得できる

Explorer上では分類ごとに見るみたいなことできないからちょっと不便かも

シーケンスが32bitなら40億個くらいまでしかIssuerごとに発行できない?

その通り

通常ユースケースなら、問題ないけどちょっと少なく感じる。
Taxonが違っても関係なく、Issuerごとに上限が32bit

BulkMintとかない?

ありません。

txの並行処理するしかなさそうです。とはいえ、現在Batch TransactionというのがMainnetへの導入検討中(多分入りそう?)だそうなので、これを使うとある程度はまとめて処理することができそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?