TransactionStatus
Gets the transaction status, including finality status and execution status. This method can reflect if the transaction is still in the mempool or has been dropped from it.
Method Signature
func (provider *Provider) TransactionStatus(
ctx context.Context,
transactionHash *felt.Felt,
) (*TxnStatusResult, error)Source: transaction.go
Parameters
ctx(context.Context): Context for request cancellation and timeouttransactionHash(*felt.Felt): The transaction hash to get the status for
Returns
*TxnStatusResult: Transaction status result with finality and execution statuserror: Error if the request fails
Type Definitions
TxnStatusResult
type TxnStatusResult struct {
FinalityStatus TxnStatus `json:"finality_status"`
ExecutionStatus TxnExecutionStatus `json:"execution_status,omitempty"`
// the failure reason, only appears if execution_status is REVERTED
FailureReason string `json:"failure_reason,omitempty"`
}Source: types_transaction_receipt.go
Usage Example
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/NethermindEth/juno/core/felt"
"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)
}
ctx := context.Background()
// Get a transaction hash from the latest block
blockID := rpc.WithBlockTag("latest")
blockResult, err := provider.BlockWithTxHashes(ctx, blockID)
if err != nil {
log.Fatal(err)
}
block, ok := blockResult.(*rpc.BlockTxHashes)
if !ok {
log.Fatal("Unexpected block type")
}
if len(block.Transactions) == 0 {
log.Fatal("No transactions in latest block")
}
txHash := block.Transactions[0]
// Get transaction status
status, err := provider.TransactionStatus(ctx, txHash)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Transaction Hash: %s\n", txHash)
fmt.Printf("Finality Status: %s\n", status.FinalityStatus)
fmt.Printf("Execution Status: %s\n", status.ExecutionStatus)
if status.FailureReason != "" {
fmt.Printf("Failure Reason: %s\n", status.FailureReason)
}
}Error Handling
status, err := provider.TransactionStatus(ctx, txHash)
if err != nil {
if errors.Is(err, rpc.ErrHashNotFound) {
log.Printf("Transaction hash not found: %s", txHash)
return
}
log.Printf("Error getting transaction status: %v", err)
return
}
// Check execution status
if status.ExecutionStatus == rpc.TxnExecutionStatusREVERTED {
fmt.Printf("Transaction reverted: %s\n", status.FailureReason)
} else if status.ExecutionStatus == rpc.TxnExecutionStatusSUCCEEDED {
fmt.Printf("Transaction succeeded with finality: %s\n", status.FinalityStatus)
}Common Use Cases
- Monitoring transaction finality progression from mempool to L1 finalization.
- Checking if a transaction succeeded or reverted before proceeding.

