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

这篇具有很好参考价值的文章主要介绍了跟我一起阅读并修复源码(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 ,是个多大的数大家可以想像。

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

再次编译,如下图:

> 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冲突了。在全局范围内搜索,如下图:

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

在 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);

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,如下图

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

同时删除其它两处的相关定义,并添加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

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

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

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

搜索MdxToken,结果如下图:

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

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

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

搜索IWHT,如下图

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

 注释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"; 

再次编译,结果如下图:

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

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

到了这里,关于跟我一起阅读并修复源码(3:编译工程,源码分析)之六的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 跟我一起学Adams虚拟样机: 基础篇(一) 运动学仿真基操,以一个简单的曲柄摇杆机构为例

    这篇博文是Adams虚拟样机系列的第一篇,将通过一个最简单的曲柄摇杆机构,介绍用Adams建立虚拟样机,进行运动学仿真,以及对仿真结果做后处理的基本流程。 其中将涉及:Adams View工作环境的设置、已知各杆件位姿时的放置法建模、各杆件姿态未知时的装配法建模、连杆的

    2024年02月04日
    浏览(40)
  • 到了这个年纪,就应该阅读Spring源码了,源码阅读指南-编译加运行

    Spring的源码地址 https://github.com/spring-projects/spring-framework 我们先把他clone下来 没梯子的话多clone几遍就好了 我们这里使用5.x的版本 设置里面gradle设置按照如下图设置即可 😊gradle介绍(插叙手法) 由于Spring源码都是使用Gradle来管理项目 按理来说我们gradle和maven类似,需要在本

    2023年04月09日
    浏览(91)
  • 【UE】修复源码编译运行 Setup.bat Unhandled exception. System.PlatformNotSupportedException:

    以为是墙了,翻后无效。 搜索询问后说是ue依赖服务器迁移。 解决方案 访问 https://github.com/EpicGames/UnrealEngine/releases 找到对应当前你本地编译的源码版本。 下载依赖项的 Commit.gitdeps.xml 最近有更新代表ue已修复,未更新可能代表ue官方已不再支持。 下载后替换至UE_SourceUE5En

    2024年02月05日
    浏览(45)
  • Xpdf 阅读器源码编译后查看文件中文乱码问题解决

    经查阅,是由于缺少中文字体包: 第一步: 下载所需要的字体包 下载https://dl.xpdfreader.com/xpdf-t1fonts.tar.gz 包含 下载中文字体包(非嵌入字体) http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/gkai00mp.ttf.gz http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/gbsn00lp.ttf.gz 完整包含中文字体文件如

    2024年02月07日
    浏览(53)
  • 网狐核心源码阅读分析

    网狐服务器整体上分为4个部分:中转服务器,房间服务器,大厅服务器,sqlserver数据库。其中大厅服务器主要负责帐号管理器:管理用户选择服务器登录地址,校验用户数据等。必需与中转服务器保持长连接,用于更新获取最新数据。 房间服务器:用于加载处理每款子游戏

    2024年03月09日
    浏览(34)
  • Vivado 工程长时间编译的原因分析与解决方案

    Vivado 工程长时间编译的原因分析与解决方案 在进行 FPGA 开发过程中,Vivado 是一款常用的综合工具,但是随着项目的复杂度和规模增大,编译时间也会变得越来越长。本文将对 Vivado 工程编译时间过长的原因进行总结,并提供相应的解决方案,旨在帮助工程师提高 FPGA 开发的

    2024年02月03日
    浏览(36)
  • 【投屏】Scrcpy源码分析一(编译篇)

    Scrcpy源码分析系列 【投屏】Scrcpy源码分析一(编译篇) 【投屏】Scrcpy源码分析二(Client篇-连接阶段) 【投屏】Scrcpy源码分析三(Client篇-投屏阶段) 【投屏】Scrcpy源码分析四(最终章 - Server篇) Scrcpy是一款小巧的Android设备投屏软件。可以跨平台,在Windows、Linux、MacOS上对

    2024年02月12日
    浏览(31)
  • EOSIO源码分析 - CDT合约编译过程

    纵观整体代码有如下特点 符合C++代码语法,包含相应的头文件,命名空间 公有继承合约基类 contract 在语法中出现了新的标签代码如:[eosio::contract], [eosio::action]等 代码尾部出现新的宏EOSIO_DISPATCH 工具名称:eosio-cpp 命令行:eosio-cpp -o hello.wasm hello.cpp –abigen 编译结果:生成h

    2023年04月11日
    浏览(36)
  • 小程序应用&解包反编译&动态调试&抓包&静态分析&源码架构

    直接在微信小程序上搜就完了 参考地址:https://blog.csdn.net/m0_60571842/article/details/132564881 反编译之后就会得到源码,然后对源码架构进行分析以下4个方面 1.更多的资产信息 2.敏感的配置信息 3.未授权访问测试 4.源码中的安全问题 小程序多功能组手 简单工具:http://xcx.

    2024年02月05日
    浏览(32)
  • 论文阅读新神器SciSpace(Typeset.io)测评-和AI一起进化

    恳请各位大佬的点赞,您的点赞是我更新的动力! 最近沉迷chat的使用和开发,看到AGI渐渐展现出超过人类的能力,一方面让我感到焦虑,另外一方面又让人感到兴奋。 如何让AI的发展趋利避害,扬长避短?更好的助力人类“进化”? 作为一个强化学习方向的在读博士生,我

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包