จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
ในระบบนิเวศ EVM chain ID คือจำนวนเต็มที่กำหนดค่าไว้เพื่อใช้เป็นพารามิเตอร์ของโดเมนป้องกัน replay โดย EIP-155 ผูกค่านี้เข้ากับลายเซ็นของธุรกรรม legacy ที่มีการป้องกัน รูปแบบธุรกรรมแบบ typed เช่น type 2 จะเข้ารหัสค่านี้ไว้ใน payload ที่ลงนามของตนเอง คำสั่ง CHAINID เปิดเผยค่านี้ระหว่างการประมวลผล EVM และ eth_chainId รายงานค่าผ่าน JSON-RPC สิ่งเหล่านี้เป็นอินเทอร์เฟซที่เกี่ยวข้องกัน ไม่ใช่ใบรับรองตัวตนสากล
ไม่มีหลักประกันว่าค่านี้จะไม่ซ้ำกันทั่วโลกหรือคงอยู่ตลอดไป เครือข่ายส่วนตัวและ fork ที่มีข้อขัดแย้งอาจใช้ค่าซ้ำ RPC อาจรายงานเท็จ และ address เดียวกันอาจมี code กับ state ต่างกันในคนละ chain EIP-712 มี field chain ID ที่ไม่บังคับในโดเมน ขณะที่ข้อความดิบและระบบที่ไม่ใช่ EVM มีกฎป้องกัน replay และระบุตัวตนเครือข่ายต่างออกไป การใช้งานที่ถูกต้องจึงต้องระบุรูปแบบการลงนาม endpoint, genesis หรือ checkpoint และโดเมนของแอปพลิเคชันอย่างแน่นอน
กลไกการทำงาน
- ระบุระบบนิเวศและความหมายของตัวระบุก่อน ได้แก่ จำนวนเต็ม EIP-155 ของ EVM, โดเมน EIP-712, reference ที่มี namespace ของ CAIP-2, chain ID แบบ string ของ Cosmos, genesis hash ของ Solana หรือรูปแบบอื่น ห้ามเปรียบเทียบตัวเลขที่ไม่มีตัวกำกับข้ามระบบนิเวศ
- ตรึงภาพเครือข่ายที่เชื่อถือได้ ได้แก่ URL ของ RPC, chain ID ที่คาดไว้ทั้งเลขฐานสิบและฐานสิบหก, genesis หรือ checkpoint ที่ final แล้ว, head block, การกำหนดค่าของ client,
codeHashของสัญญาหลัก และเวลาของแหล่งข้อมูล ชื่อและไอคอนเครือข่ายในกระเป๋าเงินเป็น metadata ที่เชื่อถือไม่ได้ - เรียก
eth_chainIdสำหรับการลงนาม EVM และแปลงค่า quantity ฐานสิบหกของ JSON-RPC โดยไม่สูญเสียความแม่นยำ เปรียบเทียบจำนวนเต็มที่ปรับรูปแบบแล้วกับการกำหนดค่าที่คาดไว้และ state ของ wallet provider ห้ามใช้net_versionแทน และให้ปฏิเสธเมื่อค่าไม่ตรงก่อนสร้างลายเซ็น - สร้างโดเมนการลงนามขึ้นใหม่อย่างแม่นยำ แยกธุรกรรม legacy ที่ไม่มีการป้องกัน การเข้ารหัส legacy ที่ EIP-155 ป้องกัน และ envelope แบบ typed สำหรับ EIP-712 ให้ตรวจ field ของโดเมน
verifyingContract, nonce และ deadline ส่วน intent ที่ส่งผ่าน relayer หรือ smart account ให้ตรวจ hash ภายในของโปรโตคอล - ตรวจสอบเป้าหมายการประมวลผลบน chain ที่ใช้งานอยู่ ได้แก่ ผู้รับ มูลค่า calldata, address ของโทเค็น code ของสัญญาหรือ proxy implementation, nonce ของบัญชี ค่าธรรมเนียม และ state จากการจำลอง chain ID แยกโดเมนออกจากกัน แต่ไม่ได้พิสูจน์ว่าวัตถุเหล่านี้เป็นของแท้
- ถือว่า EIP-1193
chainChangedการเปลี่ยนบัญชี และการตัดการเชื่อมต่อเป็นขอบเขต state ที่เข้มงวด ทิ้ง quote, allowance, nonce, simulation และคำขอลงนามที่ cache ไว้ อ่าน chain กับเป้าหมายใหม่ และ broadcast เฉพาะธุรกรรมดิบที่ตรวจทานแล้วไปยัง endpoint ที่ตรึงไว้ - กระทบยอดธุรกรรมบน chain ที่ตั้งใจ ได้แก่ signed raw bytes กับ hash, การยอมรับของ RPC, สถานะ receipt, เลขและ hash ของบล็อก การใช้ nonce, การเปลี่ยน state และ finality ที่ต้องการ เฝ้าระวัง chain split, การเปลี่ยน ID, ความสับสนระหว่างโดเมน L1/L2 และ provider drift แล้วหยุดเมื่อพบความแตกต่างที่อธิบายไม่ได้
ตัวอย่างคำนวณ
- ด่านตรวจค่า RPC ฐานสิบหกและฐานสิบ Base มี chain ID ฐานสิบเป็น
8453ซึ่งeth_chainIdแสดงเป็น0x2105:2 * 4096 + 1 * 256 + 0 * 16 + 5 = 8453ส่วน Ethereum mainnet คือ1 = 0x1และ Arbitrum One คือ42161 = 0xa4b1หากกระเป๋าเงินคาดว่าเป็น8453แต่ได้รับ0x1ต้องยกเลิกก่อนลงนามแทนที่จะเชื่อชื่อเครือข่ายที่แสดง - ค่า v ของธุรกรรม legacy ที่มีการป้องกัน สำหรับธุรกรรม legacy ตาม EIP-155 ใช้
v = 35 + 2 * chainId + yParityเมื่อ chain ID เป็น1ค่าจะเป็น37หรือ38และเมื่อ chain ID เป็น61ค่าจะเป็น157หรือ158ในทางกลับกันfloor((37 - 35) / 2) = 1การคำนวณนี้ใช้ไม่ได้กับ field y-parity ของธุรกรรมแบบ typed หรือกับลายเซ็น legacy ที่ไม่มีการป้องกันซึ่งใช้27หรือ28 - ธุรกรรมแบบ typed และการปฏิเสธบน chain ที่ผิด payload แบบ type 2 ผูกกับ
chain_id=8453เมื่อมี21,000 gas, base fee20 gwei, maximum priority fee2 gweiและ maximum fee30 gweiราคา gas ที่ใช้จริงคือmin(30, 20 + 2) = 22 gweiและค่าธรรมเนียมคือ21,000 * 22 gwei = 0.000462 ETHchain ที่บังคับใช้กฎอย่างถูกต้องและกำหนด ID เป็น1จะปฏิเสธ payload ที่ลงนามนี้เพราะโดเมนไม่ตรง ดังนั้นการปฏิเสธเองจึงไม่ใช้ gas บน chain นั้น แต่ธุรกรรมยังอาจล้มเหลวด้วยเหตุผลอื่นบน ID 8453 - ระบบที่ไม่ใช่ EVM และตัวระบุสองชุด การติดตั้ง Cosmos EVM อาจใช้ ID แบบ string ของ Cosmos SDK เป็น
local-1และ ID แบบจำนวนเต็มของ EVM ที่เป็นอิสระเป็น262144 = 0x40000การลงนามแบบ native ของ Cosmos ใช้ string ร่วมกับ account number และ sequence ส่วนการลงนามธุรกรรม EVM ใช้โดเมนจำนวนเต็ม ขณะที่ Solana เปิดเผย genesis hash และใช้ recent blockhash หรือ durable nonce ในข้อความธุรกรรม ไม่ได้ใช้จำนวนเต็ม EIP-155
ความเสี่ยง
- เชื่อมต่อ RPC endpoint ผิดหรืออยู่บน chain ของกระเป๋าเงินที่ไม่ตั้งใจใช้
- เชื่อ RPC ที่ประสงค์ร้ายซึ่งรายงาน chain ID, state หรือผล broadcast เป็นเท็จ
- สับสนระหว่างการแสดง chain ID แบบฐานสิบหกกับฐานสิบ
- สูญเสียความแม่นยำจากการแปลง chain ID ขนาดใหญ่ด้วยชนิดตัวเลขที่ไม่ปลอดภัย
- ใช้
net_versionราวกับว่าเท่ากับeth_chainIdเสมอ - พลาด event EIP-1193
chainChangedหรือเกิด race ระหว่างสลับเครือข่าย - ใช้ nonce, quote, approval หรือ simulation ที่ cache ไว้ซ้ำหลังสลับเครือข่าย
- สมมติว่า chain ID มีทะเบียนกลางและไม่ชนกัน
- ลงนามข้ามเครือข่ายส่วนตัวหรือ fork ที่ใช้ chain ID เดียวกันซ้ำ
- ไม่กำหนดวิธีรับมือเมื่อ fork เปลี่ยนหรือคง ID เดิม
- ยอมรับธุรกรรม legacy ที่ไม่มีการป้องกันและไม่มีโดเมน EIP-155
- นำสูตร legacy
vไปใช้กับธุรกรรมแบบ typed หรือลายเซ็นชนิดอื่น - สมมติว่าข้อความดิบหรือคำขอ
personal_signมีโดเมนของ chain - ไม่ใส่หรือเข้ารหัส chain ID ผิดในโดเมน EIP-712
- ไม่ใส่
verifyingContract, nonce ของแอปพลิเคชัน deadline หรือวัตถุประสงค์ - เชื่อ address ของสัญญาที่เหมือนกันโดยไม่เปรียบเทียบ code และ state
- สับสนโดเมนการลงนามของ L1, L2, ต้นทางบริดจ์ และปลายทาง
- มองข้ามโดเมนภายในของ intent ที่ส่งผ่าน relayer, permit หรือการทำงานของ smart account
- ถือว่า metadata การเพิ่มเครือข่าย ป้ายของ explorer หรือไอคอนเป็นการยืนยันตัวตนเครือข่าย
- นำความหมายของ EVM ไปใช้กับ Cosmos, Solana, Bitcoin หรือโปรโตคอลอื่น
ความเข้าใจผิดที่พบบ่อย
- Chain ID เป็นหมายเลขทะเบียนทางการที่ไม่ซ้ำกันทั่วโลกและคงอยู่ถาวร
- Chain ID ที่ถูกต้องพิสูจน์ว่า RPC endpoint เครือข่าย และสัญญาเป็นของแท้
- ลายเซ็น Ethereum ทุกแบบผูกกับ chain ID โดยอัตโนมัติ
- Chain ID ที่ต่างกันป้องกัน replay ของข้อความที่ลงนามและ intent ของแอปพลิเคชันได้ทุกชนิด
- บล็อกเชนทุกเครือข่ายใช้ chain ID แบบจำนวนเต็มตาม EIP-155
หัวข้อที่เกี่ยวข้อง
แหล่งข้อมูล
- EIP-155: Simple replay attack protection - Ethereum Improvement Proposals (เข้าถึง: 2026-08-12)
- EIP-1559: Fee market change for ETH 1.0 chain - Ethereum Improvement Proposals (เข้าถึง: 2026-08-12)
- EIP-1344: ChainID opcode - Ethereum Improvement Proposals (เข้าถึง: 2026-08-12)
- EIP-1193: Ethereum Provider JavaScript API - Ethereum Improvement Proposals (เข้าถึง: 2026-08-12)
- EIP-3085: wallet_addEthereumChain RPC Method - Ethereum Improvement Proposals (เข้าถึง: 2026-08-12)
- EIP-712: Typed structured data hashing and signing - Ethereum Improvement Proposals (เข้าถึง: 2026-08-12)
- CAIP-2: Blockchain ID Specification - Chain Agnostic Improvement Proposals (เข้าถึง: 2026-08-12)
- getGenesisHash RPC Method - Solana Documentation (เข้าถึง: 2026-08-12)