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

本地使用Brownie操作VRFCoordinatorV2_5Mock创建订阅时遇AttributeError问题求助

本地使用Brownie操作VRFCoordinatorV2_5Mock创建订阅时遇AttributeError问题求助

嘿,我来帮你搞定这个问题!你碰到的AttributeError其实是个很常见的小失误——你直接调用了合约容器(ContractContainer)也就是VRFCoordinatorV2_5Mock这个类本身的方法,而不是用已经部署到本地链的合约实例来调用。咱们一步步拆解解决:

1. 先搞清楚核心问题:用实例而非类调用方法

VRFCoordinatorV2_5Mock是Brownie的合约容器类,用来部署合约;只有部署完成后生成的合约实例,才拥有合约里的createSubscription等方法。你得先确保已经部署了这个Mock合约,再获取它的实例来操作。

2. 修正代码,正确创建订阅

先调整你的end_lottery函数,改用部署好的Mock实例:

def end_lottery():
    account = get_account()
    lottery = Lottery[-1]
    # 获取最新部署的VRFCoordinatorV2_5Mock实例,而不是用类本身
    mock_vrf = VRFCoordinatorV2_5Mock[-1]
    # 调用实例的createSubscription方法,发起交易
    tx = mock_vrf.createSubscription({"from": account})
    # 注意:createSubscription不会直接返回subId,要从交易触发的事件里提取
    subId = tx.events["SubscriptionCreated"]["subId"]
    print(f"成功创建订阅,ID是: {subId}")
    return subId

3. 资助你的订阅(本地测试用ETH即可)

VRFCoordinatorV2_5支持用ETH或LINK资助订阅,本地测试用ETH更简单,直接调用fundSubscription方法就行:

def fund_subscription(subId):
    account = get_account()
    mock_vrf = VRFCoordinatorV2_5Mock[-1]
    # 这里转1 ETH作为资助金额(单位是wei)
    tx = mock_vrf.fundSubscription(
        subId,
        "1000000000000000000",
        {"from": account}
    )
    tx.wait(1)
    print(f"订阅ID {subId} 已完成资助!")

4. 别忘了把Lottery合约加入订阅消费者列表

最后必须把你的Lottery合约地址添加到订阅的消费者里,不然VRF没法给它返回随机数:

def add_lottery_to_sub(subId):
    account = get_account()
    lottery = Lottery[-1]
    mock_vrf = VRFCoordinatorV2_5Mock[-1]
    tx = mock_vrf.addConsumer(
        subId,
        lottery.address,
        {"from": account}
    )
    tx.wait(1)
    print(f"Lottery合约已成功加入订阅 {subId} 的消费者列表!")

额外提醒

如果还没部署VRFCoordinatorV2_5Mock,先写个部署脚本:

def deploy_vrf_mock():
    account = get_account()
    # 部署Mock,参数分别是base fee和gas price link(本地测试随便填就行)
    mock_vrf = VRFCoordinatorV2_5Mock.deploy(
        100000000000000000,
        1000000000,
        {"from": account}
    )
    print(f"VRFCoordinatorV2_5Mock已部署,地址: {mock_vrf.address}")
    return mock_vrf

备注:内容来源于stack exchange,提问作者Eduardo Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:33:04