如何在没有 "invalid opcode" 的情况下在(分叉的)开发网络上引用 LINK 令牌?
How to reference LINK token on (forked) development network without "invalid opcode"?
我喜欢运行一些本地测试。在 rinkeby
和其他测试链上一切正常。但是,本地 development
链不同意我的配置。
当我 运行 分叉开发网络时:
brownie console --network mainnet-fork
ganache-cli 按预期启动:
Brownie v1.18.1 - Python development framework for Ethereum
BlockchainProject is the active project.
Launching 'ganache-cli --accounts 10 --hardfork istanbul --fork https://mainnet.infura.io/v3/6a633a4ecae8449abbc69974cdd3a9b9 --gasLimit 12000000 --mnemonic brownie --port 8545 --chainId 1'...
Brownie environment is ready.
然而,即使是最简单的合约交互也会失败:
>>> link_token = Contract.from_explorer("0x514910771AF9Ca656af840dff83E8264EcF986CA")
Fetching source of 0x514910771AF9Ca656af840dff83E8264EcF986CA from api.etherscan.io...
>>> accounts[0].balance()
100000000000000000000
>>> accounts[1].balance()
100000000000000000000
>>> link_token.transfer(accounts[0].address, 100, {'from': accounts[0].address})
Transaction sent: 0x1542b679e4d09b2f4523427c7f5048ed01ee0d194c34cd27b82bbd177e1b3f23
Gas price: 0.0 gwei Gas limit: 12000000 Nonce: 2
LinkToken.transfer confirmed (invalid opcode) Block: 14604608 Gas used: 12000000 (100.00%)
<Transaction '0x1542b679e4d09b2f4523427c7f5048ed01ee0d194c34cd27b82bbd177e1b3f23'>
由于 Link 标记是使用不受支持的编译器编译的,所以我没有得到任何关于为什么会导致 LinkToken.transfer confirmed (invalid opcode)
.
的进一步信息
我如何(正确地)运行 使用 brownie 针对分叉 development
网络的链链接代码 - 我是否遗漏了资金等步骤??
我在 brownie-config.yaml
中的 networks:
配置:
networks:
mainnet-fork:
vrf_coordinator: '0xf0d54349aDdcf704F77AE15b96510dEA15cb7952'
link_token: '0x514910771AF9Ca656af840dff83E8264EcF986CA'
keyhash: '0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445'
我确实尝试过 rm -rf build
但这并没有改变任何东西。
系统环境:
- 布朗尼 v1.18.1
- 节点 8.5.5
- Ganache v7.0.4
- 21.3.0 达尔文内核版本 (macOS 12.2.1)
- Python 3.9.7
在这种情况下,用于 Link 代币注资的帐户没有任何 Link。由于某种原因,交易没有被恢复,但是 brownie
的 unlock:
选项提供了帮助。
首先调整 networks:
设置以包含具有大量 Link 余额的任意帐户:
mainnet-fork:
cmd_settings:
unlock:
- 0xf37c348b7d19b17b29cd5cfa64cfa48e2d6eb8db
vrf_coordinator: '0xf0d54349aDdcf704F77AE15b96510dEA15cb7952'
link_token: '0x514910771AF9Ca656af840dff83E8264EcF986CA'
keyhash: '0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445'
其次,运行一个mainnet-fork如前:
brownie console --network mainnet-fork
三、确认解锁账户可用并入金:
>>> accounts[10]
<Account '0xF37C348B7d19b17B29CD5CfA64cfA48E2d6eb8Db'>
>>> accounts[10].balance()
426496436000000000
四、实例化token的合约,Link本例为:
link_token = Contract.from_explorer("0x514910771AF9Ca656af840dff83E8264EcF986CA")
最后,将Link从解锁账户转入其他账户(或合约):
link_token.transfer(accounts[0], 20, {"from": accounts[10]})
或者,用 Link 资助主网地址,或者甚至解锁 Link 所有者并铸造新的 Link 也可以...
我喜欢运行一些本地测试。在 rinkeby
和其他测试链上一切正常。但是,本地 development
链不同意我的配置。
当我 运行 分叉开发网络时:
brownie console --network mainnet-fork
ganache-cli 按预期启动:
Brownie v1.18.1 - Python development framework for Ethereum
BlockchainProject is the active project.
Launching 'ganache-cli --accounts 10 --hardfork istanbul --fork https://mainnet.infura.io/v3/6a633a4ecae8449abbc69974cdd3a9b9 --gasLimit 12000000 --mnemonic brownie --port 8545 --chainId 1'...
Brownie environment is ready.
然而,即使是最简单的合约交互也会失败:
>>> link_token = Contract.from_explorer("0x514910771AF9Ca656af840dff83E8264EcF986CA")
Fetching source of 0x514910771AF9Ca656af840dff83E8264EcF986CA from api.etherscan.io...
>>> accounts[0].balance()
100000000000000000000
>>> accounts[1].balance()
100000000000000000000
>>> link_token.transfer(accounts[0].address, 100, {'from': accounts[0].address})
Transaction sent: 0x1542b679e4d09b2f4523427c7f5048ed01ee0d194c34cd27b82bbd177e1b3f23
Gas price: 0.0 gwei Gas limit: 12000000 Nonce: 2
LinkToken.transfer confirmed (invalid opcode) Block: 14604608 Gas used: 12000000 (100.00%)
<Transaction '0x1542b679e4d09b2f4523427c7f5048ed01ee0d194c34cd27b82bbd177e1b3f23'>
由于 Link 标记是使用不受支持的编译器编译的,所以我没有得到任何关于为什么会导致 LinkToken.transfer confirmed (invalid opcode)
.
我如何(正确地)运行 使用 brownie 针对分叉 development
网络的链链接代码 - 我是否遗漏了资金等步骤??
我在 brownie-config.yaml
中的 networks:
配置:
networks:
mainnet-fork:
vrf_coordinator: '0xf0d54349aDdcf704F77AE15b96510dEA15cb7952'
link_token: '0x514910771AF9Ca656af840dff83E8264EcF986CA'
keyhash: '0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445'
我确实尝试过 rm -rf build
但这并没有改变任何东西。
系统环境:
- 布朗尼 v1.18.1
- 节点 8.5.5
- Ganache v7.0.4
- 21.3.0 达尔文内核版本 (macOS 12.2.1)
- Python 3.9.7
在这种情况下,用于 Link 代币注资的帐户没有任何 Link。由于某种原因,交易没有被恢复,但是 brownie
的 unlock:
选项提供了帮助。
首先调整 networks:
设置以包含具有大量 Link 余额的任意帐户:
mainnet-fork:
cmd_settings:
unlock:
- 0xf37c348b7d19b17b29cd5cfa64cfa48e2d6eb8db
vrf_coordinator: '0xf0d54349aDdcf704F77AE15b96510dEA15cb7952'
link_token: '0x514910771AF9Ca656af840dff83E8264EcF986CA'
keyhash: '0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445'
其次,运行一个mainnet-fork如前:
brownie console --network mainnet-fork
三、确认解锁账户可用并入金:
>>> accounts[10]
<Account '0xF37C348B7d19b17B29CD5CfA64cfA48E2d6eb8Db'>
>>> accounts[10].balance()
426496436000000000
四、实例化token的合约,Link本例为:
link_token = Contract.from_explorer("0x514910771AF9Ca656af840dff83E8264EcF986CA")
最后,将Link从解锁账户转入其他账户(或合约):
link_token.transfer(accounts[0], 20, {"from": accounts[10]})
或者,用 Link 资助主网地址,或者甚至解锁 Link 所有者并铸造新的 Link 也可以...