跟我一起阅读并修复源码(3:编译工程,源码分析)之六

在上一章跟我一起阅读并修复某知名DEX交易所源码(3:编译工程,源码分析)之五_lixiaodog的博客-CSDN博客

中我们详细分析了 contract MdexPair的源码,本章将继续编译的进程,来吧,少年,出发吧!!

输入编译命令truffle compile

project:/contracts/mainnet/CoinChef.sol:48:43: TypeError: Operator ** not compatible with types int_const 100 and int_const 1000000000000000000
    uint256 public constant mdxPerBlock = 100 ** 1e18;

**运算符无法用于这两个常数,我认为应该是写错了,修改为:

uint256 public constant mdxPerBlock = 100*10**18;

每区块产量100个。如果是100**1E18 ,是个多大的数大家可以想像。

再次编译,如下图:

> Duplicate contract names found for TransferHelper.
> This can cause errors and unknown behavior. Please rename one of your contracts.

> Duplicate contract names found for IWHT.
> This can cause errors and unknown behavior. Please rename one of your contracts.

> Duplicate contract names found for TransferHelper.
> This can cause errors and unknown behavior. Please rename one of your contracts.

> Duplicate contract names found for MdxToken.
> This can cause errors and unknown behavior. Please rename one of your contracts.

> Duplicate contract names found for SafeMath.
> This can cause errors and unknown behavior. Please rename one of your contracts.

 合约名TransferHelper冲突了。在全局范围内搜索,如下图:

在 C:\work\blockchain\Mdex\contracts\assets\Airdrop.sol
  9,9: library TransferHelper {
  13,77:         require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
  19,77:         require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
  25,77:         require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
  87,9:         TransferHelper.safeTransferFrom(address(wht), msg.sender, address(this), _whtAmount);

扫描二维码关注公众号,回复: 14644253 查看本文章

C:\work\blockchain\Mdex\contracts\assets\AirdropMDX.sol
  10,9: library TransferHelper {
  14,77:         require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
  20,77:         require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
  26,77:         require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
  83,9:         TransferHelper.safeTransferFrom(mdx, msg.sender, address(this), _mdxAmount);

发现了同名定义,此时我们需要决定修改哪个定义,以解决冲突,通过对比我们发现这三处定义是一模一样的,所以我直接把这个库合并为一个库,在library新建文件TransferHelper.sol,如下图

同时删除其它两处的相关定义,并添加import "library/TransferHelper.sol";

pragma solidity ^0.6.0;
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }
    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value : value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

搜索library SafeMath

 在oracle.sol中我们发的safemath只有定义,但实际上在这个文件中并未有实际使用,所以注释掉safeMath的定义和  //using SafeMathUint for uint;

搜索MdxToken,结果如下图:

我们发现在MdxToken.sol中的定义并未被引用过,全部注释掉 

搜索IWHT,如下图

 注释Airdrop.sol的定义,并在interface下新建文件IWHT.SOL,代码:

interface IWHT {
    function balanceOf(address owner) external view returns (uint);
    function deposit() external payable;

    function transfer(address to, uint value) external returns (bool);

    function withdraw(uint) external;
}

在上面两个文件中加入:import "../interface/IWHT.sol"; 

再次编译,结果如下图:

编译通过,至此,所有的编译问题已经全部解决,在下一章跟我一起阅读并修复某知名DEX交易所源码(4:部署工程,源码分析)_lixiaodog的博客-CSDN博客中,我们将会尝试布署MDEX至本地测试环境。敬请期待!!! 

猜你喜欢

转载自blog.csdn.net/lixiaodog/article/details/124083431