Files
explorer-monorepo/docs/TRANSACTION_FAILURE_ANALYSIS.md

5.0 KiB

Transaction Failure Analysis - ChainID 138

Date: 2025-01-12
Transaction: 0x4dc9f5eedf580c2b37457916b04048481aba19cf3c1a106ea1ee9eefa0dc03c8


Executive Summary

Status: Transaction FAILED (status 0x0)
Gas Used: 10,000,000 (ALL available gas consumed)
Contract Address: 0x9a1d0dbee997929ed02fd19e0e199704d20914db (assigned but contract not deployed)

Key Finding: Contract address was assigned, indicating CREATE opcode executed, but deployment failed during constructor execution.


Transaction Details

Receipt Information

  • Block Number: 0x28467 (165,991)
  • Block Hash: 0x0d9ff3e108d8e97ad33aedbdce084f999ed154f384d8f545f14dfcaecb2e5b5c
  • Status: 0x0 (FAILED)
  • Gas Used: 0x989680 (10,000,000)
  • Gas Limit: 0x989680 (10,000,000)
  • Gas Price: 0x4a817c800 (20 gwei)
  • Contract Address: 0x9a1d0dbee997929ed02fd19e0e199704d20914db
  • Logs: Empty array (no events emitted)
  • Transaction Index: 0x0

Transaction Information

  • From: 0x4a666f96fc8764181194447a7dfdb7d471b301c8
  • To: null (contract creation)
  • Value: 0x0
  • Input: Contract creation bytecode (~4.7KB)
  • Nonce: 0x2d (45)
  • ChainID: 0x8a (138)

Critical Observations

1. Contract Address Was Assigned

  • Address: 0x9a1d0dbee997929ed02fd19e0e199704d20914db
  • Implication: CREATE opcode executed successfully
  • Meaning: Network allows contract creation at the opcode level

2. All Gas Was Consumed

  • Gas Limit: 10,000,000
  • Gas Used: 10,000,000
  • Implication: Transaction ran out of gas during execution
  • Note: This is unusual for a standard ERC20 contract

3. No Logs Emitted

  • Logs Array: Empty
  • Implication: Constructor didn't complete successfully
  • Meaning: Failure occurred before any events could be emitted

4. DEBUG API Not Enabled ⚠️

  • Error: "Method not enabled"
  • Implication: Cannot get revert reason
  • Solution: Enable DEBUG API in Besu configuration

Possible Causes

1. Constructor Revert

  • Constructor code may contain a revert condition
  • Network state may cause constructor to fail
  • Contract bytecode appears valid (standard ERC20)

2. Network-Level Restriction

  • Network may restrict contract creation after CREATE opcode
  • Validators may reject contract creation transactions
  • Network policy may prevent certain contract deployments

3. Gas Limit Restriction

  • Network may have effective gas limit lower than block limit
  • Contract execution may require more gas than available
  • 10M gas should be sufficient for standard ERC20

4. Contract Size Limit

  • Bytecode is ~4.7KB (well under 24KB EIP-170 limit)
  • Network may have stricter size limits
  • Contract may exceed network-specific limits

5. Network State Issue

  • Network state may be corrupted
  • Validator consensus may reject contract creation
  • Network configuration may prevent deployments

Diagnostic Steps

Step 1: Check Contract Code at Address

curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0x9a1d0dbee997929ed02fd19e0e199704d20914db","latest"],"id":1}' \
  http://localhost:8545 | jq

Expected: Should return 0x (empty) if contract doesn't exist, or bytecode if it does.

Step 2: Enable DEBUG API

Edit /etc/besu/config-rpc-core.toml:

rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN","DEBUG","TRACE"]

Restart Besu:

systemctl restart besu-rpc

Then get revert reason:

curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0x4dc9f5eedf580c2b37457916b04048481aba19cf3c1a106ea1ee9eefa0dc03c8",{"tracer":"callTracer"}],"id":1}' \
  http://localhost:8545 | jq

Step 3: Check Block Details

curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x28467",true],"id":1}' \
  http://localhost:8545 | jq

Step 4: Try Higher Gas Limit

If possible, try deploying with higher gas limit (15M or 20M) to see if it's a gas issue.


Recommendations

  1. Enable DEBUG API to get revert reason
  2. Check contract code at assigned address
  3. Verify network configuration for contract creation restrictions
  4. Check validator logs for rejection reasons
  5. Try deploying from validator node (may have different permissions)
  6. Contact network administrators with this analysis

Conclusion

The transaction failure is unusual because:

  • Contract address was assigned (CREATE executed)
  • All gas was consumed (suggests execution failure)
  • No logs emitted (constructor didn't complete)

This pattern suggests a network-level restriction or validator-level rejection that occurs after the CREATE opcode executes but during constructor execution.

Next Step: Enable DEBUG API to get the exact revert reason.


Last Updated: 2025-01-12