DAPP马蹄链智能合约系统丨DAPP马蹄链智能合约系统开发(案例)丨DAPP马蹄链开发源码
智能合约(或称加密合约)是一种计算机程序,在一定条件下直接自动控制双方的数字资产转移。智能合约的工作方式与传统合约相同,同时也自动执行合约。
智能合约是完全按照其创建者的设置(编码,编程)执行的程序。就像传统合同可由法律强制执行一样,智能合同可由代码强制执行。
代码逐行解读
确定的使用的Solidity版本
pragma solidity=0.5.16;
这两行导入了该合约必须实现的接口IUniswapV2ERC20.sol和一个防溢出的数学工具库SafeMath。一个合约实现的接口代表了它的基本功能;防溢出数学工具库应用很常见,主要是因为数值是可以无限大的,但是存储位数是有限的。例如最大256位,因此最大的无符号整数就是是2**256-1。再大就会溢出,这时就会得到预期外的结果。
另外,因为在Solidity中,应用最多的是无符号整数,如果减法得到了负数,根据二进制的表示法,结果会被认为成另一个无符号整数。在早期的智能合约中,存在溢出漏洞或者得到负值而遭受损失的情况。当前编写的智能合约一般都会防范这种问题的发生,使用SafeMath工具库是最常见的预防手段。注意,该库里只有加、减和乘三种计算,没有除法。因为除法不会有溢出;如果被零除,Solidity语言本身会报错重置整个交易,不需要额外处理。
import"./interfaces/IUniswapV2ERC20.sol";
import"./libraries/SafeMath.sol";
定义了该合约必须实现导入的IUniswapV2ERC20接口。该接口是由标准ERC20接口加上自定义的线下签名消息支持接口组成,所以UniswapV2ERC20也是一个ERC20代币合约。最后一个花括号是作用域开始。开发需求I59案例2oo7详细3O69
contract UniswapV2ERC20 is IUniswapV2ERC20{
代表在uint256(uint是它的同名)类型上使用SafeMath库。Solidity中库函数在指定调用实例时(例如本例中的.sub等)和Rust语言中的结构体的方法类似,实例自动作为库函数中的第一个参数。
using SafeMath for uint256;
这三行代码定义了ERC20代币的三个对外状态变量(代币元数据):名称,符号和精度。这里的精度就是小数点位数。注意,由于该合约为交易对合约的父合约,而交易对合约是可以创建无数个的,所以这无数个交易对合约中的ERC20代币的名称、符号和精度都一样。我们平常在交易所中看到的只是ERC20代币的符号,从这里可以看出,符号是可以重复的,并不是唯一确定的。代币之间根本区别是合约地址,这个是唯一的,不同的地址就是不同的代币,哪怕合约代码完全一样。
//token名称,案例及模式:yy625019
string public constant name="Uniswap V2";
//token缩写
string public constant symbol="UNI-V2";
//token精度
uint8 public constant decimals=18;
记录代币发行总量的状态变量。为什么是访问权限是public的呢?主要是利用编译器的自动构造同名函数功能来实现相应接口。
uint256 public totalSupply;
用一个map记录每个地址的代币余额
mapping(address=>uint256)public balanceOf;