XRP Ledger Apex is back in Amsterdam

Register Now
Last updated
Edit

レギュラーキーペアの割り当て

XRP Ledgerでは、アカウントはその後のトランザクションには レギュラーキーペア と呼ばれるセカンダリキーペアで署名することができます。レギュラーキーペアの秘密鍵が漏えいした場合は、秘密鍵を削除または交換できます。その際に、アカウントの秘密鍵以外の設定を変更したり、他のアカウントとの関係を再設定する必要はありません。レギュラーキーペアを積極的にローテーションすることも可能です。(アカウントのアドレスに固有に関連付けられているアカウントのマスターキーペアでは、このような操作は実行できません。)

マスターキーペアとレギュラーキーペアの詳細は、暗号鍵をご覧ください。

このチュートリアルでは、レギュラーキーペアをアカウントに割り当てるために必要な手順を説明します。

  1. キーペアの生成
  2. 生成したキーペアをレギュラーキーペアとしてアカウントに割り当てる
  3. レギュラーキーペアの検証
  4. 次のステップ

1. キーペアの生成

wallet_proposeメソッドを使用して、アカウントにレギュラーキーペアとして割り当てるキーペアを生成します。

リクエストのフォーマット

リクエストのフォーマットの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "command":"wallet_propose"
}

レスポンスのフォーマット

処理が成功したレスポンスの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "result":{
   "account_id":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
   "key_type":"secp256k1",
   "master_key":"KNEW BENT LYNN LED GAD BEN KENT SHAM HOBO RINK WALT ALLY",
   "master_seed":"sh8i92YRnEjJy3fpFkL8txQSCVo79",
   "master_seed_hex":"966C0F68643EFBA50D58D191D4CA8AA7",
   "public_key":"aBRNH5wUurfhZcoyR6nRwDSa95gMBkovBJ8V4cp1C1pM28H7EPL1",
   "public_key_hex":"03AEEFE1E8ED4BBC009DE996AC03A8C6B5713B1554794056C66E5B8D1753C7DD0E"
 },
 "status":"success",
 "type":"response"
}

次のステップでは、このレスポンスのaccount_idを使用してキーペアをレギュラーキーペアとしてアカウントに割り当てます。また、master_seed値を安全な場所に保管してください。(この値以外は特に覚えておく必要はありません。)

2. 生成したキーペアをレギュラーキーペアとしてアカウントに割り当てる

SetRegularKeyトランザクションを使用して、ステップ1で生成したキーペアをレギュラーキーペアとしてアカウントに割り当てます。

SetRegularKeyトランザクションでレギュラーキーペアを初めてアカウントに割り当てる際には、アカウントのマスター秘密鍵(シークレット)による署名が必要です。マスター秘密鍵の送信は危険であるため、トランザクションの署名とネットワークへのトランザクション送信を切り離した2段階方式でこのトランザクションを実行します。

それ以降のSetRegularKeyトランザクションの送信時には、既存のレギュラー秘密鍵で署名し、レギュラー秘密鍵自体を置換または削除できます。ネットワーク上でレギュラー秘密鍵を送信してはならないことに注意してください。

トランザクションの署名

トランザクションに署名する最も安全な方法は、クライアントライブラリを使用してローカルで署名することです。signメソッドを使用してトランザクションに署名することもできますが、その場合は信頼できる暗号化された接続を使用するか、ローカル接続を使用して、自分が管理しているサーバに対してのみに行うようにしてください。

いずれの場合も、後のために、署名したトランザクションの識別用ハッシュを書き留めておいてください。

リクエストフィールドに以下の値を指定します。

リクエストフィールド
Accountアカウントのアドレス。
RegularKeyステップ1で生成されたaccount_id
secretアカウントのmaster_keymaster_seed、またはmaster_seed_hex(マスター秘密鍵)。

リクエストのフォーマット

リクエストのフォーマットの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "command":"sign",
 "tx_json":{
     "TransactionType":"SetRegularKey",
     "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
     "RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7"
     },
  "secret":"ssCATR7CBvn4GLd1UuU2bqqQffHki"
}

レスポンスのフォーマット

処理が成功したレスポンスの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "result":{
   "tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
   "tx_json":{
     "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
     "Fee":"10",
     "Flags":2147483648,
     "RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
     "Sequence":4,
     "SigningPubKey":"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
     "TransactionType":"SetRegularKey",
     "TxnSignature":"304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C26",
     "hash":"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
   }
 },
 "status":"success",
 "type":"response"
}

signコマンドのレスポンスには上記のようなtx_blob値が含まれています。オフライン署名レスポンスにはsignedTransaction値が含まれています。いずれもトランザクションの署名済みバイナリ表現(ブロブ)です。

