Ich habe einen privaten lokalen Ethereum-Knoten mit nur einem von mir erstellten Genesis-Block eingerichtet, und ich habe diesen Go-Code, den ich im privaten lokalen Netzwerk ausführen möchte:
package main
import (
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/rpc"
)
type Block struct {
Number *big.Int
}
func main() {
// Connect the client
client, err := rpc.Dial("http://localhost:8000")
if err != nil {
panic(err)
}
var lastBlock Block
if err := client.Call(&lastBlock,
"eth_getBlockByNumber",
"latest"); err != nil {
fmt.Println("can't get latest block:", err)
return
}
// Print events from the subscription as they arrive.
fmt.Println("latest block:", lastBlock.Number)
}
Es lässt sich gut kompilieren, aber wenn ich es ausführe, erhalte ich diesen Fehler:can't get latest block: missing value for required argument 1
Ich übergebe "latest"
, was laut Dokumentation ein gültiges Argument für den RPC - Aufruf ist .
Ich habe die Fehlerausgabe in dieser Datei aufgespürt und es scheint, dass die Zeichenfolge konvertiert wird nil
und der RPC-Aufruf fehlschlägt. Weiß jemand, was hier los ist oder wie man dieses seltsame Problem beheben kann?
Ich habe es zum Laufen gebracht, indem ich einen true
Parameter hinzugefügt err = client.Call(&lastBlock, "eth_getBlockByNumber", "latest", true)
und zu geändert *bit.Int
habestring
So was:
package main
import(
"fmt"
"log"
"github.com/ethereum/go-ethereum/rpc"
)
type Block struct {
Number string
}
func main() {
// Connect the client
client, err := rpc.Dial("http://localhost:8000")
if err != nil {
log.Fatalf("could not create ipc client: %v", err)
}
var lastBlock Block
err = client.Call(&lastBlock, "eth_getBlockByNumber", "latest", true)
if err != nil {
fmt.Println("can't get latest block:", err)
return
}
// Print events from the subscription as they arrive.
fmt.Printf("latest block: %v\n", lastBlock.Number)
}
Das Ergebnis sollte in Hexa sein (wie 0x5c67)