赞
踩
一、说明
ERC314协议标准为通过实现IERC314接口标准,创建可以直接通过合约地址进行代币的买卖交易的合约。不再需要借助去中心化的dex(uniswap,sushiswap,pancakeswap)进行代币的定价和线上交易。从而可以有效的降低交易的gas费用。ETH链上代币在uniswap进行交易时,交易比较拥堵的情况下gas费用可达到一百到几百usdt。手续费过高,导致用户交易代币时需要支付高额的gas费用。ERC314协议通过将swap交易从dex解脱出来,迁移到合约本身进行交易,从而减少了在dex中swap交易过程中的获取公共资源lock,update资金池代币余额reserve,emit提交tranfer等相关的事件来降低gas费用。
目前ERC314协议已经扩展到所有支持ERC20标准的ETH侧链上,包括ARB,OP,Polygon Network,BASE,BSC,OPBNB等。
ERC314协议标准目前已经在BSC链上实现了重定义。有望成为即ERC721协议标准后主流的协议。区别于ERC404协议,ERC404是将代币和NFT进行联动,只是对现有的技术方案进行了业务层面的整合,而非技术性的革新。ERC314标准完全对传统的DEFI协议中的关键环节dex进行了剥离,不再需要依赖dex即可进行线上的swap,重新掌握了流量入口。
二、ERC314功能说明
ERC314可以摆脱DEX直接进行线上的swap,并可以灵活定制交易的fee和税费。
通过交易的冷却时间和单个区块的交易限制彻底解决了MVE夹子攻击
通过增加单个钱包地址的交易限制,解决巨鲸持仓问题
可以实现绕过dex直接进行线上的swap交易,用户向合约地址转账WETH后就可以根据当前代币的价格买入对应数量的代币,将代币转账到合约地址即可根据当前代币的价格实时的计算出兑换的WETH数量,实现代币的卖出操作。
可以直接添加流动性获取LP后,锁仓LP固定时间,实现流动性的固定时间锁仓
通过燃烧底池固定比例,固定频率的燃烧底池中的代币,实现代币价格的被动上涨
314协议的缺点也比较多,为了解决多线程的并发问题牺牲合约性能,通过限制单个地址的交易冷却时间来减少系统的并发交易数量。以此来代替在dex中执行_swap交易时对资金池资源的lock()资源等待,严重降低了整体的性能。同时确实了对swap交易价格的有效维护机制,没有对reserver的_update控制和交易完成后的资金池账号本sync(),导致交易价格紊乱。一旦出现大额的交易,会导致资金池价格的剧烈波动。
三、BSC314协议代币源代码部署、添加流动性、锁仓LP固定时间操作流程
设置remix编译器相关编译参数环境配置
常规方式部署合约源码即可,合约部署完成后开源合约,配合合约参数
2.编译合约源代码后部署合约
选择metamask钱包,切换到BSC链,正确显示当前链接钱包的地址以及余额。
选择要部署的目标合约,执行合约的部署
3.开源bsc314合约源代码
使用部署合约的源代码已经输入的构造函数参数,按照部署实时的编译器版本,合约部署方式,类库文件,优化等级等参数开源合约,合约后效果如下。
4.添加流动性,启动线上交易
合约部署开源完成后需要添加流动性并锁仓固定时间后,才能实现代币的交易定价,开启线上的代币兑换交易。ERC314协议添加流动性与dex(uniswap,pancakeswap,sushiswap)等添加流动性的方式不同。dex添加流动性的方式是直接在图形界面中初始化添加流动性并完成代币的定价即可。但是,BSC314协议是通过如下核心代码来识别流动性的添加动作:
function _isAddLiquidity()internal view returns(bool isAdd){
IPancakePair mainPair=IPancakePair(_uniswapV2UsdtPair);
(uint r0,uint256 r1,)=mainPair.getReserves();
address tokenOther=_usdtAddress;
uint256 r;
if(tokenOther<address(this)){
r=r0;
}else{
r=r1;
}
uint bal=IERC20(tokenOther).balanceOf(address(mainPair));
isAdd=bal>r;
}
314协议实际添加流动性并实现有效锁仓LP的功能模块代码如下:
function addLiquidity(uint32 _blockToUnlockLiquidity)public payable onlyOwner{
require(liquidityAdded==false,'Liquidity already added');
liquidityAdded=true;
require(msg.value>0,'No ETH sent');
require(block.number<_blockToUnlockLiquidity,'Block number too low');
blockToUnlockLiquidity=_blockToUnlockLiquidity;
tradingEnable=true;
liquidityProvider=msg.sender;
emit AddLiquidity(_blockToUnlockLiquidity,msg.value);
}
添加bnb进入资金池合约地址,设置解锁的区块高度,同时开启314显示的swap兑换交易。
通过如下核心代码来识别撤销流动性:
function _isRemoveLiquidity()internal view returns(bool isRemove){
IPancakePair mainPair=IPancakePair(_uniswapV2UsdtPair);
(uint r0,uint256 r1,)=mainPair.getReserves();
address tokenOther=_usdtAddress;
uint256 r;
if(tokenOther<address(this)){
r=r0;
}else{
r=r1;
}
uint bal=IERC20(tokenOther).balanceOf(address(mainPair));
isRemove=r>=bal;
}
314协议实际撤销流动性的功能模块代码如下:
function removeLiquidity()public onlyLiquidityProvider{
require(block.number>blockToUnlockLiquidity,'Liquidity locked');
tradingEnable=false;
payable(msg.sender).transfer(address(this).balance);
emit RemoveLiquidity(address(this).balance);
}
通过如下核心代码来计算代币买卖的价格
function getAmountOut(uint256 value,bool _buy)public view returns(uint256){
(uint256 reserveETH,uint256 reserveToken)=getReserves();
if(_buy){
return(value*reserveToken)/(reserveETH+value);
}else{
return(value*reserveETH)/(reserveToken+value);
}
}
5.上线ave后可以正确识别代币的风险性异常
正确识别LP锁仓固定时间,显示锁仓的开始时间,解锁开始日期,解锁结束日期。流动性的仓位情况等,实际显示效果如下:
至此,完成BSC314协议代币源代码部署、添加流动性、锁仓LP固定时间操作全流程所有操作流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。