Truffle

如何配置“truffle test”將主鏈/rinkeby 鏈分叉為其本地鏈?

  • September 4, 2021

我要單元測試的智能合約實例化IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D). 顯然,該合約不存在於由 生成的本地鏈上truffle test

解決方案似乎是在作為主鏈/rinkeby 鏈的分支的本地鏈上進行測試?如何配置truffle test為這樣執行?

感謝:D

編輯 1

我已經嘗試了以下配置,但是它還不起作用:

module.exports = {
   networks: {
       development: {
           fork: "https://eth-rinkeby.alchemyapi.io/v2/{myKey}",
           network_id: 4
       },
   }
}

它返回以下錯誤:

$ npx truffle test
> Something went wrong while attempting to connect to the network. Check your network configuration.

Could not connect to your Ethereum client.
Please check that your Ethereum client:
   - is running
   - is accepting RPC connections (i.e., "--rpc" option is used in geth)
   - is accessible over the network
   - is properly configured in your Truffle configuration file (truffle-config.js)

Truffle v5.3.6 (core: 5.3.6)
Node v14.16.0

編輯 2

同時在 trufflesuite/truffle repo 上的 Github 問題中送出

truffle 團隊可能在 github 票證中提供了解決方案,因此請檢查一下,但與此同時,我的解決方案是使用 ganache cli 生成一個 fork:ganache-cli -f https://eth-rinkeby.alchemyapi.io/v2/${ALCHEMY_API_KEY_RINKEBY}

使用以下測試網路:

test: {
   host: "127.0.0.1",
   port: 8545,
   network_id: "*",
},

你可以很容易地使用 Ganache-CLI 分叉 Rinkeby 或主網。閱讀這篇文章以獲得詳細解釋https://blockheroes.dev/test-smart-contracts-on-mainnet/

最簡單的命令是:

ganache-cli --fork https://eth-rinkeby.alchemyapi.io/v2/{myKey}

但是您可以通過指定來個性化它:

  • 你要分叉的區塊號
  • 您想解鎖的地址以及您想從哪裡獲得資金
  • 首選網路 ID 等。

ganache-cli --fork https://eth-rinkeby.alchemyapi.io/v2/{myKey} --unlock {wealthyAddress} --networkId 999

確保讓這個 fork 在單獨的視窗上執行。

網路配置如下所示:

networks:{
 myfork: {
     host: "127.0.0.1",    
     port: 8545,           
     network_id: "999",    
},
}

truffle test --network myfork

引用自:https://ethereum.stackexchange.com/questions/101971