본문으로 이동

체인 ID

EVM 체인 ID, EIP-155 레거시 트랜잭션 재실행 도메인, 형식화 트랜잭션, CHAINID, 지갑과 RPC 검증, EIP-712 도메인 및 비EVM 네트워크 식별자를 검증 우선으로 설명합니다.

업데이트

교육 목적의 자료이며 투자, 법률 또는 보안 자문이 아닙니다. 체인 ID가 일치하면 명시된 재실행 위험을 줄일 수 있지만 RPC, 네트워크, 컨트랙트, 자산, 서명 요청 또는 최종 상태의 진위를 입증하지는 않습니다.

직접 답변

EVM 생태계에서 체인 ID는 재실행 도메인 매개변수로 설정되는 정수입니다. EIP-155는 보호된 레거시 트랜잭션 서명에 이 값을 결합합니다. 타입 2와 같은 형식화 트랜잭션은 자체 서명 대상 페이로드에 이 값을 인코딩합니다. CHAINID는 EVM 실행 중 이 값을 노출하고 eth_chainId는 JSON-RPC를 통해 이 값을 반환합니다. 이들은 서로 연관된 인터페이스이지 보편적인 신원 인증서가 아닙니다.

이 값은 전 세계에서 유일하거나 영구적이라고 보장되지 않습니다. 사설 네트워크와 논쟁적 포크는 값을 재사용할 수 있고 RPC가 거짓 정보를 반환할 수도 있습니다. 동일한 주소에도 체인마다 다른 코드와 상태가 존재할 수 있습니다. EIP-712의 체인 ID 도메인 필드는 선택 사항이며, 원시 메시지와 비EVM 시스템에는 서로 다른 재실행 및 네트워크 식별 규칙이 있습니다. 따라서 정확히 사용하려면 구체적인 서명 방식, 엔드포인트, 제네시스 또는 체크포인트와 애플리케이션 도메인을 확인해야 합니다.

작동 원리

  1. 먼저 생태계와 식별자 의미를 파악합니다. EVM EIP-155 정수, EIP-712 도메인, CAIP-2 네임스페이스 참조, Cosmos 문자열 체인 ID, Solana 제네시스 해시 또는 다른 방식이 있습니다. 네임스페이스가 없는 숫자를 생태계 간에 비교해서는 안 됩니다.
  2. 신뢰할 수 있는 네트워크 스냅샷을 고정합니다. RPC URL, 예상 체인 ID의 십진수 및 십육진수 표현, 제네시스 또는 완결된 체크포인트, 최신 블록, 클라이언트 설정, 주요 컨트랙트 codeHash, 출처 시각을 기록합니다. 지갑 네트워크 이름과 아이콘은 신뢰할 수 없는 메타데이터입니다.
  3. EVM 서명에는 eth_chainId를 조회하고 JSON-RPC 십육진수 수량을 정밀도 손실 없이 파싱합니다. 정규화한 정수를 예상 설정 및 지갑 공급자 상태와 비교합니다. net_version으로 대체하지 말고, 일치하지 않으면 서명을 구성하기 전에 거부합니다.
  4. 정확한 서명 도메인을 재구성합니다. 보호되지 않은 레거시 트랜잭션, EIP-155로 보호된 레거시 인코딩, 형식화 엔벌로프를 구분합니다. EIP-712에서는 도메인 필드, verifyingContract, nonce와 기한을 확인하고, 릴레이 방식 또는 스마트 계정 인텐트에서는 내부 프로토콜 해시를 살핍니다.
  5. 활성 체인에서 실행 대상을 검증합니다. 수신자, 가치, calldata, 토큰 주소, 컨트랙트 코드 또는 프록시 구현체, 계정 nonce, 수수료 및 시뮬레이션 상태를 확인합니다. 체인 ID는 도메인을 분리하지만 이러한 객체의 진위를 입증하지 않습니다.
  6. EIP-1193 chainChanged, 계정 변경 및 연결 해제를 엄격한 상태 경계로 취급합니다. 캐시된 호가, 허용 한도, nonce, 시뮬레이션 및 서명 요청을 폐기하고 체인과 대상을 다시 읽은 뒤, 검토한 원시 트랜잭션만 고정한 엔드포인트로 전송합니다.
  7. 대상 체인에서 트랜잭션을 대조합니다. 서명된 원시 바이트와 해시, RPC 수락 결과, 영수증 상태, 블록 번호와 해시, nonce 사용, 상태 변경 및 필요한 완결성을 확인합니다. 체인 분기, ID 변경, L1/L2 도메인 혼동 및 공급자 드리프트를 모니터링하고 설명할 수 없는 차이가 있으면 처리를 중단합니다.

