¿Cómo puedo (eficientemente) ver programáticamente si estoy en una cadena ETH o ETC?

si tengo 2 nodos, uno ETH y otro ETC, y estoy escribiendo un programa para usar estos nodos, ¿cómo puedo determinar qué nodo estoy usando en un momento dado?

lo mejor que se me ocurre es verificar un bloque conocido después de la bifurcación y simplemente comparar el número de tx. Sé cuántos tx hay en ese bloque en ambas cadenas, así que puedo diferenciarlos de esa manera.

esto parece torpe. ¿Hay una mejor manera de hacer esto?

Editar: esto no es un duplicado de "¿ETH y ETC usan la misma ID de red?" porque no estoy preguntando sobre la identificación de la red. estoy preguntando acerca de la red en su conjunto. eth/etc comparte una identificación de red 1para la red principal.

¿ Hace net_versionel truco?
@smarx Creo que Ethereum y Ethereum classic tienen la misma identificación de red
Bien, entonces mi sugerencia no ayudará. Pero no creo que esta pregunta sea un duplicado de la indicada. (Ese tampoco parece tener una respuesta a esta pregunta).
net_versionrendimientos 1para ambos (como se esperaba). ¿No hay forma de hacerlo además de la forma en que lo describí (comparando 2 bloques conocidos)?

Respuestas (2)

Puede extraer los datos del bloque para el bloque 1920000 usando web3. Este es el bloque de bifurcación dao, por lo que el hash del bloque será diferente.

ETC es 0x94365e3a8c0b35089c1d1195081fe7489b528a84b22199c916180db8b28ade7f

ETH es 0x4985f5ca3d2afbec36529aa96f74de3cc10a2a4a6c44f2157a57d2c6059a11bb

Como dijeron los demás en los comentarios, no parece que ningún comando RPC haga el trabajo, pero si su script/programa tiene acceso a la máquina donde se está ejecutando Geth (quizás sobre), puede intentar grepping los registros o sshmatar y reiniciando Geth para obtener la salida del registro.

(Habiendo dicho eso, si tiene acceso a la máquina, el datadirnombre revela el juego de todos modos: .ethereum-classicvs. .ethereum, a menos que se haya especificado manualmente un nombre no predeterminado en el arranque del nodo).

ETC:

$ cat /home/richard/.ethereum-classic/mainnet/log/geth.INFO | grep chainID
I1201 18:56:27.326033 cmd/geth/flag.go:767]         chainID: 61

ETH:

No hay un archivo similar al anterior, pero al reiniciar Geth:

INFO [12-01|19:09:25.456] Initialised chain configuration  config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: <nil> Engine: ethash}"

(Supongo, quizás incorrectamente, que en el caso de ETH chainID equivale a la identificación de la cadena y no a la identificación de la red. De cualquier manera, la ausencia de un archivo de registro que pueda grep le permitirá deducir que es ETH y no ETC).