Casperクライアントでのトークンアンデリゲート(委任解除)

このドキュメントでは、Casperネットワーク上のバリデーターにデリゲート(委任)したトークンをアンデリゲート(委任解除)するワークフローについて詳しくお伝えします。

事前準備:

  1. 必要なセットアップ を満たしており、有効な node-address とCasper command-lineクライアントを準備できていること
  2. Casperネットワーク上にいるバリデータにデリゲートしたトークンを保持しており、バリデータの公開鍵を持っていること

アンデリゲーションリクエストの送信

バリデータからCSPRをアンデリゲートする方法は2つあります。システムオークションコントラクトから undelegate エントリーポイントを呼び出す方法は、推奨かつ安いです。2つ目の方法は、casper-node リポジトリから undelegate.wasm のビルドとそれをネットワークへインストールします。

Casper Mainnetなどの本番環境にて動かす前に、公式のTestnet上にて以下のステップに基づきテストすることをお勧めします。

Method 1: システムオークションコントラクトを用いたアンデリゲート

この方法は、システムオークションコントラクトから既存のエントリーポイント undelegate を呼び出します。この方法を使用すると、コントラクトをビルドする必要がない為、コストと複雑性を軽減できます。

casper-client put-deploy \
--node-address <HOST:PORT> \
--secret-key <PATH> \
--chain-name <CHAIN_NAME> \
--payment-amount <PAYMENT_AMOUNT_IN_MOTES> \
--session-hash <SESSION_HASH> \
--session-entry-point undelegate \
--session-arg "validator:public_key='<HEX_ENCODED_VALIDATOR_PULIC_KEY>'" \
--session-arg "amount:u512='<AMOUNT_TO_UNDELEGATE>'" \
--session-arg "delegator:public_key='<HEX_ENCODED_DELEGATOR_PULIC_KEY>'"
  1. node-address -ネットワーク上にいるピアのIPアドレス。MainnetとTestnet上にいるノードのデフォルトの JSON-RPC ポートは、7777です。
  2. secret-key – Deployの支払いを行うアカウントの秘密鍵を持つファイル名
  3. chain-name – Deployの送信先であるネットワークのチェーン名。Mainnetの場合はcasperを使用し、Testnetの場合はcasper-testを使用します。
  4. payment-amount – Deployの支払い額(単位は、モーツ = motes)。このエントリーポイントの呼び出しには、今のノードバージョン 1.5.1 では 2.5 CSPRが必要となっています。
  5. session-hash – 保存されたオークションコントラクトの16進数にエンコードされたハッシュ。使用しているネットワークによるが、CasperのMainnetとTestnetの場合、ハッシュは以下の通りとなっています。

    ・Testnet: hash-93d923e336b20a4c4ca14d592b60e5bd3fe330775618290104f9beb326db7ae2
    ・Mainnet: hash-ccb576d6ce6dec84a551e48f0d0b7af89ddba44c7390b690036257a04a3ae9ea
  6. session-entry-point – コントラクトを呼び出す際に使用するエントリーポイント名

    undelegate エントリーポイントに用いる3つの引数:
  7. validator: バリデータがデリゲートされたトークンを受け取る16進数公開鍵
  8. amount: デリゲートする合計トークン数
  9. delegator: バリデータにトークンをデリゲートするアカウントの16進数公開鍵。この鍵は、デリゲーションに署名をする秘密鍵と対になっていなくてはなりません。

コマンドは、デプロイ処理の結果を確認するために必要となるデプロイを返します。詳細については、デプロイステータスの項目をご確認ください。

💡NOTE
オークションコントラクト上のエントリーポイント undelegate を呼び出すコストは、固定値 2.5 CSPRとなります。アンデリゲートの呼び出しに対する最小コストの設定はありません。

Example:

このサンプルは、100 CSPRをデリゲートしたアカウントです。

casper-client put-deploy \
--node-address http://65.21.75.254:7777  \
--chain-name casper-test \
--secret-key ~/KEYS/secret_key.pem \
--payment-amount 2500000000 \
--session-hash hash-93d923e336b20a4c4ca14d592b60e5bd3fe330775618290104f9beb326db7ae2 \
--session-entry-point undelegate \
--session-arg "validator:public_key='01aa17f7b9889480b1bd34c3f94f263b229c7a9b01dd4dda19c2dd1d38d176c7a0'" \
--session-arg "amount:u512='100000000000'" \
--session-arg "delegator:public_key='01e3d3392c2e0b943abe709b25de5c353e5e1e9d95c7a76e3dd343d8aa1aa08d51'"