계산 예시

  • 십육진수와 십진수 RPC 확인. Base의 십진수 체인 ID는 8453이고 eth_chainId에서는 0x2105로 표시됩니다. 즉 2 * 4096 + 1 * 256 + 0 * 16 + 5 = 8453입니다. Ethereum 메인넷은 1 = 0x1, Arbitrum One은 42161 = 0xa4b1입니다. 지갑이 8453을 예상했는데 0x1을 받았다면 표시된 네트워크 이름을 믿지 말고 서명 전에 중단해야 합니다.
  • 보호된 레거시 트랜잭션의 v. EIP-155 레거시 트랜잭션에서 v = 35 + 2 * chainId + yParity입니다. 체인 ID가 1이면 값은 37 또는 38, 체인 ID가 61이면 157 또는 158입니다. 역산하면 floor((37 - 35) / 2) = 1입니다. 이 계산은 형식화 트랜잭션의 y-parity 필드나 27 또는 28을 사용하는 보호되지 않은 레거시 서명에는 적용되지 않습니다.
  • 형식화 트랜잭션과 잘못된 체인의 거부. 타입 2 페이로드는 chain_id=8453에 결합됩니다. 21,000 gas, 기본 수수료 20 gwei, 최대 우선 수수료 2 gwei, 최대 수수료 30 gwei라면 유효 가스 가격은 min(30, 20 + 2) = 22 gwei, 수수료는 21,000 * 22 gwei = 0.000462 ETH입니다. 규칙을 올바르게 시행하며 ID가 1로 설정된 체인은 서명 도메인 불일치로 이 페이로드를 거부하므로, 거부 자체에는 해당 체인의 온체인 가스비가 들지 않습니다. ID 8453에서도 다른 이유로 실패할 수 있습니다.
  • 비EVM과 이중 식별자. Cosmos EVM 배포는 Cosmos SDK 문자열 ID local-1과 독립적인 EVM 정수 ID 262144 = 0x40000을 함께 사용할 수 있습니다. Cosmos 네이티브 서명은 문자열과 계정 번호 및 sequence를 사용하고, EVM 트랜잭션 서명은 정수 도메인을 사용합니다. Solana는 제네시스 해시를 노출하고 EIP-155 정수 대신 트랜잭션 메시지의 최근 블록해시 또는 영구 nonce를 사용합니다.

위험

  • 잘못된 RPC 엔드포인트 또는 지갑의 활성 체인에 연결합니다.
  • 체인 ID, 상태 또는 전송 결과를 거짓으로 보고하는 악성 RPC를 신뢰합니다.
  • 체인 ID의 십육진수와 십진수 표현을 혼동합니다.
  • 큰 체인 ID를 안전하지 않은 숫자형으로 파싱하여 정밀도를 잃습니다.
  • net_version이 항상 eth_chainId와 같다고 간주합니다.
  • EIP-1193 chainChanged 이벤트 또는 네트워크 전환 경합을 놓칩니다.
  • 전환 후 캐시된 nonce, 호가, 승인 또는 시뮬레이션을 재사용합니다.
  • 체인 ID가 전 세계에 등록되어 충돌하지 않는다고 가정합니다.
  • 동일한 체인 ID를 재사용하는 사설 네트워크 또는 포크 간에 서명합니다.
  • 포크가 ID를 변경하거나 유지할 때의 동작을 정의하지 않습니다.
  • EIP-155 도메인이 없는 보호되지 않은 레거시 트랜잭션을 수락합니다.
  • 레거시 v 공식을 형식화 트랜잭션이나 다른 서명에 적용합니다.
  • 원시 메시지 또는 personal_sign 요청에 체인 도메인이 포함된다고 가정합니다.
  • EIP-712 도메인의 체인 ID를 생략하거나 잘못 인코딩합니다.
  • verifyingContract, 애플리케이션 nonce, 기한 또는 목적을 생략합니다.
  • 동일한 컨트랙트 주소를 코드와 상태 비교 없이 신뢰합니다.
  • L1, L2, 브리지 원천 및 목적지 서명 도메인을 혼동합니다.
  • 릴레이 인텐트, permit 또는 스마트 계정 작업의 내부 도메인을 무시합니다.
  • 지갑 네트워크 추가 메타데이터, 탐색기 라벨 또는 아이콘을 네트워크 인증으로 간주합니다.
  • EVM 의미론을 Cosmos, Solana, Bitcoin 또는 다른 프로토콜에 그대로 적용합니다.

흔한 오해

  • 체인 ID는 전 세계에서 유일하고 영구적인 공식 등록 번호입니다.
  • 올바른 체인 ID는 RPC 엔드포인트, 네트워크 및 컨트랙트의 진위를 입증합니다.
  • 모든 Ethereum 서명은 자동으로 체인 ID에 커밋됩니다.
  • 서로 다른 체인 ID는 모든 서명 메시지와 애플리케이션 인텐트의 재실행을 막습니다.
  • 모든 블록체인은 EIP-155 방식의 정수 체인 ID를 사용합니다.

관련 주제

출처

탐색

위키 검색...