次にsubmitコマンドを使用して、トランザクションブロブ(tx_blobまたはsignedTransaction)をネットワークに送信します。

トランザクションの送信

オフライン署名レスポンスのsignedTransaction値、またはsignコマンドレスポンスのtx_blob値をとり、submitメソッドを使用してtx_blobとして値として送信します。

リクエストのフォーマット

リクエストのフォーマットの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
   "command":"submit",
   "tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540"
}

レスポンスのフォーマット

処理が成功したレスポンスの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "result":{
   "engine_result":"tesSUCCESS",
   "engine_result_code":0,
   "engine_result_message":"The transaction was applied.Only final in a validated ledger.",
   "tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
   "tx_json":{
     "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
     "Fee":"10",
     "Flags":2147483648,
     "RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
     "Sequence":4,
     "SigningPubKey":"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
     "TransactionType":"SetRegularKey",
     "TxnSignature":"304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C26",
     "hash":"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
   }
 },
 "status":"success",
 "type":"response"
}

レスポンスに含まれるトランザクションのhashは、トランザクションの最終結果を検索するときに使用できることに注意してください。

3. レギュラーキーペアの検証

アカウントにレギュラーキーペアが正しく設定されていることを検証するため、ステップ2でアカウントに割り当てたレギュラー秘密鍵でAccountSetトランザクションに署名し、アカウントからこのトランザクションを送信します。

ステップ2で説明したように、マスター秘密鍵の送信は危険です。レギュラー秘密鍵の送信も同様に危険です。そのため、トランザクションの署名とネットワークへのトランザクションの送信を切り離した2段階方式でこのトランザクションを実行します。

トランザクションの署名

トランザクションに署名する最も安全な方法は、クライアントライブラリを使用してローカルで署名することです。signメソッドを使用してトランザクションに署名することもできますが、その場合は信頼できる暗号化された接続を使用するか、ローカル接続を使用して、自分が管理しているサーバに対してのみに行うようにしてください。

いずれの場合も、後のために、署名したトランザクションの識別用ハッシュを書き留めておいてください。

リクエストフィールドに以下の値を指定します。

リクエストフィールド
Accountアカウントのアドレス。
secretステップ1で生成し、ステップ2でアカウントに割り当てたmaster_keymaster_seed、またはmaster_seed_hex(レギュラー秘密鍵)。

リクエストのフォーマット

リクエストのフォーマットの例を示します。このリクエストにはAccountSetオプションが含まれていないことに注意してください。つまり、トランザクションの成功による影響は、アカウントのレギュラーキーペアが正しく設定されていることを確認する(およびトランザクションコストを消却する)こと以外に何もありません。

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "command":"sign",
 "tx_json":{
     "TransactionType":"AccountSet",
     "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93"
     },
  "secret":"sh8i92YRnEjJy3fpFkL8txQSCVo79"
}

レスポンスのフォーマット

処理が成功したレスポンスの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "result":{
   "tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
   "tx_json":{
     "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
     "Fee":"10",
     "Flags":2147483648,
     "Sequence":4,
     "SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
     "TransactionType":"AccountSet",
     "TxnSignature":"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
     "hash":"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
   }
 },
 "status":"success",
 "type":"response"
}

signコマンドのレスポンスには上記のようなtx_blob値が含まれています。オフライン署名レスポンスにはsignedTransaction値が含まれています。いずれもトランザクションの署名済みバイナリ表現(ブロブ)です。

次にsubmitコマンドを使用して、トランザクションブロブ(tx_blobまたはsignedTransaction)をネットワークに送信します。

トランザクションの送信

オフライン署名レスポンスのsignedTransaction値、またはsignコマンドレスポンスのtx_blob値をとり、submitメソッドを使用してtx_blob値として送信します。

リクエストのフォーマット

リクエストのフォーマットの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
   "command":"submit",
   "tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E"
}

レスポンスのフォーマット

処理が成功したレスポンスの例:

  1. WebSocket
  2. JSON-RPC
  3. コマンドライン
{
 "result":{
   "engine_result":"tesSUCCESS",
   "engine_result_code":0,
   "engine_result_message":"The transaction was applied.Only final in a validated ledger.",
   "tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
   "tx_json":{
     "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
     "Fee":"10",
     "Flags":2147483648,
     "Sequence":4,
     "SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
     "TransactionType":"AccountSet",
     "TxnSignature":"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
     "hash":"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
   }
 },
 "status":"success",
 "type":"response"
}

4. 次のステップ

これで、レギュラーキーペアをアカウントに割り当てるメリットについて理解しました。次に以下の関連トピックとチュートリアルをご覧ください。