如何使用Brownie通过Python脚本调用智能合约函数并查询变量值
Brownie调用智能合约及查询变量操作步骤
前置操作
首先确保你已经完成合约编译和部署:
- 执行
brownie compile编译所有合约,确认DutchAuction合约编译无报错 - 你可以通过脚本或者Brownie控制台部署合约,部署完成后会得到合约实例对象
查询合约公共变量
你合约中定义的所有public修饰的状态变量,Brownie会自动生成对应的读取方法,直接调用即可拿到链上值,示例如下:
from brownie import accounts, DutchAuction # 部署合约(如果是已经部署的可以用DutchAuction.at("已部署合约地址")获取实例) def main(): deployer = accounts[0] # 传入构造函数需要的起始价格、结束时间参数 dutch_auction = DutchAuction.deploy(1e18, 86400, {"from": deployer}) # 查询公共变量示例 start_time = dutch_auction.startTime() end_time = dutch_auction.endTime() current_price = dutch_auction.price() owner = dutch_auction.assetOwner() print(f"拍卖起始时间: {start_time}, 结束时间: {end_time}, 起始价格: {current_price}, 资产所有者: {owner}")
调用合约函数
Brownie中合约函数调用分两类场景:
1. 读操作调用(不需要发交易)
如果函数是view/pure修饰,或者你只需要拿到函数返回值不需要上链执行,直接调用或者加.call()即可:
注意你当前编写的
bid()函数没有加view修饰符,默认会识别为需要发交易的写操作,如果只需要拿返回值可以加.call()模拟执行,或者给函数加上view修饰符
# 接上面的部署逻辑 # 方式1:加call模拟调用,直接拿到返回值,不会发交易 bid_res = dutch_auction.bid.call({"from": deployer}) print(bid_res) # 输出 hello world # 如果你给bid函数加上view修饰符:function bid() public view returns (string calldata) # 可以直接调用拿返回值 bid_res = dutch_auction.bid({"from": deployer})
2. 写操作调用(需要发送交易上链)
如果函数需要修改链上状态,直接调用方法即可,返回值是交易回执对象:
# 发送交易调用bid函数 tx = dutch_auction.bid({"from": deployer}) # 等待交易上链确认 tx.wait(1) # 打印交易哈希 print(f"交易哈希: {tx.txid}")
内容的提问来源于stack exchange,提问作者Guled
相关产品推荐
相关产品推荐

