🎁

XRPLアカウントを安全に譲渡する

2023/05/01に公開

XRP レジャー とは

BitcoinやEthereumなどと同じ分散型のパブリックブロックチェーンです。PoWやPoSとは異なる独自のコンセンサスアルゴリズムが用いられています。
XRPレジャーのアカウントには様々な機能が備わっており、アカウントのアドレスに直接紐付くマスターキーペア(公開鍵/秘密鍵)以外に署名を行うためのキー(公開鍵/秘密鍵)を持つことができます。

レギュラーキーペア

アカウントのアドレスに直接紐付くマスターキーペア以外に署名を行うためのキーのことをレギュラーキーと呼びます。
アカウントはSetRegularKeyトランザクションを通してレギュラーキーの設定/解除を行うことが出来ます。

レギュラーキーの設定
{
    "TransactionType": "SetRegularKey",
    "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
    "RegularKey": "rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD"
}
レギュラーキーの解除
{
    "TransactionType": "SetRegularKey",
    "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
}

https://xrpl.org/ja/cryptographic-keys.html#レギュラーキーペア

レギュラーキーを設定することで、マスターキーペアを安全に保管したまま、マスターキーペアを利用することなくトランザクションへ署名できるようになります。万が一レギュラーキーを紛失/流出した場合はマスターキーした場合、マスターキーを用いてレギュラーキーを再設定することができます。

マスターキーペア

マスターキーペアはアカウントのアドレスに直接紐付くキーのことを指します。一般的にはアカウントの作成時に生成されます。このキーはアカウントのアドレスに直接紐付いているため、アカウントのマスターキーペアを変更することはできません。

一般的にはマスターキーペアを保持することはアカウントの操作権限を保持することと同義です。マスターキーペアを保持することで、アカウントから資産の送金やDEXへの注文など、アカウントに対する全ての操作を行うことができます。

ただしマスターキーペアを無効化することでマスターキーによるアカウントへの操作権限を放棄することが可能となります。これはマルチシグ利用時に単一キーによるアカウントへの操作権限を放棄するためにも使用されます。

https://xrpl.org/ja/cryptographic-keys.html#マスターキーペア

マスターキーペアの無効化

マスターキーペアはAccountSetトランザクションを通して無効化することができ、無効化後はマスターキーペアを用いたトランザクションへの署名は出来なくなります。
レギュラーキーやマルチシグなどの他の署名手段が設定されている場合のみにマスターキーペアの無効化が行えます。

マスターキーの無効化
{
  "TransactionType": "AccountSet",
  "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
  "SetFlag": 4
}

https://xrpl.org/ja/disable-master-key-pair.html

アカウントの安全な譲渡

レギュラーキー機能やマスターキーの無効化機能を利用することで、自身のアカウントへの操作権限を完全に放棄した上で、アカウントを他者に譲渡することができます。

以下の手順でアカウントの譲渡を行うことが可能です。

  1. 譲渡先アカウントをレギュラーキーとして設定
  2. アカウントのマスターキーペアを無効化

以下のコード例ではXRPレジャーのクライアントライブラリであるxrpl.jsを使用しています。

https://github.com/XRPLF/xrpl.js

https://js.xrpl.org

import { AccountSetAsfFlags, Client, Wallet } from "xrpl";

const client = new Client("wss://testnet.xrpl-labs.com");

const masterSeed = "sEdTXpKAZZBfyfnHLcjcUY7pQpZufiF";
const address = "rDdLGmr1ZSrUC6TdSJKhDcMPqKzt63h57V";

const transferAddress = "razytGwRKUNKNdBiZTVPPvXnSBDojJys1M";

const main = async () => {
  await client.connect();
  // 1. 譲渡先アカウントをレギュラーキーとして設定
  await client.submitAndWait(
    {
      TransactionType: "SetRegularKey",
      Account: address,
      RegularKey: transferAddress,
    },
    { wallet: Wallet.fromSeed(masterSeed) }
  );
  // 2. アカウントのマスターキーペアを無効化
  await client.submitAndWait(
    {
      TransactionType: "AccountSet",
      Account: address,
      SetFlag: AccountSetAsfFlags.asfDisableMaster,
    },
    { wallet: Wallet.fromSeed(masterSeed) }
  );

  // マスターキーの無効化を確認
  try {
    await client.submitAndWait(
      {
        TransactionType: "AccountSet",
        Account: address,
      },
      { wallet: Wallet.fromSeed(masterSeed) }
    );
  } catch (e) {
    console.log(
      "マスターキーによるトランザクションへの署名は無効化されているため、エラーが発生"
    );
  }
};

main();

テストネットエクスプローラからレギュラーキーの設定とマスターキーの無効化を確認することができます。
https://test.bithomp.com/explorer/rDdLGmr1ZSrUC6TdSJKhDcMPqKzt63h57V

この仕組みを使ったプロダクト

このアカウント譲渡の仕組みを使ったプロダクトとして、XRPL Labsが提供するVanity Addressがあります。
このプロダクトは任意の文字列を含むアドレスを購入可能であり、購入後は購入者のアカウントに対してレギュラーキーとして購入者のアドレスを設定し、マスターキーを無効化することで購入者のアカウントに対して完全に譲渡されます。

https://twitter.com/XummWallet/status/1483061370199457795

まとめ

XRPレジャーではレギュラーキー機能やマスターキーの無効化機能を利用することで、アカウントの安全な譲渡を行うことができます。
レギュラーキー機能やマスターキーの無効化機能はアカウントの譲渡だけではなく、アカウントのセキュリティを高めるためにも有効な機能です。これに加えマルチシグ機能を組み合わせることで様々な方法でアカウントを守ることができるようになり、セキュアにXRPレジャーを利用することができます。

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

Discussion