制作中

制作中:MainNetに先立ってこのサイトを構築しています。内容は変更される場合があります。

このサイトはまだ制作中です

ZooBCはオープンに開発を進めています。ここに掲載している内容は最新かつ誠実なものですが、完成版ではありません。最終的な表明ではなく、現時点での到達点としてお読みください。

MainNetまでの間に、文言、構成、画像、数値は変わっていきます。一部のページは仮のものです。

ZooBCのエコシステム全体は段階的に整っていきます。ウォレット、エクスプローラー、コミュニティチャネルはMainNetが近づくにつれて順次公開され、このサイトもそれに合わせて充実していきます。

読みにくい箇所、表示の崩れ、誤解を招きそうな点があれば、ぜひお知らせください。今いただくフィードバックは、後の洗練されたローンチよりも私たちにとって価値があります。

ZOOBC / マニュアル

ZooBCトランザクションマニュアル

チェーン上で価値とデータを動かすあらゆる方法:レイアウト、コイン、モディファイア

価値を動かす。データを動かす。あなたの条件で。

ZooBCのトランザクションは、型付きの小さなボディを包む署名付きエンベロープです。エンベロープはすべてのタイプで共通で、実際に何が起こるかはボディといくつかの任意のモディファイアが決めます:通常の送金、トークンの送付、ベスティングされる給与、エスクロー付きの取引、アプリの手番、スケジュールされたトリガー。ここではその全体像を示します。

01トランザクションの構造

すべてはリトルエンディアンで1つのバイトバッファにシリアライズされ、その後署名されます。青いフィールドがエンベロープ(全タイプ共通)、紫のボディがタイプごとに変わる部分です。

タイプ 4 バージョン 1 タイムスタンプ 8 送信者 4+key 受取人 4+鍵 / 空 手数料 8 bodyLen 4 ボディ bodyLen エスクロー 空 / セクション msgLen 4 メッセージ msgLen 署名 送金時

アカウントアドレスは4バイトのタイプ(LE)+公開鍵で、ZBCなら00000000+32Bのed25519、ほかに04000000+ETH、05000000+BTCなどがあります。受取人がない場合は空のタイプ02000000として書き込まれます。末尾のメッセージは通常の送金がメモを載せる場所で、SendZBCのボディは金額のみです。受取人とメモはエンベロープに含まれます。

02署名

アカウントタイプによって、アドレスのプレフィックスと署名方式の両方が決まります。署名対象はエンベロープ全体(署名フィールドを除く)で、その前に署名タグとジェネシスハッシュを付加します。3つの方式はいずれも決定論的なので、ブラウザのウォレットとノードの結果はバイト単位で一致します。

ZooBC(ed25519)· タイプ 00000000

// digest, then sign
digest = SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes)
sig    = ed25519(digest, privkey)   // 64 bytes

Solana、Cardano、Tezos、Polkadotでも同じ方式です。ed25519鍵は同じで、アドレスのプレフィックスと表示用のエンコードが異なります。

Ethereum(secp256k1)· タイプ 04000000

// recoverable ECDSA, low-s
digest = keccak256(SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes))
r,s,v  = secp256k1.sign(digest)
sig    = r ‖ s ‖ (v+27)          // 65 bytes

MetaMaskは独自に署名したRLPを送ることもでき、ノードが送信者を復元してZBCの送金に対応付けます。

Bitcoin(secp256k1)· タイプ 05000000

// double-sha over the SHA3 payload
digest = SHA256d(SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes))
sig    = secp256k1.sign(digest)
field  = [len(2)] ‖ compressedPub(33) ‖ sig

手数料の概要

最低手数料はサイズに応じて決まります:基本料率 × ネットワークの手数料スケールに、バイト単位のストレージ/期間に応じた額を加えたものです。https://zoobc.network/api/v1/blockchain/fee-paramsからリアルタイムで取得するか、/estimate-feeで個々のトランザクションの正確な額を算出すれば、ウォレットとノードの計算はアトミック単位まで一致します。正確な手数料で送金した際の過払い分は返金されます。

チェーンに紐付いたダイジェスト(署名バージョン2)

ノードv0.4.0以降、最も内側の項は3つの方式すべてで共通です。ノードがそのダイジェストを一度だけ計算し、アカウントタイプが選択する署名方式に渡すためです。

  • "ZBC-TX" は終端文字のない6バイトのASCIIです: 5a 42 43 2d 54 58.
  • genesis_hash は、署名対象のチェーンのブロック0の生の32バイトです。

genesis_hashはGET /api/v1/node/infoから取得します。同じレスポンスにsigning_version: 2とsigning_tag: "ZBC-TX"も含まれます。ハードコードは厳禁です:テストネットワークが再起動されるたびに変わります。

ジェネシスハッシュをダイジェストに組み込むことで、署名はただ1つのネットワークでのみ有効になり、テストチェーン向けに署名したトランザクションを別のチェーンでリプレイすることはできなくなります。SHA3_256(txBytes)だけに署名する方式は署名バージョン1であり、ノードは次のエラーで拒否します:

