Files
proxmox/reports/status/BESU_TRANSACTION_SOLUTION_COMPLETE.md
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

6.3 KiB

Besu Transaction Solution - Complete

Date: 2026-01-27
Status: VERIFIED AND DOCUMENTED


Verification Results

Test Results Summary

All Besu RPC nodes have been verified:

Test Result
eth_sendRawTransaction available YES - All nodes
eth_sendTransaction supported NO - As expected
Method validation working YES - Proper error handling
RPC nodes operational YES - All 10 nodes

Verified RPC Nodes

  • VMID 2400 (192.168.11.240) - thirdweb-rpc-1
  • VMID 2401 (192.168.11.241) - thirdweb-rpc-2
  • VMID 2402 (192.168.11.242) - thirdweb-rpc-3
  • VMID 2500 (192.168.11.250) - besu-rpc-1
  • VMID 2501 (192.168.11.251) - besu-rpc-2
  • VMID 2502 (192.168.11.252) - besu-rpc-3
  • VMID 2505 (192.168.11.201) - besu-rpc-luis-0x8a
  • VMID 2506 (192.168.11.202) - besu-rpc-luis-0x1
  • VMID 2507 (192.168.11.203) - besu-rpc-putu-0x8a
  • VMID 2508 (192.168.11.204) - besu-rpc-putu-0x1

📁 Files Created

1. Investigation Scripts

scripts/investigate-rpc-transaction-failures.sh

  • Comprehensive investigation of all RPC nodes
  • Checks logs, transaction pool, recent blocks
  • Identifies transaction failure patterns

scripts/check-rpc-transaction-blocking.sh

  • Checks account permissioning configuration
  • Verifies minimum gas price settings
  • Reviews transaction rejection logs

scripts/test-simple-transfer.sh

  • Tests simple transfer functionality
  • Identifies why transfers fail without hash

2. Verification Scripts

scripts/test-eth-sendrawtransaction.sh

  • Verifies eth_sendRawTransaction is available
  • Confirms eth_sendTransaction is NOT supported
  • Tests method validation and error handling

3. Example Code

scripts/example-send-signed-transaction.js (Node.js)

  • Complete example using ethers.js
  • Shows how to sign and send transactions
  • Includes error handling

scripts/example-send-signed-transaction.py (Python)

  • Complete example using web3.py
  • Shows how to sign and send transactions
  • Includes error handling

4. Documentation

RPC_TRANSACTION_FAILURE_ROOT_CAUSE.md

  • Root cause analysis
  • Solution explanation
  • Code examples for different libraries

RPC_TRANSACTION_FAILURE_INVESTIGATION.md

  • Initial investigation findings
  • Possible failure scenarios
  • Next steps guide

🚀 Quick Start Guide

For JavaScript/Node.js Applications

Install dependencies:

npm install ethers
# or
npm install web3

Using ethers.js (Recommended):

const { ethers } = require('ethers');

const provider = new ethers.providers.JsonRpcProvider('http://192.168.11.250:8545');
const wallet = new ethers.Wallet('0x<private_key>', provider);

// Send transaction (ethers automatically signs)
const tx = await wallet.sendTransaction({
    to: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
    value: ethers.utils.parseEther('0.01')
});

console.log('Transaction hash:', tx.hash);
const receipt = await tx.wait();
console.log('Transaction confirmed in block:', receipt.blockNumber);

Using web3.js:

const Web3 = require('web3');
const web3 = new Web3('http://192.168.11.250:8545');

const account = web3.eth.accounts.privateKeyToAccount('0x<private_key>');
web3.eth.accounts.wallet.add(account);

const tx = {
    from: account.address,
    to: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
    value: web3.utils.toWei('0.01', 'ether'),
    gas: 21000,
    gasPrice: await web3.eth.getGasPrice(),
    nonce: await web3.eth.getTransactionCount(account.address)
};

const signedTx = await account.signTransaction(tx);
const receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);
console.log('Transaction hash:', receipt.transactionHash);

For Python Applications

Install dependencies:

pip install web3 eth-account

Using web3.py:

from web3 import Web3
from eth_account import Account

w3 = Web3(Web3.HTTPProvider('http://192.168.11.250:8545'))
account = Account.from_key('0x<private_key>')

tx = {
    'to': '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
    'value': Web3.toWei(0.01, 'ether'),
    'gas': 21000,
    'gasPrice': w3.eth.gas_price,
    'nonce': w3.eth.get_transaction_count(account.address),
    'chainId': w3.eth.chain_id
}

signed_txn = account.sign_transaction(tx)
tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
print(f'Transaction hash: {tx_hash.hex()}')

receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
print(f'Transaction confirmed in block: {receipt.blockNumber}')

🔍 Testing

Run Verification Test

cd /home/intlc/projects/proxmox
./scripts/test-eth-sendrawtransaction.sh

Expected Output:

  • eth_sendRawTransaction is available on all nodes
  • eth_sendTransaction is NOT supported (as expected)
  • Method validation working correctly

Test with Example Scripts

Node.js:

node scripts/example-send-signed-transaction.js \
  http://192.168.11.250:8545 \
  0x<private_key> \
  0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb \
  0.01

Python:

python3 scripts/example-send-signed-transaction.py \
  http://192.168.11.250:8545 \
  0x<private_key> \
  0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb \
  0.01

📋 Key Points

What Works

  1. eth_sendRawTransaction - Fully supported
  2. Signed transactions - Required and working
  3. All RPC nodes - Operational and accepting transactions
  4. Transaction validation - Working correctly

What Doesn't Work

  1. eth_sendTransaction - NOT supported (by design)
  2. Unsigned transactions - Will be rejected
  3. Account unlocking - Not supported in Besu

🎯 Summary

Problem: Simple transfers failing without getting a hash
Root Cause: Clients using eth_sendTransaction which Besu doesn't support
Solution: Use eth_sendRawTransaction with pre-signed transactions
Status: VERIFIED - All RPC nodes working correctly


📚 Additional Resources

  • Root Cause Document: RPC_TRANSACTION_FAILURE_ROOT_CAUSE.md
  • Investigation Report: RPC_TRANSACTION_FAILURE_INVESTIGATION.md
  • Besu Documentation: https://besu.hyperledger.org/

Last Updated: 2026-01-27
Status: COMPLETE - SOLUTION VERIFIED