Share Dialog
Share Dialog
Subscribe to 区块链查询
Subscribe to 区块链查询
<100 subscribers
<100 subscribers
Web3.py 是以太坊官方推出的 Python 客户端库,有了它,开发者只需数行 Python 代码即可与 以太坊区块链 交互。本文将带你从零开始连接节点、查询链上数据、核验地址、发送交易并与智能合约函数互动。每一个步骤都配有实战代码片段,学完即可快速上手 区块链开发。
Web 2.0 以中心化平台为核心,数据主权集中;而 Web 3.0 的目标是“去中心化”。在 Web 3.0 网络里,所有节点共同维护同一账本,用户数据由用户自己掌控。通过密码学与点对点协议,Web 3.0 实现了无需可信第三方的价值流通,DApp(去中心化应用)、NFT、DAO 都是它的典型落地场景。
节点:保存区块链完整或部分数据,可供我们查询交易、余额、合约状态等信息
区块:若干笔交易被打包在一起形成的数据集合,每个区块通过哈希指向前一个区块
区块链:由区块按时间顺序串联而成的分布式账本,没有中心管理方
交易:由用户签名发起,可能导致账户余额或合约状态变化的链上指令
Python 3.8+ 阅读本文你只需要会基础 Python,并能在终端执行命令
一台可联网的电脑(macOS / Windows / Linux 均可)
提前准备好一个 以太坊节点 连接入口
自建节点需要同步上百 GB 数据,个人学习推荐 Infura 这类托管节点。
注册 Infura,创建 Project,复制 https://mainnet.infura.io/v3/<你的项目ID>
将 URL 保存到 .env 文件(别忘了把 .env 加入 .gitignore 防止密钥泄漏)
# .env
INFURA_URL=https://mainnet.infura.io/v3/xxxxxxxxxxxxxxxx
python -m venv venv && source venv/bin/activate # 创建虚拟环境
pip install web3 python-decouple
新建 test_web3.py:
from web3 import Web3
from decouple import config
infura_url = config('INFURA_URL')
w3 = Web3(Web3.HTTPProvider(infura_url))
print("已连接?", w3.isConnected())
运行脚本,看到 True 表示连接成功。
latest_block = w3.eth.get_block('latest')
print(latest_block['number'], latest_block['hash'].hex())
>>> w3.isAddress('0x6dAc6E2Dace28369A6B884338B60f7CbBF7fb9be')
True
转换为 Checksummed Address(避免交易前因大小写出错):
addr = w3.toChecksumAddress('0xd7986a11f29fd623a800adb507c7702415ee7718')
balance_wei = w3.eth.get_balance(addr)
balance_eth = w3.fromWei(balance_wei, 'ether')
print(f"该地址持有 {balance_eth} ETH")
**Q1:**为什么需要将地址转换成 Checksummed Address?**A:**以太坊只接受带校验和的地址格式,可减少转账到错误地址的风险。
Q2:fromWei 这个方法会改变链上余额吗?**A:**不会,它只是单位换算工具,链上数据保持不变。
**Q3:**查询时每次都返回字节类型,如何转成可读格式?**A:**使用 .hex() 可轻松将 HexBytes 转为十六进制字符串。
**Q4:**Infura 提供免费额度吗?**A:**有,个人日调用量少于 10 万次即可永久免费。
**Q5:**怎样查询历史交易记录?**A:**获取交易哈希后,使用 w3.eth.get_transaction(tx_hash) 可获得完整交易详情。
在 Etherscan 搜索任意代币(例如 SHIBACHU 合约地址 0xd665ce...),复制合约 ABI JSON。
address = '0xd665ce6Ef8AdA72B1CF946A6a71508bDD6D2EE04'
abi = json.loads('<上一步粘贴的ABI>')
contract = w3.eth.contract(address=address, abi=abi)
# 读取 totalSupply
total = contract.functions.totalSupply().call()
print(f"总发行量: {w3.fromWei(total, 'ether')} 枚")
holder = '0x123...'
balance = contract.functions.balanceOf(holder).call()
print(f"该账户拥有 {w3.fromWei(balance, 'ether')} 枚代币")
发送交易需要 本地签署,因此必须获得私钥并存放在安全位置,例如:
from eth_account import Account
acct = Account.from_key('0x你的私钥')
tx = {
'to': '0x接收地址',
'value': w3.toWei(0.01, 'ether'),
'gas': 21000,
'gasPrice': w3.toWei('10', 'gwei'),
'nonce': w3.eth.getTransactionCount(acct.address),
'chainId': 1
}
signed = acct.sign_transaction(tx)
tx_hash = w3.eth.sendRawTransaction(signed.rawTransaction)
print("交易哈希:", tx_hash.hex())
👉 三分钟无代码体验链上交互,实时查看交易区块高度与收入收益
**Q1:**怎么知道自己调用的是只读函数还是写链函数?**A:**ABI 内 stateMutability 字段为 view / pure 表示只读,否则需发起交易并付 gas 费。
**Q2:**ABI 太长,本地难以维护,有简化方案吗?**A:**可把 ABI 托管在 IPFS,或在构建脚本中自动下载并缓存到 abi/ 文件夹。
**Q3:**网络拥堵 gas 费太高怎么办?**A:**使用 maxFeePerGas 与 maxPriorityFeePerGas 设置 EIP-1559 费率,等待低峰再发交易。
**Q4:**能否批量查询多个地址余额?**A:**可以结合 multicall 合约一次打包多条查询,显著降低 RPC 调用次数。
GitHub 示例仓库(已开源):git clone https://github.com/firebase007/web3.py
充分阅读 web3.py 官方文档 可解锁高级功能:日志监听、事件过滤、离线签署、链上索引等。
当你完成本教程后,你的 Python 控制台已经成功与 以太坊主网 建立了面向未来的桥梁:读取世界状态、验证地址、调用智能合约函数,甚至还能自主发起转账。现在开始把业务逻辑写进智能合约,前端通过 Web3.py 调用,你就拥有了一个真正意义上的 去中心化应用。
祝你构建愉快,May the blocks be with you!
Web3.py 是以太坊官方推出的 Python 客户端库,有了它,开发者只需数行 Python 代码即可与 以太坊区块链 交互。本文将带你从零开始连接节点、查询链上数据、核验地址、发送交易并与智能合约函数互动。每一个步骤都配有实战代码片段,学完即可快速上手 区块链开发。
Web 2.0 以中心化平台为核心,数据主权集中;而 Web 3.0 的目标是“去中心化”。在 Web 3.0 网络里,所有节点共同维护同一账本,用户数据由用户自己掌控。通过密码学与点对点协议,Web 3.0 实现了无需可信第三方的价值流通,DApp(去中心化应用)、NFT、DAO 都是它的典型落地场景。
节点:保存区块链完整或部分数据,可供我们查询交易、余额、合约状态等信息
区块:若干笔交易被打包在一起形成的数据集合,每个区块通过哈希指向前一个区块
区块链:由区块按时间顺序串联而成的分布式账本,没有中心管理方
交易:由用户签名发起,可能导致账户余额或合约状态变化的链上指令
Python 3.8+ 阅读本文你只需要会基础 Python,并能在终端执行命令
一台可联网的电脑(macOS / Windows / Linux 均可)
提前准备好一个 以太坊节点 连接入口
自建节点需要同步上百 GB 数据,个人学习推荐 Infura 这类托管节点。
注册 Infura,创建 Project,复制 https://mainnet.infura.io/v3/<你的项目ID>
将 URL 保存到 .env 文件(别忘了把 .env 加入 .gitignore 防止密钥泄漏)
# .env
INFURA_URL=https://mainnet.infura.io/v3/xxxxxxxxxxxxxxxx
python -m venv venv && source venv/bin/activate # 创建虚拟环境
pip install web3 python-decouple
新建 test_web3.py:
from web3 import Web3
from decouple import config
infura_url = config('INFURA_URL')
w3 = Web3(Web3.HTTPProvider(infura_url))
print("已连接?", w3.isConnected())
运行脚本,看到 True 表示连接成功。
latest_block = w3.eth.get_block('latest')
print(latest_block['number'], latest_block['hash'].hex())
>>> w3.isAddress('0x6dAc6E2Dace28369A6B884338B60f7CbBF7fb9be')
True
转换为 Checksummed Address(避免交易前因大小写出错):
addr = w3.toChecksumAddress('0xd7986a11f29fd623a800adb507c7702415ee7718')
balance_wei = w3.eth.get_balance(addr)
balance_eth = w3.fromWei(balance_wei, 'ether')
print(f"该地址持有 {balance_eth} ETH")
**Q1:**为什么需要将地址转换成 Checksummed Address?**A:**以太坊只接受带校验和的地址格式,可减少转账到错误地址的风险。
Q2:fromWei 这个方法会改变链上余额吗?**A:**不会,它只是单位换算工具,链上数据保持不变。
**Q3:**查询时每次都返回字节类型,如何转成可读格式?**A:**使用 .hex() 可轻松将 HexBytes 转为十六进制字符串。
**Q4:**Infura 提供免费额度吗?**A:**有,个人日调用量少于 10 万次即可永久免费。
**Q5:**怎样查询历史交易记录?**A:**获取交易哈希后,使用 w3.eth.get_transaction(tx_hash) 可获得完整交易详情。
在 Etherscan 搜索任意代币(例如 SHIBACHU 合约地址 0xd665ce...),复制合约 ABI JSON。
address = '0xd665ce6Ef8AdA72B1CF946A6a71508bDD6D2EE04'
abi = json.loads('<上一步粘贴的ABI>')
contract = w3.eth.contract(address=address, abi=abi)
# 读取 totalSupply
total = contract.functions.totalSupply().call()
print(f"总发行量: {w3.fromWei(total, 'ether')} 枚")
holder = '0x123...'
balance = contract.functions.balanceOf(holder).call()
print(f"该账户拥有 {w3.fromWei(balance, 'ether')} 枚代币")
发送交易需要 本地签署,因此必须获得私钥并存放在安全位置,例如:
from eth_account import Account
acct = Account.from_key('0x你的私钥')
tx = {
'to': '0x接收地址',
'value': w3.toWei(0.01, 'ether'),
'gas': 21000,
'gasPrice': w3.toWei('10', 'gwei'),
'nonce': w3.eth.getTransactionCount(acct.address),
'chainId': 1
}
signed = acct.sign_transaction(tx)
tx_hash = w3.eth.sendRawTransaction(signed.rawTransaction)
print("交易哈希:", tx_hash.hex())
👉 三分钟无代码体验链上交互,实时查看交易区块高度与收入收益
**Q1:**怎么知道自己调用的是只读函数还是写链函数?**A:**ABI 内 stateMutability 字段为 view / pure 表示只读,否则需发起交易并付 gas 费。
**Q2:**ABI 太长,本地难以维护,有简化方案吗?**A:**可把 ABI 托管在 IPFS,或在构建脚本中自动下载并缓存到 abi/ 文件夹。
**Q3:**网络拥堵 gas 费太高怎么办?**A:**使用 maxFeePerGas 与 maxPriorityFeePerGas 设置 EIP-1559 费率,等待低峰再发交易。
**Q4:**能否批量查询多个地址余额?**A:**可以结合 multicall 合约一次打包多条查询,显著降低 RPC 调用次数。
GitHub 示例仓库(已开源):git clone https://github.com/firebase007/web3.py
充分阅读 web3.py 官方文档 可解锁高级功能:日志监听、事件过滤、离线签署、链上索引等。
当你完成本教程后,你的 Python 控制台已经成功与 以太坊主网 建立了面向未来的桥梁:读取世界状态、验证地址、调用智能合约函数,甚至还能自主发起转账。现在开始把业务逻辑写进智能合约,前端通过 Web3.py 调用,你就拥有了一个真正意义上的 去中心化应用。
祝你构建愉快,May the blocks be with you!
No activity yet