ChainId y NetworkId de Ethereum
ChainId es un identificador introducido por EIP-155 para distinguir diferentes cadenas EVM. Como se muestra en la figura siguiente, la función principal es evitar que una transacción se envíe repetidamente en diferentes cadenas después de la firma. Inicialmente, fue principalmente para evitar que las transacciones de Ethereum se reprodujeran en la red Ethereum Classic o que las transacciones de Ethereum Classic se reprodujeran en la red Ethereum. En la red Ethereum, se activó desde el bloque 2675000 a través de la actualización del hard fork Spurious Dragon.
¿Qué impacto ha traído la introducción de ChainId?
NetworkId se utiliza principalmente para identificar la red blockchain actual en la capa de red. Dos nodos con NetworkId inconsistente no pueden establecer una conexión.
NetworkId no se puede especificar a través del archivo de configuración. Se puede especificar a través del parámetro --networkid. Entonces, cuando iniciamos nuestro propio nodo de cadena privada, debemos recordar agregar este parámetro. Si no se agrega este parámetro y no se especifica el tipo de red, el valor predeterminado de NetworkId es consistente con la red principal de Ethereum.
No.
De la introducción anterior, se puede ver claramente que los dos no están muy relacionados.
Casi todos los artículos en Internet que mencionan la construcción de una cadena privada de Ethereum enfatizan que NetworkId debe ser el mismo que el valor de ChainId en el archivo de génesis. De hecho no es necesario.
Como se muestra en la imagen siguiente, muchas cadenas EVM que ya se ejecutan en la red principal tienen diferentes ChainIds y NetworkIds. Por ejemplo, el ChainId de Ethereum Classic es 61, pero su NetworkId es 1, el mismo que el de la red principal de Ethereum.
La razón por la que muchos artículos enfatizan que ChainId y NetworkId deben ser consistentes puede ser porque durante un cierto período de tiempo, algunas herramientas de desarrollo como MetaMask usarán NetworkId como ChainId. Sin embargo, ahora MetaMask admite ChainId personalizado y Ethereum también ha agregado la API RPC "eth_chainId". Creo que el uso indebido de ambos será cada vez menor.