与布朗尼的智能合约给出 VirtualMachineError

smart contract with brownie gives VirtualMachineError

我在测试我的项目时遇到了一个问题,任何帮助将不胜感激。 我的所有代码都可以在这里找到:https://github.com/Karlus44/smartcontract-lottery 当我输入命令 brownie test 我的脚本 tests/test_lottery_unit.py 已执行,并且已提交我的不同测试。 这是我注销的一些引述:

Brownie v1.18.1 - Python development framework for Ethereum

==================================测试开始======== =========================== 平台 linux -- Python 3.8.10, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 根目录:/home/karlus/Documents/NFT-Contract/smartcontract-lottery 插件:eth-brownie-1.18.1、forked-1.4.0、web3-5.27.0、hypothesis-6.27.3、xdist-1.34.0 收集了 4 件物品

启动'ganache-cli --accounts 10 --hardfork istanbul --gasLimit 12000000 --mnemonic br ownie --port 8545'...

tests/test_lottery_unit.py ...F [100%]

========================================失败==== ==================================== __________________________________ test_can_end_lottery __________________________________

def test_can_end_lottery():
    # Arrange
    if network.show_active() not in LOCAL_BLOCKCHAIN_ENVIRONMENTS:
        pytest.skip()
    lottery = deploy_lottery()
    account = get_account()
    lottery.startLottery({"from": account})
    lottery.enter({"from": account, "value":lottery.getEntranceFee()})
    fund_with_link(lottery)
    print(f"endlottery: {lottery.endLottery}")
  transaction = lottery.endLottery({"from": account})

E brownie.exceptions.VirtualMachineError: 还原 E 跟踪步骤 -1,程序计数器 2469: E 文件“/home/karlus/.brownie/packages/smartcontractkit/chainlink-brownie-contract s@1.1.1/contracts/src/v0.6/VRFConsumerBase.sol”,第 161 行,在 VRFConsumerBase.requestRando 状态: E 函数 requestRandomness(bytes32 _keyHash, uint256 _fee) E 内部 returns (bytes32 requestId) E { E LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PL ACEHOLDER)); E // 这是传递给 VRFCoordinator 的种子。预言机会将其与 E // 包含此请求的块的哈希值以获取 seed/input E // 最终传递给 VRF 密码机制。

tests/test_lottery_unit.py:58: VirtualMachineError

tests/test_lottery_unit.py:58: VirtualMachineError ---------------------------------- 捕获的标准输出调用------------ ---------------------- 0x66aB6D9362d4F35596279692F0251Db635165871 部署彩票! 基金合约! 彩票: 交易发送:0x59a0a2fdf727591891380c80c0fd90329c8a11b527e24c07d33652b26dfd32c7 ================================简短的测试摘要信息============== =================== 失败 tests/test_lottery_unit.py::test_can_end_lottery - brownie.exceptions.VirtualMac... ============================== 1失败,3通过7.97s ============ =================== 正在终止本地 RPC 客户端...

短绒 严重性提供者描述行

如您所见,我的前 3 个测试都正常运行,但我的函数 fulfillRandomness 似乎没有被调用,我不明白为什么。

如果您有虚拟机,请在以太坊 VM 的设置中检查您的 ganache 端口和 IP。如果您是 运行 brownie-compile 并且代码有效,那就是问题所在。

检查您的 fund_with_link 函数。检查您提到的金额。必须是 amount = 0.1 * 10**18.

如此处所述,https://docs.chain.link/docs/vrf-contracts/v1/,比如说,Rinkeby 测试网络的费用是 0.1 LINK