Skip to content

BlockNumber

Gets the number (height) of the most recently accepted block on Starknet. The block number (also called block height) starts from 0 (genesis block) and increments with each new block.

Method Signature

func (provider *Provider) BlockNumber(ctx context.Context) (uint64, error)

Source: block.go

Parameters

  • ctx (context.Context): Context for request cancellation and timeout

Returns

  • uint64: The latest block number (height)
  • error: Error if the request fails

Usage Example

package main
 
import (
    "context"
    "fmt"
    "log"
    "os"
 
    "github.com/NethermindEth/starknet.go/rpc"
    "github.com/joho/godotenv"
)
 
func main() {
    // Load environment variables from .env file
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }
 
    // Get RPC URL from environment variable
    rpcURL := os.Getenv("STARKNET_RPC_URL")
    if rpcURL == "" {
        log.Fatal("STARKNET_RPC_URL not found in .env file")
    }
 
    // Initialize provider
    provider, err := rpc.NewProvider(context.Background(), rpcURL)
    if err != nil {
        log.Fatal(err)
    }
 
    // Get latest block number
    blockNumber, err := provider.BlockNumber(context.Background())
    if err != nil {
        log.Fatal(err)
    }
 
    fmt.Printf("Latest block number: %d\n", blockNumber)
}

Error Handling

blockNumber, err := provider.BlockNumber(ctx)
if err != nil {
    switch {
    case errors.Is(err, rpc.ErrNoBlocks):
        log.Println("There are no blocks")
    default:
        log.Printf("RPC error: %v", err)
    }
    return
}
 
fmt.Printf("Block number: %d\n", blockNumber)

Common Use Cases

  • Polling the network at regular intervals to track new blocks. See example.
  • Waiting until the network reaches a specific block height before proceeding. See example.
  • Keep your application in sync with the latest blockchain state.
  • Determine when to submit transactions based on network activity.