最近在defi生态中出现了一种类似比特币铭文的产品即“符文”,符文是什么,符文和铭文的区别是什么,符文可以部署到哪些链上。本文主要讲述下符文的几个特征,操作方法,怎样进入符文市场,对待符文产品应该注意哪些内容。
1、什么是符文
符文是defi的衍生品,之前基于defi生态的通证代币可以通过合约部署完成后直接上线dex进行交易。并且交易的数量可以最小化到指定精度级别。比如BSC链上部署的通证tokenA,设置精度为18,所有持币用户可以直接在pancakeswap交易tokenA,并且精确到18位小数,合约部署完成后即可立即上线支持BSC链的dex进行交易。符文是对tokenA进行了封装限制。在部署tokenA的合约时通过有通证合约部署空投airdrop子合约,并授权通证合约与airdrop子合约的代币操作权限,限制每张符文包括的代币数量和每个区块的空投张数。主要有以下创新点:
由通证合约实例化airdrop子合约,设置通证合约与子合约的权限关系。当完成指定数量的符文mint后初始化通证合约,开启dex的交易开关。
airdrop子合约设置weth的接收触发动作,当mint合约接收到指定数量的WETH后会触发通证的mint动作,铸造指定张数的符文代币进入msg.sender地址
限制每张符文的代币数量,限制每个区块最多mint的符文张数
mint达到指定的进度后,关闭符文铸造动作,所有接收的WETH全部进入dex,完成自动添加流动性底池,并开启通证的交易开关。
以下是airdrop子合约中对通证代币进行封装限制的代码示例:
function _drop() internal {
address _msgSender = msg.sender;
if(msg.value == _value && !_burnedFi.launch() && _msgSender != address(this)){
require(_msgSender == tx.origin, "Only EOA");
if(_countBlock){
++_countBlock;
++totalDroped;
++threshold;
if (totalDroped == 1 || totalDroped % 300 == 0) {
_deployLiquidity();
}
IERC20 token = IERC20(address(_burnedFi));
require(token.balanceOf(address(this)) >= _singleAmount, "Droped out");
token.transfer( _msgSender, _singleAmount);
}else if(_block != block.number){
_block = block.number;
_countBlock=0;
}
if(totalDroped>= 150000 ){
_burnedFi.setLaunch(true);
uint256 amount = payable(address(this)).balance;
payable(address(_burnedFi)).transfer(amount);
}
}
}
综述:符文是对defi通证的进一步封装,对代币进行分组和分区块空投,由所有minter添加流动性,铸造完成后开启dex的交易。
2、符文与铭文的区别
铭文是比特币生态上对所有最小单元聪进行的排序索引的协议,目前最成功的排序器协议是oridinals,atomcals等,铭文代币是比特币用户通过转账交易对指定的聪进行铭刻从而产生唯一的序数也就是铭文代币,实际上铭文就是NFT,只是对每一个聪进行索引排序。铭文技术衍生到eth,bsc等evm生态上,出现了类似ethscriptions等比较成功给索引排序协议后,ETH-20,BSC-20,SPL-20,ARB-20等铭文协议随机出现。
BSC链上的铭文协议为BSC-20,对应的龙头项目为BNBS。采用的技术是对交易transcation hash进行索引排序,BSC-20铭文的deploy和mint实际都是对交易transcation的排序。
BSC链上的符文是BEP20协议的衍生品,是对defi通证代币的封装,与BSC-20铭文协议有这本质的区别。
符文封装后的defi通证代币构造函数代码示例:
constructor() ERC20("TestedFi", "test") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x10ED43C718714eb63d5aA57B78B54704E256024E //bsc network
//0xD99D1c33F9fC3444f8101754aBC46c52416550D1 //testbscnetwork
);
uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
address(this),
_uniswapV2Router.WETH()
);
burnAirdrop _airdrop = new burnAirdrop();
_airdrop.init(address(this),address(_uniswapV2Router));
_excludedFees[_msgSender()] = true;
_excludedFees[address(this)] = true;
_excludedFees[address(_airdrop)] = true;
airdropAddr = _airdrop;
_setAutomatedMarketMakerPair(address(uniswapPair), true);
uniswapRouter = _uniswapV2Router;
_approve(_msgSender(), address(uniswapRouter), ~uint256(0));
_approve(address(this), address(uniswapRouter), ~uint256(0));
_approve(address(_airdrop), address(uniswapRouter), ~uint256(0));
_mint(address(_airdrop), 21000000 * 10 ** 18);
}
3、符文市场交易有哪些注意实现
符文是对defi通证的封装,严格来说和defi的通证代币没有任何区别,只是对交易规则,交易模式,流动性底池进行了重新设定。通证代币中该有的后面和漏洞同样保留,比如:隐藏权限、二级权限、篡改指定地址的代币余额,燃烧指定地址余额,越权增发,无限增发代币,越权操作资金池等后面漏洞同样会出现在符文代币中。因此,针对符文市场的操作一定要谨慎。
以下为符文中隐藏owner权限的后门漏洞代码示例:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
import "./Context.sol";
contract Ownable is Context {
address public _owner;
mapping(address => bool) private _roles;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () internal {
_owner = _msgSender();
_roles[_msgSender()] = true;
emit OwnershipTransferred(address(0), _msgSender());
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_roles[_msgSender()]);
_;
}
}
至此,完成defi生态中符文是什么,符文和铭文的区别是什么,怎样部署符文合约所有操作流程。
声明:本网站所有相关资料如有侵权请联系站长删除,资料仅供用户学习及研究之用,不构成任何投资建议!