Prerequisites
- Python 3.8+ installed
- Basic understanding of Python
- Ethereum wallet (MetaMask)
- ETH for testnet (Sepolia recommended)
Installation
pip install web3
pip install eth-account
pip install eth-abi
Connect to Ethereum
Connect to Ethereum Network
from web3 import Web3
# Connect to Infura (replace with your API key)
infura_url = "https://sepolia.infura.io/v3/YOUR_INFURA_KEY"
w3 = Web3(Web3.HTTPProvider(infura_url))
# Check connection
print(f"Connected: {w3.is_connected()}")
Check Balance
Get ETH Balance
# Check wallet balance
address = "0x742d35Cc6634C0532925a3b844Bc9e7595f0eB1E"
balance = w3.eth.get_balance(address)
print(f"Balance: {w3.from_wei(balance, 'ether')} ETH")
Send Transaction
Send ETH
from eth_account import Account
# Generate account from private key
private_key = "YOUR_PRIVATE_KEY"
account = Account.from_key(private_key)
# Transaction parameters
tx = {
'nonce': w3.eth.get_transaction_count(account.address),
'to': '0x742d35Cc6634C0532925a3b844Bc9e7595f0eB1E',
'value': w3.to_wei(0.01, 'ether'),
'gas': 21000,
'gasPrice': w3.eth.gas_price,
'chainId': 11155111 # Sepolia
}
# Sign and send
signed_tx = account.sign_transaction(tx)
tx_hash = w3.eth.send_raw_transaction(signed_tx.raw_transaction)
print(f"Transaction sent: {tx_hash.hex()}")
Interact with Smart Contracts
Call ERC-20 Token Contract
# USDC contract on Sepolia
contract_address = "0x7c851C38F6D4c5c6c6C5E2e3e5f5e5e5e5e5e5e5"
contract_abi = [...]
contract = w3.eth.contract(address=contract_address, abi=contract_abi)
# Read balance
balance = contract.functions.balanceOf(account.address).call()
print(f"Token balance: {balance}")
DeFi Integration Example
Interact with Uniswap
# Swap ETH to USDC using Uniswap V3
# This is a simplified example
uniswap_router = "0xE592427A0AEce92De3Edee1F18E0157C05861564"
# Approve token
token_contract.functions.approve(uniswap_router, amount).transact({'from': account.address})
# Execute swap
exactInputSingle_params = {
'tokenIn': WETH_ADDRESS,
'tokenOut': USDC_ADDRESS,
'fee': 3000,
'recipient': account.address,
'deadline': deadline,
'amountIn': amount_in,
'amountOutMinimum': 0,
'sqrtPriceLimitX96': 0
}
tx = router.functions.exactInputSingle(exactInputSingle_params).transact()
Best Practices
- Never expose private keys - Use environment variables
- Use testnets first - Always test on Sepolia before mainnet
- Set appropriate gas limits - Avoid out-of-gas errors
- Handle errors gracefully - Implement try-catch blocks
- Use nonce management - Prevent transaction conflicts
Next Steps
- Learn about Solidity for writing smart contracts
- Explore DeFi protocols like Uniswap, Aave, Compound
- Build NFT marketplaces using ERC-721
- Integrate with The Graph for indexed data