マルチシグネチャ
マルチシグネチャアカウントとは、単一の鍵では管理されないアカウントです。参加者のリストとしきい値で定義され、少なくともその数の参加者が同じトランザクションに署名したときにだけ支出します。3 人中 2 人、5 人中 3 人といった形です。参加者は異なる鍵タイプを使えるため、ZooBC の鍵、Ethereum の鍵、Bitcoin の鍵が 1 つのアカウントを共有できます。
アカウント
マルチシグネチャアカウントは、しきい値(1 から参加者の数まで)、ナンス、参加者のアドレスで定義されます。そのアドレスはそれらのハッシュです。
address = SHA3-256( threshold ‖ nonce ‖ count ‖ sorted participant addresses )
その結果は通常のタイプ 0 のアカウントとして使われるため、どのアドレスとも同じように ZBC を受け取れます。その秘密鍵を持つ者はいないため、そこから支出する唯一の方法は参加者の署名を集めることです。
支出の手順
- 誰かが、MultiSignature トランザクションの中で、支払いなどの内部トランザクションを提案します。内部トランザクションは署名されておらず、その送信者はマルチシグネチャアカウントです。
- 参加者が署名を加えます。一度にまとめても、後の MultiSignature トランザクションで加えてもよく、順番も問いません。MultiSignature の本体は、アカウントの定義、内部トランザクション、署名を任意の組み合わせで運ぶことができるため、いくつかのラッパーで 1 つの内部トランザクションを組み上げることができます。
- 各参加者は、内部トランザクションのチェーン束縛ダイジェスト
SHA3-256("ZBC-TX" ‖ genesis hash ‖ inner bytes)に、自分の鍵タイプの方式で署名します(トランザクションへの署名 を参照)。署名は内部トランザクションのハッシュの下に保存されます。参加者以外からの署名や検証に通らない署名は、単に数えられません。 - 有効な署名がしきい値に達すると、内部トランザクションが一度だけ実行されます。マルチシグネチャアカウントがその手数料(少なくとも内部トランザクションの下限)を支払い、内部トランザクションは永久に実行済みとして記録されるため、リプレイされることは決してありません。
各 MultiSignature ラッパーの送信者は、そのラッパー自身の手数料を支払います。
チェーン外で共同署名を組み立てることはなく、署名の順番も決められていません。各鍵は、それぞれの方式で単独で署名します。
できること
内部トランザクションは、次のいずれかのタイプにできます。
- Empty または SendZBC
- 4 つのノード登録のタイプのいずれか(ノード登録の登録、更新、削除、クレーム)
- SetSplitPolicy
- 4 つのアカウントグループのタイプのいずれか(LinkAccount、UnlinkAccount、SetMemberPermissions、TransferGroupControl)
したがってマルチシグネチャアカウントは、ZBC を支払い、ノードの登録を保持し、分配ポリシーで収入を分け合い、アカウントグループに参加することはできますが、トークンを直接送ることはできません。単一の鍵が自分の署名で同意するのと同じように、しきい値によってグループへの参加に同意することができます。
1 ブロックにつき 1 アカウント 1 トランザクションのルールのもとでは、内部トランザクションは実行されるときにマルチシグネチャアカウントの分として数えられます。
発言権を持つ者
数えられるのは参加者の署名だけです。登録済みノードがアカウントのために署名することはありません。他のどの署名とも同じように、参加者の署名を確認するだけです。ZooBC Foundation も、金額にかかわらず、それについて何の発言権も持ちません。