インテグレーションガイド
zERC20 をアプリケーションにインテグレーションする方法
SDK を使いたい場合(プライベート送信・Scan・Wrap / Unwrap など)は SDK ガイド を参照してください。このページはより低レベルなコントラクトインテグレーションとオラクル利用を対象としています
概要
zERC20 インテグレーションには3つの方法があります:
トークンインテグレーション:DeFiプロトコル・ウォレット・dApp で zERC20 を標準 ERC-20 トークンとして利用
オラクルインテグレーション:zERC20 の Transfer Merkle Tree をオンチェーンオラクルとして活用し、ZKP で転送履歴を検証
セルフホスト型 Indexer:最大限のプライバシー確保のために自前の Indexer ノードを実行し、送受信者の紐付け漏洩を防止
新しい zERC20 トークンを作成する
独自トークンの zERC20 バージョン(例:zUNI、zUSDT)を立ち上げたい場合は、zerc20.io/integrate から zERC20 チームにお問い合わせください。デプロイと設定をサポートします。
トークンインテグレーション
zERC20 は完全な ERC-20 互換です。ERC-20 トークンをサポートするあらゆるアプリケーションで zERC20 を使えます。
コントラクトアドレス
各チェーンのデプロイアドレスは コントラクトアドレス を参照してください。
標準 ERC-20 インターフェース
Wrap と Unwrap
LiquidityManager コントラクトを使って、原資産トークンと zERC20 を相互変換できます。
使用例:
Wrapリワードと Unwrap手数料の詳細は 手数料とリワード を参照してください。
オラクルとしての zERC20
zERC20 は ZKP に適した Poseidon Hash 関数を用いて、全転送の完全な履歴を Merkle Tree として管理しています。外部開発者はこの Transfer Merkle Tree をオンチェーンオラクルとして活用し、転送履歴を検証できます。
リーフ構造
Transfer Merkle Tree の各リーフは1件の転送を表します:
from
address
送信者アドレス(フィールド要素に変換)
to
address
受信者アドレス(フィールド要素に変換)
value
uint256
転送金額(フィールド要素に変換)
ツリー構造
Merkle Root には2種類あります:
Local Transfer Root
チェーンごとの転送 Merkle Root
40
Global Transfer Root
クロスチェーン集約 Merkle Root
46(40 + 6)
Global Transfer Tree は、全チェーンの Local Transfer Root を集約ツリー(高さ6・最大64チェーン対応)で集約して構築されます。
コントラクトから Merkle Root を読み取る
外部コントラクトは Verifier コントラクトから証明済み Merkle Root を照会できます:
使用例:
Merkle Proof の検証はスマートコントラクト上でオンチェーンに行う方法と、ZKP 回路を使ってオフチェーンで行う方法があります。用途に応じて選択してください:
オンチェーン検証:ガスコストが許容範囲内のシンプルなメンバーシップ証明に適しています
ZKP 検証:プライバシー保護アプリケーションや、オンチェーンでは高コストになる複雑なロジックに最適です
Poseidon Hash の互換性
zERC20 が使っている Poseidon Hash は circomlib の Poseidon ライブラリ と完全に互換性があります:
リーフハッシュ
Poseidon(3)
Poseidon(from, to, value)
ノードハッシュ
Poseidon(2)
Poseidon(left, right)
この互換性により、開発者は circomlib を使ったカスタム ZK 回路を構築して、zERC20 の Transfer Merkle Tree に対するメンバーシップ証明を検証できます。
Merkle Proof を取得する
Local Transfer Merkle Proof
Indexer ノードに照会して Local Transfer Merkle Proof を取得します:
エンドポイント: POST /proofs
リクエスト:
レスポンス:
target_index
証明対象のツリーインデックス(スナップショット)
leaf_index
ツリー内のリーフの位置
root
target_index 時点の Merkle Root
hash_chain
target_index 時点の Hash Chain 値
siblings
証明パスの40個の兄弟ハッシュの配列
補助エンドポイント — ツリーインデックスを取得:
GET /tree-index?chain_id={chainId}&token_address={address}&transfer_root={root}
指定した Merkle Root に対応するツリーインデックスを返します。
Global Transfer Merkle Proof
Global Merkle Proof は以下を連結して構築します:
Local Transfer Merkle Proof(40個の兄弟ハッシュ)
集約ツリー Proof(6個の兄弟ハッシュ)
構築アルゴリズム:
Hub コントラクトの集約状態:
Hub コントラクトの AggregationRootUpdated イベントが、全 Local Root のスナップショットを提供します:
自前の Indexer を実行する
送受信者の紐付け漏洩を防いで最大限のプライバシーを確保するには、自前の Indexer インスタンスを実行してください。
Docker Compose
設定
環境変数を設定します:
完全なサービス設定はリポジトリルートの docker-compose.yml を参照してください。
最終更新