Files
explorer-monorepo/docs/TRANSACTION_FAILURE_ANALYSIS.md

162 lines
5.0 KiB
Markdown

# 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
```bash
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`:
```toml
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN","DEBUG","TRACE"]
```
Restart Besu:
```bash
systemctl restart besu-rpc
```
Then get revert reason:
```bash
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
```bash
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