通过 web3.py 用 Python 存取 Ethereum

本文介绍了如何使用Python的web3.py库连接到Ethereum节点,进行轻量级的客户端交互。内容包括配置web3.py环境、连接Ethereum测试链Ropsten、访问ERC20合约以及签署并发送交易的操作。强调了在Windows环境下安装web3.py的注意事项以及使用infura服务。此外,还讨论了ABI的概念及其在调用智能合约中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要通过 Python 存取 Ethereum,从 Ethereum 官方的 Github 中可以看到有两种模块可以达成:web3.py 和 pyethereum 。就我目前的理解来说,两者的差别在于 web3.py 主要是作为外部存取 Ethereum 的客户端,也就是说 web3.py 函数库本身不会成为区块链节点,也不会进行区块链同步,而是连接一个区块链上的节点,把区块链当成是外部资料库一样取用而已;而 pyethereum 则比较像是 geth 那样,是用来把自己做成一个区块链节点,会正常进行区块同步,也可以作为矿工开始挖矿。

在本篇当中,因为是想要一个轻量级的客户端来与区块链互动,并不想要准备庞大的储存空间来存放区块链的资料,因此会以 web3.py 为主。

  • 配置 web3.py 执行环境

  • 通过 web3.py 连结 Ethereum 节点

  • 存取区块链上的 ERC20 合约

  • 签署并送出交易

配置 web3.py 执行环境

web3.py 可以直接通过 pip 安装。



1.  `pip install web3`
    


需注意的是,在 Windows 上想安装时,会需要事先安装 Visual C++ Builder,否则在安装的最后阶段会因为无法编译而失败。

通过 web3.py 连结 Ethereum 节点

web3.py 因为自身不会作为一个区块链的节点存在,因此它需要有一个节点用来存取区块链上的资料。一般来说最安全的方式应该是自己使用 geth 或者 parity 来自建节点,不过如果在不想要自建节点的状况时,可以考虑看看 infura 提供的 HTTP 节点服务。

以 infura 现在的 API 来说,如果要连结 Ropsten 测试链,连结的网址是 https://ropsten.infura.io/v3/api_key,其中 api_key 要去注册帐号才取得。以下的程序仿照了 web3.py 内建的 auto.infura 的作法,会从环境变数读取 INFURA_API_KEY 这个参数来组出 infura.io 的 HTTP 位址,用来建立跟 Ropsten 测试链的连线。



1.  `import os`
    
2.    
    
3.  `from web3 import (`
    
4.      `HTTPProvider,`
    
5.      `Web3,`
    
6.  `)`
    
7.    
    
8.  `INFURA_ROPSTEN_BASE_URL = 'https://ropsten.infura.io/v3'`
    
9.    
    
10.  `def load_infura_url():`
    
11.      `key = os.environ.get('INFURA_API_KEY', '')`
    
12.      `return "%s/%s" % (INFURA_ROPSTEN_BASE_URL, key)`
    
13.    
    
14.  `w3 = Web3(HTTPProvider(load_infura_url()))`
    


存取区块链上的 ERC20 合约

在开始存取合约之前,需要先谈谈什么是 ABI 。在 Ethereum 中,因为合约都是以编译过的 binary code 形式存在,因此其实函数库没办法直接知道合约传输的内容到底是什么,因为合约的回传值全都是 binary。因此在操作合约

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值