Invalid transaction signature: legacy unbound digest (signing v1); this chain requires signing v2

033種類のコイン

金額は常にアトミック単位です(1 ZBC = 100,000,000)。コインごとに変わるのはtoken_idフィールドだけで、移転の仕組みは同一です。

① ネイティブZBC

どこでもtoken_id = 0。ガス/手数料のコインであり、ブロック報酬やステーキングにも使われます。SendZBC(タイプ1)が基本の経路です。

② ジェネシス / ブリッジトークン

ジェネシス時にミントされた、ラップ済みの外部資産(ZBTC、ZETH、ZSOL…)です。ジェネシス設定で固定のtoken_idが割り当てられた通常のカラードトークンであり、プロトコル上は特別な扱いはありません。

③ ユーザー発行トークン

誰でもIssueToken(タイプ10)で発行できます:シンボル、供給量、小数桁数、任意のZBC裏付け。token_idは発行トランザクションから導出されます。同じTransferToken / MintToken / BurnTokenが適用されます。

ボディにtoken_idがある場合(送付、スワップ、アプリのステーク、リキッド、ベスティング…)は、ZBCなら0を、カラードコインならそのトークンのIDを渡します。裏付けのあるトークンは、自身で手数料を支払うこともできます(fee_in_tokenフラグ)。その価格はZBC裏付けを基準に算定されます。

04モディファイア:1つの支払い、さまざまな形

基本タイプに加えて、タイミングと信頼に関わる4つのラッパーが、資金がいつ届くか、そして届くかどうかを変えます。機能の幅が広く感じられるのは、これらのおかげです。

エスクロー

あらゆる価値移転トランザクションのエンベロープにエスクローセクションを追加できます(承認者 · コミッション · タイムアウト · 指示)。資金は、指名された承認者がApprovalEscrow(タイプ4)に署名して解放または却下するか、タイムアウトになるまで保留されます。あらゆる送金に条件付き取引を重ねられます。

リキッド

LiquidPayment(タイプ6):一定期間にわたる単一の遅延支払いです。期間が完了すると受取人に全額が支払われ、送信者が途中でLiquidPaymentStop(タイプ262)を実行した場合は按分された額が支払われます。短期(数時間)向けで、ZBCまたはトークンに対応します。

スケジュール / ベスティング

ScheduledTransfer(タイプ29):タイマーによる分割で解放します。ベスティング(資金を事前ロック)または定期給与(期間ごとに引き落とし)。クリフ、取り消し、受取人による辞退、付け替えに対応。長期(数週間~数年)向けです。解放は新しいトランザクションではなく、台帳上の移動として表示されます。

トリガー / 停止

軽量なタイマー:CreateTrigger(15)は将来のブロック高で実行されるよう金額をロックし、CancelTrigger(16)で返金します。長期のものを止めるには:CancelSchedule(30)で取り消し/辞退、LiquidPaymentStop (262).

組み合わせ可能です。エスクロー付きの月給、カラードトークンによるベスティング付与など、基本要素を自由に組み合わせられます。(定期払いとエスクローの完全な組み合わせはロードマップ上にありますが、構成要素はすべて現時点で揃っています。)

05データオブジェクトの存続

データを保持するオンチェーンのオブジェクト、つまりデータセット(キー/値のプロフィール、チャット、ビジネスフォーム)とトークンは、存続のためにレントを支払います。「オブジェクトに資金を追加する」とは、その存続資金を補充することを意味します。

データセットとファイル → プリペイドストレージ

データはSetupAccountDataset(タイプ3、プロパティ → 値のペア)で書き込み、ファイルはDFSCreateFile(8)で保存します。ブロックごとにストレージレントがアカウントのプリペイドストレージから引かれ、残高が尽きるとオブジェクトは削除されます。補充にはAddPrepaidStorage(タイプ9)を使います。ボディは金額のみで、プリペイドストレージの残高に直接加算されます。前払いが多いほど長く存続します。

トークン → 存続資金

カラードトークンも存続のために支払いを行います。FinanceToken(タイプ14)は手数料からトークンの存続期間を補充し、未使用の裏付けが作成者に返還されるまでの有効期間を延ばします。考え方は同じで、トークン単位です。

06トランザクション全カタログ

全50種類のトランザクションタイプと、その正確なリトルエンディアンのボディレイアウトです。コイン = token_idに対応 · 修飾可能 = エスクローセクションを受け付ける · 新チェーン = コンセンサスレベル(チェーンのローンチ時に導入)。

バイトレイアウトは、ZooBCノードのシリアライザー(transaction_util.cpp、タイプごとのエグゼキューター、アーカイブデコーダー)から書き起こしたものです。lp4 = 4バイトの長さプレフィックス+UTF-8バイト列、addr = 4バイトのタイプ+鍵。整数はすべてリトルエンディアン、金額はアトミック単位(ZBCは÷1e8)です。ZooBC上でウォレットやツールを開発するインテグレーター向けのリファレンスです。