Solidity

Uniswap 路由器部署錯誤:“UniswapV2Router02”——無法創建 UniswapV2Router02 的實例;地址 0xxxxxxxxx 處沒有程式碼

  • January 27, 2022

我正在嘗試分叉 Uniswap 並在 Ropsten 測試網上部署以用於教育和測試目的。從我收集的資訊來看,我們似乎需要先部署 UniswapV2Factory 合約,然後再部署 UniswapV2Router02 合約。我分別從這里這里複製。我沒有對程式碼進行任何更改。我可以使用松露很好地部署工廠契約。但是,在部署路由器契約時出現以下錯誤:

錯誤:*** 部署失敗 ***

“UniswapV2Router02” – 無法創建 UniswapV2Router02 的實例;地址 0xXXXXXXXXXXXXXXX 處沒有程式碼。

這是我用來部署 UniswapV2Factory 的腳本:

const Factory = artifacts.require("UniswapV2Factory.sol");

module.exports = async function (deployer, network, addresses) {
 await deployer.deploy(Factory, addresses[0]);

};

以及部署 UniswapV2Router02 的程式碼:

const Router = artifacts.require('UniswapV2Router02.sol');

module.exports = async function (deployer, network, addresses) {
   const WETH_ADDRESS = '0x0a180a76e4466bf68a7f86fb029bed3cccfaaac5';  
   const FACTORY_ADDRESS = '{factory address}';

   await deployer.deploy(Router, FACTORY_ADDRESS, WETH_ADDRESS);
}

我已將solidity 編譯器版本更改為工廠的0.5.16 和路由器的0.6.6。

我在部署時也遇到了同樣的問題。當檢查在區塊鏈瀏覽器中返回錯誤的 tx 雜湊時,我得到了這個:-

發送失敗

這表示原因是“超出了最大程式碼大小”。

uniswapV2Router02 是一個龐大的程式碼,這就是它無法部署的原因。tx 無法通過,他們試圖在該地址創建一個實例,但無法成功。所以返回了一個錯誤。您可能會看到錯誤消息中的合約地址與失敗的 tx 中的合約地址相同。

使固定:-

我通過註釋掉不經常使用的部分智能合約來解決這個問題。我註釋掉(選擇程式碼然後(cntrl + /))程式碼中的整個部分,從這個開始=>

**** SWAP (supporting fee-on-transfer tokens) ****

如果您想要此功能,最好將其複製到單獨的solidity 文件中,然後將其導入到Router solidity 程式碼中。

我找到了解決方案(感謝來自 openzeppelin 論壇的 jamestran)。

jamestran解決方案:

compilers: {
  solc: {
    version: "0.6.6",    // Fetch exact version from solc-bin (default: truffle's version)
    // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
    settings: {          // See the solidity docs for advice about optimization and evmVersion
     optimizer: {
       enabled: true,
       runs: 999999
     },
     evmVersion: "istanbul", 
     outputSelection: {
      "*": {
        "": [
          "ast"
        ],
        "*": [
          "evm.bytecode.object",
          "evm.deployedBytecode.object",
          "abi",
          "evm.bytecode.sourceMap",
          "evm.deployedBytecode.sourceMap",
          "metadata"
        ]
      },
    }
    }
  },
},

P/S 設置為您的松露配置。

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