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
- Enable DEBUG API to get revert reason
- Check contract code at assigned address
- Verify network configuration for contract creation restrictions
- Check validator logs for rejection reasons
- Try deploying from validator node (may have different permissions)
- 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