次は、アンデリゲートの確認です。

Method 2: コンパイルしたWasmを用いたアンデリゲート

現時点の処理では、アンデリゲートWasmを生成するcasper-node コントラクトのビルドが必要です。

次に、undelegate.wasm を含むデプロイをネットワークへ送信し、アンデリゲート処理を開始するCasper CLI を使用します。

casper-client put-deploy \
--node-address <HOST:PORT> \
--secret-key <PATH> \
--chain-name <CHAIN_NAME> \
--payment-amount <PAYMENT_AMOUNT_IN_MOTES> \
--session-path <PATH_TO_WASM>/undelegate.wasm \
--session-arg "validator:public_key='<HEX_ENCODED_VALIDATOR_PULIC_KEY>'" \
--session-arg "amount:u512='<AMOUNT_TO_UNDELEGATE>'" \
--session-arg "delegator:public_key='<HEX_ENCODED_DELEGATOR_PULIC_KEY>'"
  1. node-address -ネットワーク上にいるピアのIPアドレス。MainnetとTestnet上にいるノードのデフォルトの JSON-RPC ポートは、7777です。
  2. secret-key – Deployの支払いを行うアカウントの秘密鍵を持つファイル名
  3. chain-name – Deployの送信先であるネットワークのチェーン名。Mainnetの場合はcasperを使用し、Testnetの場合はcasper-testを使用します。
  4. payment-amount – Deployの支払い額(単位は、モーツ = motes)。このエントリーポイントの呼び出しには、今のノードバージョン 1.5.1 では 2.5 CSPRが必要となっています。
  5. session-path – 保存されたオークションコントラクトの16進数にエンコードされたハッシュ。使用しているネットワークによるが、CasperのMainnetとTestnetの場合、ハッシュは以下の通りとなっています。

    undelegateのエントリーポイントに用いる3つの引数:
  6. validator: バリデータがデリゲートされたトークンを受け取る16進数公開鍵
  7. amount: デリゲートする合計トークン数
  8. delegator: バリデータにトークンをデリゲートするアカウントの16進数公開鍵。この鍵は、デリゲーションに署名をする秘密鍵と対になっていなくてはなりません。

コマンドは、デプロイ処理の結果を確認するために必要となるデプロイを返します。詳細については、デプロイステータスの項目をご確認ください。

Example:

このサンプルコマンドでは、Casper Testnet にて100 CSPRをアンデリゲートし、手数料として6 CSPRを支払います。手数料は、各デプロイとネットワークの chainspec によって変わります。ただ、この手法は前述したアンデリゲートエントリーポイントを呼び出す方法より支払う額が高くなることは把握しておいてください。

casper-client put-deploy \
--node-address http://65.21.75.254:7777  \
--chain-name casper-test \
--secret-key ~/KEYS/secret_key.pem \
--payment-amount 6000000000 \
--session-path ~/undelegate.wasm \
--session-arg "validator:public_key='01aa17f7b9889480b1bd34c3f94f263b229c7a9b01dd4dda19c2dd1d38d176c7a0'" \
--session-arg "amount:u512='100000000000'" \
--session-arg "delegator:public_key='01e3d3392c2e0b943abe709b25de5c353e5e1e9d95c7a76e3dd343d8aa1aa08d51'"

次は、アンデリゲートの確認です。

アンデリゲートの確認

Casperコマンドラインクライアントを使用し、RPCリクエストを作成することでアクションの状態をクエリすることができます。RPCレスポンスの結果を持って、アンデリゲートのリクエストが無事に実行されたかどうかを確認できます。

オークションのステータスを確認することで、ご自分のビットが引き出されたか否かを確認できます。

casper-client get-auction-info \
--node-address http://<peer-ip-address>:7777

リクエストフィールド

  • node-address – ネットワーク上にいるノードのIPアドレス

公開鍵と合計値がビット構造内に見当たらないのであれば、バリデーターからのアンデリゲートが無事に完了していると言えます。

アカウントを公式テストネットかメインネットに登録済みであれば、そのブロックエクスプローラーにてアカウントの残高を確認し、引き出されたトークンが残高に追加されているかを確認いただけます。

  1. Testnet explorer
  2. Mainnet explorer

重要事項:トークンをバリデータからアンデリゲート後、アンボンディング期間が終わるまで待っていただき、それから同じバリデーターでも他のバリデーターにでも再度トークンをデリゲートいただけます。