Imagine este escenario, tengo un contrato que tiene una función a la que llamo con runtime.Call().
Pero esta función devuelve una dirección de un contrato recién creado, pero no el código de bytes como lo hace runtime.Create.
¿Cómo accedería a ese código de bytes?
¡¡Gracias!!
¡Sí, lo es! Utilice el CodeAt
método de cliente del ethclient
paquete para leer el código de bytes de un contrato inteligente implementado. Aquí hay un ejemplo completo:
package main
import (
"context"
"encoding/hex"
"fmt"
"log"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, err := ethclient.Dial("https://rinkeby.infura.io")
if err != nil {
log.Fatal(err)
}
contractAddress := common.HexToAddress("0x147B8eb97fD247D06C4006D269c90C1908Fb5D54")
bytecode, err := client.CodeAt(context.Background(), contractAddress, nil) // nil is latest block
if err != nil {
log.Fatal(err)
}
fmt.Println(hex.EncodeToString(bytecode)) // 60806...10029
}
Será el mismo resultado que se ve en etherscan
Raghav Sood
jonathan gimeno
Raghav Sood
geth dump 0
volcar el trie de estado del bloque de génesis, que contendrá el código y los saldos de cada cuenta.Nulik
extra data
, también llamadoinput
cuando se ejecuta evm.Call().