与布朗尼的智能合约给出 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
。
我在测试我的项目时遇到了一个问题,任何帮助将不胜感激。 我的所有代码都可以在这里找到: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
部署彩票!
基金合约!
彩票:
短绒 严重性提供者描述行
如您所见,我的前 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
。