Skip to content

BlockHashAndNumber

Gets both the hash and number of the most recent block in a single call.

Method Signature

func (provider *Provider) BlockHashAndNumber(ctx context.Context) (*BlockHashAndNumberOutput, error)

Parameters

  • ctx - Context for request cancellation and timeout

Returns

  • *BlockHashAndNumberOutput - Contains both block hash and number
  • error - Error if the request fails

BlockHashAndNumberOutput Structure

type BlockHashAndNumberOutput struct {
    Number uint64      `json:"block_number,omitempty"`
    Hash   *felt.Felt  `json:"block_hash,omitempty"`
}

Usage Example

package main
 
import (
    "context"
    "fmt"
    "log"
    "os"
 
    "github.com/NethermindEth/starknet.go/rpc"
)
 
func main() {
    // Get RPC URL from environment variable
    rpcURL := os.Getenv("STARKNET_RPC_URL")
    if rpcURL == "" {
        log.Fatal("STARKNET_RPC_URL not set in environment")
    }
 
    ctx := context.Background()
    client, err := rpc.NewProvider(ctx, rpcURL)
    if err != nil {
        log.Fatal("Failed to create client:", err)
    }
 
    // Get latest block hash and number
    result, err := client.BlockHashAndNumber(ctx)
    if err != nil {
        log.Fatal("Failed to get block hash and number:", err)
    }
 
    fmt.Printf("Block Hash: %s\n", result.Hash)
    fmt.Printf("Block Number: %d\n", result.Number)
}

Expected Output

Block Hash: 0x67d8d68632c6cb5224d563fea06d6a0814f005378c9e041bb0548cacbd67bb0
Block Number: 2839099

Error Handling

result, err := client.BlockHashAndNumber(ctx)
if err != nil {
    log.Printf("Error getting block info: %v", err)
    return
}
 
// Check if values are present
if result.Hash == nil {
    log.Printf("Block hash is nil")
    return
}
 
fmt.Printf("Block: %d, Hash: %s\n", result.Number, result.Hash.String())