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.
This commit is contained in:
125
scripts/example-send-signed-transaction.py
Executable file
125
scripts/example-send-signed-transaction.py
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Example: How to Send Signed Transactions to Besu RPC Nodes
|
||||
|
||||
This script demonstrates the correct way to send transactions to Besu,
|
||||
which requires eth_sendRawTransaction instead of eth_sendTransaction.
|
||||
|
||||
Usage:
|
||||
python3 example-send-signed-transaction.py <rpc_url> <private_key> <to_address> <amount_eth>
|
||||
|
||||
Example:
|
||||
python3 example-send-signed-transaction.py http://192.168.11.250:8545 0x<private_key> 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb 0.01
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
from web3 import Web3
|
||||
from eth_account import Account
|
||||
|
||||
def send_signed_transaction(rpc_url, private_key, to_address, amount_eth):
|
||||
"""Send a signed transaction to Besu RPC node"""
|
||||
|
||||
print("=== Besu Signed Transaction Example ===\n")
|
||||
|
||||
# 1. Connect to RPC
|
||||
print("1. Connecting to RPC node...")
|
||||
w3 = Web3(Web3.HTTPProvider(rpc_url))
|
||||
|
||||
if not w3.isConnected():
|
||||
print(f" ❌ Failed to connect to {rpc_url}")
|
||||
sys.exit(1)
|
||||
|
||||
chain_id = w3.eth.chain_id
|
||||
print(f" Chain ID: {chain_id}\n")
|
||||
|
||||
# 2. Create account from private key
|
||||
print("2. Creating account from private key...")
|
||||
account = Account.from_key(private_key)
|
||||
print(f" Address: {account.address}\n")
|
||||
|
||||
# 3. Check balance
|
||||
print("3. Checking balance...")
|
||||
balance = w3.eth.get_balance(account.address)
|
||||
balance_eth = Web3.fromWei(balance, 'ether')
|
||||
print(f" Balance: {balance_eth} ETH\n")
|
||||
|
||||
amount_wei = Web3.toWei(float(amount_eth), 'ether')
|
||||
if balance < amount_wei:
|
||||
print(f" ❌ Insufficient balance. Need {amount_eth} ETH, have {balance_eth} ETH")
|
||||
sys.exit(1)
|
||||
|
||||
# 4. Get gas price
|
||||
print("4. Getting gas price...")
|
||||
gas_price = w3.eth.gas_price
|
||||
gas_price_gwei = Web3.fromWei(gas_price, 'gwei')
|
||||
print(f" Gas Price: {gas_price_gwei} gwei\n")
|
||||
|
||||
# 5. Get nonce
|
||||
print("5. Getting transaction count (nonce)...")
|
||||
nonce = w3.eth.get_transaction_count(account.address, 'pending')
|
||||
print(f" Nonce: {nonce}\n")
|
||||
|
||||
# 6. Build transaction
|
||||
print("6. Building transaction...")
|
||||
transaction = {
|
||||
'to': to_address,
|
||||
'value': amount_wei,
|
||||
'gas': 21000, # Standard transfer
|
||||
'gasPrice': gas_price,
|
||||
'nonce': nonce,
|
||||
'chainId': chain_id
|
||||
}
|
||||
|
||||
print(f" To: {transaction['to']}")
|
||||
print(f" Value: {amount_eth} ETH")
|
||||
print(f" Gas: {transaction['gas']}")
|
||||
print(f" Gas Price: {gas_price_gwei} gwei")
|
||||
print(f" Nonce: {transaction['nonce']}")
|
||||
print(f" Chain ID: {transaction['chainId']}\n")
|
||||
|
||||
# 7. Sign transaction
|
||||
print("7. Signing transaction...")
|
||||
signed_txn = account.sign_transaction(transaction)
|
||||
print(f" ✅ Transaction signed\n")
|
||||
|
||||
# 8. Send signed transaction via eth_sendRawTransaction
|
||||
print("8. Sending signed transaction via eth_sendRawTransaction...")
|
||||
try:
|
||||
tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
|
||||
print(f" ✅ Transaction hash: {tx_hash.hex()}\n")
|
||||
except Exception as e:
|
||||
print(f" ❌ Error sending transaction: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
# 9. Wait for transaction receipt
|
||||
print("9. Waiting for transaction to be mined...")
|
||||
try:
|
||||
receipt = w3.eth.wait_for_transaction_receipt(tx_hash, timeout=120)
|
||||
|
||||
if receipt.status == 1:
|
||||
print(f" ✅ Transaction successful!")
|
||||
print(f" Block: {receipt.blockNumber}")
|
||||
print(f" Gas Used: {receipt.gasUsed}")
|
||||
else:
|
||||
print(f" ❌ Transaction failed (status: {receipt.status})")
|
||||
except Exception as e:
|
||||
print(f" ⚠️ Error waiting for receipt: {e}")
|
||||
print(f" Transaction hash: {tx_hash.hex()}")
|
||||
|
||||
print("\n=== Transaction Complete ===")
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 5:
|
||||
print("Usage: python3 example-send-signed-transaction.py <rpc_url> <private_key> <to_address> <amount_eth>")
|
||||
print("")
|
||||
print("Example:")
|
||||
print(" python3 example-send-signed-transaction.py http://192.168.11.250:8545 0x<private_key> 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb 0.01")
|
||||
sys.exit(1)
|
||||
|
||||
rpc_url = sys.argv[1]
|
||||
private_key = sys.argv[2]
|
||||
to_address = sys.argv[3]
|
||||
amount_eth = sys.argv[4]
|
||||
|
||||
send_signed_transaction(rpc_url, private_key, to_address, amount_eth)
|
||||
Reference in New Issue
Block a user