You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:04