马蹄链智能合约开发方案丨马蹄链智能合约系统开发(开发说明))
智能合约(或称加密合约)是一种计算机程序,搭建案例:I35 开发 7O98 系统 O7I8 在一定条件下直接自动控制双方的数字资产转移。智能合约的工作方式与传统合约相同,同时也自动执行合约。
智能合约是完全按照其创建者的设置(编码,编程)执行的程序。就像传统合同可由法律强制执行一样,智能合同可由代码强制执行。
代码逐行解读
确定的使用的 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 代币合约。最后一个花括号是作用域开始。
contract UniswapV2ERC20 is IUniswapV2ERC20{
代表在 uint256(uint 是它的同名)类型上使用 SafeMath 库。Solidity 中库函数在指定调用实例时(例如本例中的.sub 等)和 Rust 语言中的结构体的方法类似,实例自动作为库函数中的第一个参数。
using SafeMath for uint256;
这三行代码定义了 ERC20 代币的三个对外状态变量(代币元数据):名称,符号和精度。这里的精度就是小数点位数。注意,由于该合约为交易对合约的父合约,而交易对合约是可以创建无数个的,所以这无数个交易对合约中的 ERC20 代币的名称、符号和精度都一样。我们平常在交易所中看到的只是 ERC20 代币的符号,从这里可以看出,符号是可以重复的,并不是唯一确定的。代币之间根本区别是合约地址,这个是唯一的,不同的地址就是不同的代币,哪怕合约代码完全一样。
//token 名称,案例及模式:MrsFu123
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;
评论