随着defi的快速发展,基与主流公链上的通证token已经出现了多样化的模式。从最初的以太坊上标准代币的ico,到各大主流交易所的IEO,发展到现在defi已经原来越平民化。区块链技术已经逐步推广开来。defi的发展离不开DEX(去中心化交易)的进步。目前配合各大公链的主流dex以及公链的执行效率和共识度大致如下:
公链名称 | 通证TOKEN | 去中心交易所DEX | GAS费用 | 执行效率 | 用户共识 |
以太坊 | ETH | uniswap | 最高 | 最慢 | 最高 |
波场 | TRX | justswap | 最低 | 最快 | 较高 |
币安智能链 | BNB | pancakeswap | 较高 | 较块 | 一般 |
火币链 | HT | mdex | 较低 | 较块 | 较低 |
无论是基于ETH,TRX,BSC,HECO任何一条公链,底层的token通知的实现都实现最基本的ERC20协议,都是基于solidtiy语言开发的智能合约,必然要实现固定的接口规范。当然在具体的合约实现过程中可能会有区别。鉴于DEFI通证多模式的发展本教材提供如下几种模式:通缩、燃烧、指定地址回流、持币分红、加权分红、平均分红等几种模式的源代码,供读者学习研究区块链技术本身使用。
特此声明:
本源代码仅供学习研究区块链技术本身使用,不得用于商业用途,非法使用该源代码造成的后果与作者无关。
多种通缩、燃烧、持币分红、加权分红模式的合约代码github下载地址:
注:加权分红和持币分红的区别:
加权分红是按照每个地址的持币量的权重获得交易分红,持币量越多,分红越多。
平均分红是每个地址获得固定比例的交易分红,不计算持币量。
具体的操作步骤如下:
第一步:修改代币基本信息
首先我们需要有一套代码文件,然后打开文件 “Token.sol”,选择以“记事本”的方式打开,然后找到最后几行代码,进行修改,修改方式如下
分别对应代币全称、简称、发行数量。
示例中,代币英文全称“PlayToken”,简称“PTO”,数量8888,精度8,代码如下
第二步:修改通缩(燃烧)率
然后就修改通缩率,我们打开文件夹里的“ERC20.sol”文件,打开方式同上,然后搜索“IERC20-transfer”,找到transfer函数,就是下面我选中的这几列,大概在50多行:代币通缩模式的区别主要在transfer函数的实现上。该函数是标准的ERC20接口函数。
然后我们可以看到一行代码是“recipient` cannot be the zero address”,这句话的意思是,通缩销毁的代币会打入黑洞。对应的链上黑洞地址为0x0 ,十六进制ERC20地址,主要修改的是下图中的两行:
第一行:amount*90/100,代表的是每一次转账或者交易,对方只能获得实际量的90%。比如说,你转100个代币给另一个账号,对方实际只能得到90个,即你的通缩率是10%。
第二行:amount*10/100,代表的是说,你转出的代币,有10%进入黑洞。即,你转账100个代币,对方实际收到90个,另外10个转入黑洞。
因此,如果你要设置通缩率,只需要修改“90/100”和“10/100”这两对数字就行,后面的100不用动。比如通缩率是20,那你就相应的改成:“80/100”和“20/100”即可,非常简单。这里的通缩燃烧,均适用于justswap资金池,即每一次在justswap交易,都会燃烧。
为了方便演示,这个通缩率就暂定10%了,下面我发个币给大家看下。发币教程就不重复演示了,直接上结果。
第三步:验证代码真实性
简单对上述代码进行了一次部署,花了60万能量,具体能力的花费根据链上的繁忙程度,来链上越拥堵,需要的能力就越高。另外和合约的复杂程度有关,合约代码越复杂,需要的能量就越高,合约地址是:TDdHBihVwkvhZgcCRbVMt6v8kbF6FjDjoG
然后做一下通证录入,和之前的流程一样,很简单。(合约验证就不做了,麻烦)
然后现在要直接转账。先把代币搜出来,添加到钱包里,具体操作如下图:
然后开始转账,设定转账1000个到地址TEbAaWcpFKSCRYNYJwSggx4S73o1EJVYtP:
然后我登陆另一个钱包会发现,实际到账只有900个:
另外100个去了哪里?直接进入了黑洞地址(波场的黑洞地址是T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb),你也可以理解,这100 在转账的时候燃烧掉了,这就是整个通缩合约的演示。
怎么证明以上的转账不是我P图或者造假的?两个验证方法:第一,查询交易哈希。第二,查询通证持有账号。
1、查询交易哈希
在浏览器里查询交易哈希也可以发现,这笔交易实际上分成了两笔:100个和900个。(uint256 value显示的数量,去掉精度8个0,就是实际数量)。100个的那笔,转账转入了黑洞地址。900个的那笔,转账转入了实际地址。
2、查询通证持有者
通过查询通证持有人可以发现,这个代币目前只有两个地址持有,就是刚才转账发起者和转账收款人这两个,黑洞地址不显示。其中,转账发起者现有7888个代币(本来是8888个,转走了1000个),收款者拥有900个代币,与上述情况对应,可证明代码无误,通缩没问题。
第四步:其他模式的拓展
基于以上的通缩代码,可以衍生出多个模式制度出来,比如限制通缩、分红、回流等。
这里就“限制通缩”简单说一下,比如上面那个代码是“仅通缩”,那么就意味着,代币会一直通缩下去,直至变为0。有些人不希望这样,希望能通缩到某个固定的数值,比如从8888通缩到888,其实这个也不难。只需要在代码里加两行限制通缩的代码即可,如下:
“MAX_STOP_FEE_TOTAL”代表的就是限制数量,当通缩至某个数量的时候,就会停止通缩与回流,从而让代币数量保持恒定。
_transfer函数部分核心代码如下:
function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(_tTotal <= MAX_STOP_FEE_TOTAL) { removeAllFee(); _transferStandard(sender, recipient, amount); } else { if(_isExcludedFromFee[sender]) removeAllFee(); _transferStandard(sender, recipient, amount); if(_isExcludedFromFee[sender]) restoreAllFee(); } }
_transferStandard函数部分核心代码如下:
function _transferStandard(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tFund) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _rOwned[fundAddress] = _rOwned[fundAddress].add(tFund.mul(currentRate)); _reflectFee(rFee, tBurn.mul(currentRate), tFee, tBurn); emit Transfer(sender, recipient, tTransferAmount); emit Transfer(sender, _burnPool, tBurn); emit Transfer(sender, fundAddress, tFund); }
代码部分就讲到这里,另外的分红、回流等代码,这里就不给大家展示了,随教程提供代码如下供学习研究。
通缩、燃烧、指定地址回流、加权分红等模式智能合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册