3.读取合约信息


文档摘要

title: 3. 读取合约信息 tags: web3py python ens vitalik web3.py极简入门: 3.读取合约信息 我们最近在重新学 ,巩固一下细节,也写一个 ,供小白们使用。 推特:@0xAAScience@localcat15 WTF Academy社群: 官网 wtf.academy | WTF Solidity教程 | discord | 微信群申请 所有代码和教程开源在github: github.com/WTFAcademy/WTF-web3py 这一讲,我们会介绍 合约对象,并利用它来读取链上的合约信息。 对象 在 中, 对象是对区块链上运行的智能合约的抽象,将智能合约实例化为 对象后,我们就可以在 程序中方便地与之进行交互。

title: 3. 读取合约信息 tags: - web3py - python - ens - vitalik

web3.py极简入门: 3.读取合约信息

我们最近在重新学web3.py,巩固一下细节,也写一个WTF web3.py极简入门,供小白们使用。

推特@0xAA_Science@localcat15

WTF Academy社群: 官网 wtf.academy | WTF Solidity教程 | discord | 微信群申请

所有代码和教程开源在github: github.com/WTFAcademy/WTF-web3py

这一讲,我们会介绍Contract合约对象,并利用它来读取链上的合约信息。

Contract对象

web3.py中,Contract对象是对区块链上运行的智能合约的抽象,将智能合约实例化为Contract对象后,我们就可以在python程序中方便地与之进行交互。

创建Contract变量

创建以太坊上的Contract对象非常简单,只需要借助web3.eth.contract()方法。想要调用这个方法,我们必须有一个预先创建好的Provider实例,并将合约地址和合约ABI作为参数传入。

合约的ABI指定了如何与合约进行交互,可以在我们编译合约文件时获得,也可以通过以太坊浏览器方便的读取。

读取合约信息

接下来,我们尝试借助Contract对象读取Vitalik的USDT持仓。

1. 创建Provider

from web3 import Web3 #从alchemy申请rpc节点 ALCHEMY_URL='https://eth-mainnet.g.alchemy.com/v2/hjZ-SwVhjRtBk-yUJ1SkWSTrz_dJl7of' w3=Web3(Web3.HTTPProvider(ALCHEMY_URL)) w3.is_connected()

2. 创建Contract实例

#USDT主网地址 addressUSDT=0xdAC17F958D2ee523a2206206994597C13D831ec7 #从etherscan找到USDT的ABI ABIUSDT='[{"constant":true,"inputs":[],...}]'

从etherscan查找ABI

3. 调用只读函数

可以使用Contract.caller方法简单地实现合约中只读函数的调用(涉及到签名和发送交易的调用将在后续章节讨论),以下两种调用方式都符合语法要求。

#第一种 USDTcontract.caller.name() #第二种 USDTcontract.caller().totalSupply()

调用只读函数

4. 获取Vitalik地址的USDT余额

我们可以利用USDTcontract合约的balanceOf函数来查询Vitalik的USDT余额。

USDTcontract.caller.balanceOf('vitalik.eth')

查询Vitalik的USDT余额

总结

这一讲,我们介绍了如何在web3.py中创建合约实例,并调用合约中的只读函数读取了Vitalik的USDT余额。


作者与出处
来源:WTFAcademy
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 转发
评论区 (0)
U