ethereum-go wie bekomme ich den neusten Block?

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 nilund der RPC-Aufruf fehlschlägt. Weiß jemand, was hier los ist oder wie man dieses seltsame Problem beheben kann?

Antworten (1)

Ich habe es zum Laufen gebracht, indem ich einen trueParameter hinzugefügt err = client.Call(&lastBlock, "eth_getBlockByNumber", "latest", true)und zu geändert *bit.Inthabestring

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)