ZooBC ウィキ
インテグレーション

MetaMask と Ethereum 形式のアクセス

Ethereum の鍵は、その鍵の通常の 0x… アドレスをアドレスとする ZooBC のアカウント(アカウントタイプ 4。鍵とアカウントタイプ を参照)を管理できます。MetaMask は ZooBC について何も知る必要がありません。通常の Ethereum のトランザクションに署名するだけで、それが ZooBC のトランザクションの中に入って運ばれ、すべてのノードによって確認されます。アカウントは本物の ZBC を保有します。ブリッジも、ラップドコインも、追加の鍵も関係しません。

送金の仕組み

  1. MetaMask が、アクセスリストが空の、EIP-1559、EIP-2930、または EIP-155 のレガシーの通常の Ethereum の送金に署名します。
  2. 署名された Ethereum のトランザクションが、送信者の 0x アカウントから受取人の 0x アカウントへの ZooBC の SendZBC のメッセージフィールドに入れられます。
  3. すべてのノードが Ethereum のトランザクションを解析し、署名から署名者を復元して、3 つのことを要求します。署名者が送信元のアカウントであること、Ethereum の to アドレスが受取人であること、そして値が ZBC の金額と一致することです。

この経路では、ノードは ZooBC 自身のトランザクションのダイジェストの代わりに、Ethereum の署名を確認します。運ばれるトランザクションは、メッセージの最大 4,096 バイトを使えます。

MetaMask が Ethereum のトランザクションに署名し、ポート 8545 のアダプターがそれを SendZBC のメッセージフィールドに包み、すべてのノードが署名者、受取人、金額を確認します
MetaMask が Ethereum のトランザクションに署名し、ポート 8545 のアダプターがそれを SendZBC のメッセージフィールドに包み、すべてのノードが署名者、受取人、金額を確認します

すべてのノードにあるアダプター

すべてのノードは Ethereum の JSON-RPC アダプターを内蔵しています。既定で有効(eth_rpc_enabled)で、既定ではノード自身のマシンのポート 8545(ループバック)で待ち受け、同じくループバックでノードの API に転送します。MetaMask のようなウォレットが行う呼び出しに答えます。

  • チェーンとノード:eth_chainId、net_version、web3_clientVersion、eth_syncing、eth_mining、eth_hashrate、eth_coinbase、eth_accounts
  • 状態:eth_blockNumber、eth_getBalance、eth_getTransactionCount、eth_getCode、eth_call
  • 手数料:eth_estimateGas、eth_gasPrice、eth_maxPriorityFeePerGas
  • トランザクションとブロック:eth_sendRawTransaction、eth_getTransactionReceipt、eth_getTransactionByHash、eth_getBlockByNumber、eth_getBlockByHash

eth_sendRawTransaction が包む処理を行います。2 つのタイプ 4 のアカウントの間の SendZBC を作り、金額を wei の値を 10^10 で割ったものにし、手数料を gasLimit × gasPrice を 10^10 で割ったもの(それより低ければノードの手数料の下限まで引き上げる)とし、生の Ethereum のトランザクションをメッセージに入れます。

チェーン ID はチェーンのジェネシスハッシュから導かれるため、各 ZooBC チェーンはそれぞれ独自の ID を示します。eth_rpc_chain_id が 0 に設定されていると、アダプターは次のように計算します。

chain id = (0x0883 << 16) | first two bytes of the genesis hash

wei からアトミック単位へ

MetaMask は小数点以下 18 桁で数えます。表示上のコイン 1 枚を 10^18 wei として扱います。ZooBC は 8 桁で数えます。1 ZBC は 10^8 アトミック単位です(ZBC コインとその単位)。したがって 1 アトミック単位は 10^10 wei で、1 ZBC は MetaMask では 10^18 wei と表示されます。

割り算は完全な精度で行われます。1 アトミック単位より小さい端数は切り捨てられ、符号付き 64 ビットの金額に収まらないほど大きい値は拒否されます。ノードの確認とアダプターは同じ換算を使うため、常に一致します。

MetaMask は 1 ZBC を 10^18 wei として、ZooBC は 10^8 アトミック単位として数えます。500,000,000,000,000,000 wei を 10^10 で割ると 50,000,000 アトミック単位、0.5 ZBC になります
MetaMask は 1 ZBC を 10^18 wei として、ZooBC は 10^8 アトミック単位として数えます。500,000,000,000,000,000 wei を 10^10 で割ると 50,000,000 アトミック単位、0.5 ZBC になります

Ethereum のアドレスをアカウントグループにリンクする

ウェブウォレット は、送金以外でも MetaMask を使います。eth_requestAccounts と personal_sign によって、Ethereum のアドレスをアカウントグループにリンクする同意に署名するよう MetaMask に求めます。

Bitcoin 形式のアダプターも

ノードには Bitcoin Core 形式の RPC アダプターも含まれています。既定ではオフで、有効にするとポート 8332 で待ち受け、ノードの運用者が設定する認証情報を必要とします。

関連項目