XRPLの新機能の有効化

2023/11/06に公開

XRP Ledgerとは

XRP Ledgerは、分散型のパブリックブロックチェーンです。XRP Ledgerは、DEX機能やNFT機能をはじめとした様々なネイティブ機能を備えており、日々進化を続けています。

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

これらの機能が分散型の仕組みの中でどうやって有効化されているかを解説します。

機能の有効化

イーサリアムなど他のブロックチェーンでは、プロトコルなどの新規機能などをリリースする際はハードコードされたブロック高などによりその機能が有効化されるようになっています。

https://github.com/ethereum/go-ethereum/blob/f4ac548619e12e5be31543a72e995ab2b3904214/params/config.go#L41-L57

XRPLでは、Amendmentと呼ばれる仕組みにより、新規機能の有効化を行います。これは特定のブロックで機能が有効化されるのではなく、バリデータによる投票により機能が有効化される仕組みです。

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

この仕組みにより、ネットワークが「開発者のコードを受け入れる」か「フォークするか」の二者択一になることを防ぐことができ、開発者以外を含む多様な属性のバリデータによりその機能の有効化について判断がなされます。

Amendment

https://github.com/XRPLF/rippled/releases/0.31.0

Amendment機能は2016年にリリースされ、これまでに50以上の機能が有効化されています。

XRPScanやBithompなどの多くのエクスプローラサービスではAmendmentに関する情報を確認できます。

https://xrpscan.com/amendments

https://bithomp.com/ja/amendments

Amendment投票

Amendmentではバリデータによる投票の仕組みが存在します。

トランザクションがネットワークに受け入れられるのと同じように80%超のバリデータが賛成票を投じることでAmendmentの有効化の準備が整います。

Amendmentの有効化の準備が整った後、有効な状態が2週間が経過したらAmendmentが有効化されます。

Amendmentの有効化チェック

Amendmentの有効化チェックを行なっているコードとして次にようなものがあります。

https://github.com/XRPLF/rippled/blob/09e0f103f4472d57ca234d13e0db203386c1b921/src/ripple/app/tx/impl/Clawback.cpp#L33

これはClawback機能(featureClawback Amendment)が有効化されているかを確認し、有効化されていない場合はエラーを返すコードです。
つまり、featureClawbackが有効化されている場合のみClawbackに関する機能が利用できるということです。

Amendmentのデータ

現在のAmendmentの有効化状況は次のようなコードで確認できます。

https://www.npmjs.com/package/xrpl

import { Client } from "xrpl";

const client = new Client("wss://xrpl.ws")

const main = async () => {
  await client.connect()
  
  const response = await client.request({
    command: "ledger_entry",
    index: "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4"
  })
  console.log(response.result.node)
  await client.disconnect()
}

main()

AmendmentIDである7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4はAmendmentsスペースキー(0x0066)のハッシュ値であり、固定値となります。


Amendment IDのフォーマット

実行結果は次のようになります。(サンプルデータです。)

{
    "Majorities": [
        {
            "Majority": {
                "Amendment": "1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146",
                "CloseTime": 535589001
            }
        }
    ],
    "Amendments": [
        "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE",
        "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
        "6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC",
        "740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11"
    ],
    "Flags": 0,
    "LedgerEntryType": "Amendments",
    "index": "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4"
}

Majoritiesフィールドでは、バリデータの大多数から賛成票を獲得し、2週間の経過を待っているAmendmentの情報が確認できます。
Amendmentsフィールドでは、現在有効化されているAmendmentの一覧が確認できます。

まとめ

XRP LedgerではAmendmentと呼ばれる仕組みにより、新規機能の有効化を行います。

ネットワーク内のバリデータによる"合意"により機能の有効化が行われるため、分散型のネットワークとしてあるべき形で機能の有効化が行われます。

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

私のX/Twitterアカウントはこちら!

Discussion