アカウントグループ
アカウントグループとは、多数のアドレスから到達できる 1 つのアカウントです。スマートフォンのウォレット、ハードウェアウォレット、Ethereum のブラウザウォレットがすべてメンバーになることができ、そのどれに宛てた支払いも 1 つの共有残高に入ります。メンバーの 1 人であるコントローラーがグループを管理し、他の各メンバーが何を支出できるかを決めます。これにより、人やデバイスごとに支出の上限を持つ、家族や会社のアカウントが可能になります。
1 つのアカウント、多数のアドレス
グループの残高、トークン、その他所有するすべてのものは、グループを設立したトランザクションから導出される、鍵なしのグループアドレスに置かれます。
group address = 00000000 ‖ SHA3-256( "ZBC-GROUP" ‖ founding transaction hash )
このアドレスの鍵を持つ者はいません。すべてのメンバーのアドレスはここに解決されます。どのメンバー宛ての支払いもグループに入金され、どのメンバーの残高を問い合わせてもグループの残高が返されます。各アドレスは自分のナンスを保持します。
グループはコントローラーを含めて最大 100 のアドレスを持てます。メンバーは署名できるどの鍵タイプでもよく(ZooBC、Bitcoin、Ethereum、Solana など。鍵とアカウントタイプ を参照)、マルチシグネチャ アカウントもメンバーになれます。
参加
新しいアドレスをリンクできるのはコントローラーだけで、LinkAccount によって、そのアドレスの同意がある場合に限ります。同意とは "ZBC-GROUP-LINK" というタグの付いたチェーン束縛ダイジェストに対する署名で、最大 5,760 ブロック(1 日)先まで有効で、1 回だけ使えます。同意は、そのアドレス自身の署名でも、マルチシグネチャアカウントのしきい値分の署名でも、Ethereum の personal_sign でもかまいません。
参加すると、そのアドレスが所有するすべてのものが、最大 1,000 項目までグループに移ります。残高、トークン、発行したトークン、データセット、ファイル、トリガー、スケジュール、オファー、注文、スポンサーシップ、そしてノードとサービスの登録です。
参加できないアドレスには次のものがあります。
- グループアドレス
- すでにグループに属しているアドレス(各アドレスは 1 つのグループにしか属せません)
- 分配ポリシーを持つアドレス
- アクティブなノード、ゲートウェイ、リレー、アーカイブの鍵
- リリース権限者
離脱と引き継ぎ
メンバーは UnlinkAccount で離脱し、何も持ち出しません。そのアドレスは新しい空のアカウントとして再出発します。持ち込んだものはすべてグループに残ります。
コントローラーは、管理を引き継ぐ前に離脱することはできません。TransferGroupControl は管理を別のメンバーに渡し、そのメンバーは "ZBC-GROUP-CONTROL" というタグの付いた署名で同意しなければなりません。その後、元のコントローラーは受け取り専用になります。
権限
新しいメンバーは受け取り専用です。グループのために支払いを受け取ることと離脱することはできますが、支出はできません。コントローラーは SetMemberPermissions でそれを変更します。
- ビット 0:メンバーは ZBC を支出できます。
- ビット 1:メンバーはグループのトークンを動かせます(ビット 0 も必要です)。
- 期間あたりの ZBC の上限。期間は 1 から 2,102,400 ブロック(1 年)で、上限 0 は無制限を意味します。
たとえば 5,760 ブロックあたり 5 ZBC の上限は、1 日 5 ZBC の支出枠です。
コントローラーだけが行える操作もあります。LinkAccount、SetMemberPermissions、TransferGroupControl、SetSplitPolicy、SetTransactPolicy です。グループの分配ポリシーは、どのメンバーに送られたお金にも適用されます(分配ポリシーと取引ポリシー を参照)。
上限の強制
メンバーの上限はウォレットの設定ではなく、コンセンサスのルールです。
- 受け入れ時に、ノードはそのトランザクションがグループから取りうる ZBC の最大額(金額、手数料、延命デポジット、エスクローの手数料とレント)を計算し、それがメンバーの時間枠の残りを超える場合は、メンバーの他の保留中のトランザクションも数えたうえで拒否します。
- 上限のあるメンバーのトランザクションが実行されるときは、セーブポイントの中で実行されます。チェーンはグループの残高が実際に失った額を測り、それが上限を超えていればトランザクションを取り消します。
- 拒否されるべきメンバーのトランザクションを運ぶブロックは、すべてのノードで無効です。
各メンバーは自分のアドレスで署名するため、1 ブロックにつき 1 アカウント 1 トランザクションのルールのもとで、それぞれ自分の枠を持ちます。
トークンとレント
メンバーが発行したトークンはグループのものとなり、グループのために送金できるメンバーなら誰でも、後でそれをミントできます(トークンのミントとバーン を参照)。
グループは他のアカウントと同様に アカウントレントとプルーニング を支払い、さらにそのレコードのストレージレントを支払います。96 バイトとコントローラーのアドレスに、各メンバーにつき 40 バイトとそのアドレスを加えたものです。メンバーは自分のレントを支払いません。支払えないグループは解散し、残ったダストはロンジェビティプールに入ります(ZBC は決してバーンされない を参照)。