マルチシグを使った他サンプル

このセクションでは、シングルとトランザクションへの署名を行う為にアカウントが複数のアソシエイトキーと閾値を持つマルチシグスキーマの例を取り挙げています。

Example 1: 単一(プライマリ)キーを持ったアカウント

この例では、鍵1つだけ (account-hash-a1…) がアカウントの名前にてトランザクションに署名できます。この鍵は、アカウントのプライマリキーでありweight は1に設定されています。デプロイや鍵管理に必要なweightも1となります。その為、鍵はデプロイと鍵管理の閾値を満たしており両方のアクションを行うことができます。

Example 1 のアカウント詳細:

"Account": {
   "account_address": "account-hash-a1…",
      "action_thresholds": {
         "deployment": 1,
         "key_management": 1
   },
   "associated_keys": [
      {
         "account_address": "account-hash-a1…", // primary key
         "weight": 1
      }
   ],
   "main_purse": "uref-1234…",
   "named_keys": []
}

Example 2: プライマリキーとアソシエイトキーを持つアカウント

この例では、アカウントは weight 2のプライマリキーとデプロイ署名用の低めのweightを持つアソシエイトキーを持っています。アソシエイトキーはデプロイへの署名のみ行うことができるため、プライマリキーがアカウントのアップデートとデプロイを実行します。

Example 2 のアカウント詳細:

"Account": {
   "account_address": "account-hash-a1…",
   "action_thresholds": {
         "deployment": 1,
         "key_management": 2
   },
   "associated_keys": [
      {
         "account_address": "account-hash-a1…", // primary key for key management
         "weight": 2
      },
      {
         "account_address": "account-hash-b2…", // associated key used for deploys
         "weight": 1
      }
   ],
   "main_purse": "uref-1234…",
   "named_keys": []
}

Example 3: デプロイとアカウントアップデート用のMulti-sig(マルチシグ)設定

以下のアカウントは、アカウントの管理とプライマリキーの個別デプロイの送信を行うアソシエイトキーを持っています。2つのアソシエイトキーは、累積でweight 2 を保持しており、デプロイと鍵管理の閾値を満たしています。アップデートの為には、両方の鍵によるデプロイへの署名が必要です。

Example 3 のアカウント詳細:

"Account": {
   "account_address": "account-hash-a1…",
   "action_thresholds": {
      "deployment": 2,
      "key_management": 2
   },
   "associated_keys": [
      {
         "account_address": "account-hash-a1…", // primary key
         "weight": 2
      },
      {
         "account_address": "account-hash-b2…", // associated key
         "weight": 1
      },
      {
         "account_address": "account-hash-c3…", // associated key
         "weight": 1
      }
   ],
   "main_purse": "uref-1234…",
   "named_keys": []
}

Example 4: デプロイへの署名は行うがアカウントのアップデートは制限

このシナリオは、前回の例の上にビルドしていきます。アカウントは、鍵管理の閾値と同等の weight 3のプライマリキーとデプロイへの署名を行える 累積 weight 2のアソシエイトキーを2つ保持しています。アソシエイトキーは、デプロイへの署名は行えるが、鍵管理の閾値を満たしていない為、アカウントのアップデートは行えません。プライマリキーのみがアカウントのアップデートを行えます。プライマリキーが紛失もしくは侵害された場合は、アカウント全体が侵害された状態となります。なぜなら、アソシエイトキーは、侵害された鍵を取り除く為に必要な十分な累積weightを保持していないからです。

Example 4 のアカウント詳細:

"Account": {
   "account_address": "account-hash-a1…",
   "action_thresholds": {
      "deployment": 2,
      "key_management": 3
   },
   "associated_keys": [
      {
         "account_address": "account-hash-a1…", // primary key
         "weight": 3
      },
      {
         "account_address": "account-hash-b2…", // associated key
         "weight": 1
      },
      {
         "account_address": "account-hash-c3…", // associated key
         "weight": 1
      }
   ],
   "main_purse": "uref-1234…",
   "named_keys": []
}

Example 5: 紛失したプライマリキーの復旧

このアカウントは、鍵管理の閾値と同等のweightが3のプライマリキーと、累積 weight 3の3つのアソシエイトキーを持っています。2つのアソシエイトキーはweightを合算させ、デプロイに署名をすることができます。3つ全てのアソシエイトキーは、weightを合算させてアカウントのアップデートが行えます。プライマリキーの紛失や侵害が起こった場合は、アソシエイトキーがそれを削除しアカウントを守ることができます。

Example 5 のアカウント詳細:

"Account": {
   "account_address": "account-hash-a1…",
   "action_thresholds": {
      "deployment": 2,
      "key_management": 3
   },
   "associated_keys": [
      {
         "account_address": "account-hash-a1…", // primary key
         "weight": 3
      },
      {
         "account_address": "account-hash-b2…", // associated key
         "weight": 1
      },
      {
         "account_address": "account-hash-c3…", // associated key
         "weight": 1
      },
      {
         "account_address": "account-hash-d4…", // associated key
         "weight": 1
      }
   ],
   "main_purse": "uref-1234…",
   "named_keys": []
}