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 numbererror- 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: 2839099Error 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())
