ZooBC 위키
통합

MetaMask와 Ethereum 방식 접근

Ethereum 키는 그 키의 일반 0x… 주소를 주소로 하는 ZooBC 계정을 통제할 수 있습니다(계정 유형 4, 키와 계정 유형 참조). MetaMask는 ZooBC에 대해 아무것도 알 필요가 없습니다. 일반 Ethereum 트랜잭션에 서명하면, 그것이 ZooBC 트랜잭션 안에 실려 전달되고 모든 노드가 검사합니다. 이 계정은 실제 ZBC를 보유합니다. 브리지도, 래핑된 코인도, 추가 키도 관여하지 않습니다.

전송이 이루어지는 방식

  1. MetaMask가 일반 Ethereum 전송에 서명합니다. 액세스 목록이 비어 있는 EIP-1559, EIP-2930, 또는 EIP-155를 적용한 레거시 트랜잭션입니다.
  2. 서명된 Ethereum 트랜잭션이 송신자의 0x 계정에서 수신자의 0x 계정으로 가는 ZooBC SendZBC의 메시지 필드에 들어갑니다.
  3. 모든 노드가 Ethereum 트랜잭션을 해석하고, 서명에서 서명자를 복원하며, 세 가지를 요구합니다. 서명자가 보내는 계정일 것, 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이 포장 작업을 합니다. 두 유형 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 코인과 단위). 따라서 원자 단위 하나는 10^10 wei이고, 1 ZBC는 MetaMask에서 10^18 wei로 표시됩니다.

나눗셈은 전체 정밀도로 수행되며, 원자 단위 하나보다 작은 나머지는 버리고, 부호 있는 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에서 대기하고, 노드 운영자가 설정한 자격 증명이 필요합니다.

같이 보기