Skip to content

TransactionReceipt

Gets the receipt of a transaction by its hash, showing execution results and resource consumption.

Method Signature

func (provider *Provider) TransactionReceipt(ctx context.Context, transactionHash *felt.Felt) (*TransactionReceiptWithBlockInfo, error)

Parameters

  • ctx - Context for request cancellation and timeout
  • transactionHash - Transaction hash as a felt.Felt

Returns

  • *TransactionReceiptWithBlockInfo - Transaction receipt with execution details
  • error - Error if the request fails

Usage Example

package main
 
import (
    "context"
    "encoding/json"
    "fmt"
    "log"
	"os"
 
    "github.com/NethermindEth/starknet.go/rpc"
    "github.com/NethermindEth/juno/core/felt"
)
 
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)
    }
 
    // Use a known transaction hash to get its receipt
    txHashStr := "0x6dda0d2e2716227b87d912d654e1bc8b96441f043c29834e082413ae1320afa"
    txHash, err := new(felt.Felt).SetString(txHashStr)
    if err != nil {
        log.Fatal("Failed to parse transaction hash:", err)
    }
 
    // Get transaction receipt
    receipt, err := client.TransactionReceipt(ctx, txHash)
    if err != nil {
        log.Fatal("Failed to get transaction receipt:", err)
    }
 
    // Pretty print the full receipt
    receiptJSON, err := json.MarshalIndent(receipt, "", "  ")
    if err != nil {
        log.Fatal("Failed to marshal receipt:", err)
    }
 
    fmt.Printf("Transaction receipt:\n%s\n", receiptJSON)
}

Expected Output

{
  "transaction_hash": "0x6dda0d2e2716227b87d912d654e1bc8b96441f043c29834e082413ae1320afa",
  "type": "INVOKE",
  "actual_fee": {
    "amount": "0x627bebf0c73a80",
    "unit": "FRI"
  },
  "finality_status": "ACCEPTED_ON_L1",
  "messages_sent": [],
  "events": [
    {
      "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
      "keys": [
        "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"
      ],
      "data": [
        "0x19ec96d4aea6fdc6f0b5f393fec3f186aefa8f0b8356f43d07b921ff48aa5da",
        "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",
        "0x627bebf0c73a80",
        "0x0"
      ]
    }
  ],
  "execution_resources": {
    "l1_gas": 0,
    "l1_data_gas": 128,
    "l2_gas": 9240267
  },
  "execution_status": "REVERTED",
  "revert_reason": "Transaction execution has failed:\n0: Error in the called contract (contract address: 0x019ec96d4aea6fdc6f0b5f393fec3f186aefa8f0b8356f43d07b921ff48aa5da, class hash: 0x079a9a12fdfa0481e8d8d46599b90226cd7247b2667358bb00636dd864002314, selector: 0x015d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad):\nExecution failed. Failure reason:\nError in contract (contract address: 0x019ec96d4aea6fdc6f0b5f393fec3f186aefa8f0b8356f43d07b921ff48aa5da, class hash: 0x079a9a12fdfa0481e8d8d46599b90226cd7247b2667358bb00636dd864002314, selector: 0x015d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad):\nError in contract (contract address: 0x036970a65c6b1e9e2d85e724a1517ee6a9a7c106fcc2c8f384ed839c1176e5c0, class hash: 0x068bd2daa00cf3fe305174a053db9d7b0d526d16fedf84156041ff76cc65286a, selector: 0x00ab6bbf074217bd209077ef38d1fe65034d0327dbceeb5dc94a0d7050798c99):\n0x494e56414c49445f535441524b5f4b45595f5349474e4154555245 ('INVALID_STARK_KEY_SIGNATURE').\n",
  "block_hash": "0x66fa94498a5413e02d11aeb8646d4d47f1c2a067d8dbe3e33b2f0e8bb7f31df",
  "block_number": 1675853
}

This example shows a reverted transaction receipt with execution status, fees paid (even though reverted), events emitted, and detailed revert reason.

Error Handling

receipt, err := client.TransactionReceipt(ctx, txHash)
if err != nil {
    log.Printf("Error getting receipt: %v", err)
    return
}
 
// Check if transaction was successful
if receipt.ExecutionStatus == "REVERTED" {
    fmt.Printf("Transaction failed: %s\n", receipt.RevertReason)
} else {
    fmt.Printf("Transaction succeeded, fee: %s\n", receipt.ActualFee.Amount)
}