Skip to content

GetMessagesStatus

Gets the status of messages sent from Ethereum (L1) to Starknet (L2) by a specific L1 transaction.

Note: This method will be renamed to MessagesStatus in a future version to align with the Starknet RPC specification.

Method Signature

func (provider *Provider) GetMessagesStatus(ctx context.Context, transactionHash NumAsHex) ([]MessageStatus, error)

Parameters

  • ctx - Context for request cancellation and timeout
  • transactionHash - The Ethereum (L1) transaction hash that sent messages to Starknet

Returns

  • []MessageStatus - Array of message status information
  • error - Error if the request fails

Usage Example

package main
 
import (
    "context"
    "encoding/json"
    "fmt"
    "log"
	"os"
 
    "github.com/NethermindEth/starknet.go/rpc"
)
 
func main() {
    // Create RPC client
	// 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)
    }
 
    // Note: This requires an L1 Ethereum transaction hash that sent messages to Starknet
    // Most regular Starknet transactions don't have associated L1 messages
    // Using a placeholder - you'd need a real L1->L2 message transaction (e.g., from StarkGate bridge)
    l1TxHashStr := "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
 
    // Convert to NumAsHex
    var l1TxHash rpc.NumAsHex
    l1TxHash = rpc.NumAsHex(l1TxHashStr)
 
    // Get messages status
    messagesStatus, err := client.GetMessagesStatus(ctx, l1TxHash)
    if err != nil {
        fmt.Printf("GetMessagesStatus error: %v\n", err)
        fmt.Println("\nNote: MessagesStatus is for L1->L2 messaging.")
        fmt.Println("It requires an Ethereum transaction hash that sent messages to Starknet.")
        fmt.Println("Regular Starknet transactions will return an error.")
        return
    }
 
    // Pretty print the result (only reached with valid L1->L2 message transaction)
    statusJSON, err := json.MarshalIndent(messagesStatus, "", "  ")
    if err != nil {
        log.Fatal("Failed to marshal status:", err)
    }
 
    fmt.Printf("Messages status:\n%s\n", statusJSON)
}

Expected Output

GetMessagesStatus error: 29 Transaction hash not found
 
Note: MessagesStatus is for L1->L2 messaging.
It requires an Ethereum transaction hash that sent messages to Starknet.
Regular Starknet transactions will return an error.

Error Handling

messagesStatus, err := client.GetMessagesStatus(ctx, l1TxHash)
if err != nil {
    // Handle error - likely "Transaction hash not found" if not an L1->L2 message
    return err
}