关于 FERC V3 代币发行的几个问题
Roll
UPS
Rollup
发币为什么采取合约铸造方式而不是发放方式?FERC V3 版的顶(Cap)如何计算?如何确保实际发行总量不可篡改,无法增发?
撰文:jackygu.eth
关于 FERC V3 平台发行代币过程中涉及的较多关心的问题,做如下解释:
1- 发币为什么采取合约铸造方式而不是发放方式?
合约中使用 _mint() 方法实现铸币,并通过 maxRollups 来控制总量。
铸造(mint)方式与一次性发放全部数量到某个地址的发放(issue)方式的不同之处在于:
铸造(mint)方式:
铸币人(或称受益人)主动触发智能合约的 mint 方法,从0x0
地址发送代币至受益人地址(或其指定的地址)。对于无owner
权限的合约,一般采取此方式。为了防止无限量铸造(增发),通常会设置一个不可更改的顶(Cap)来控制总量;
其特点有:
- 总量,即在区块链浏览器中会看到
total supply
会随着铸造进程增长,直到触及实际发行总量; - 从用户角度看,币是从
0x0
地址发放到他们账户的; - 铸造过程完全由发起铸币的人控制,不受任何第三方(包括项目方)控制;
发放(issue)方式:
一般由合约部署人(owner)主动触发 mint 方法,一次性将所有代币从0x0
地址发送至部署人地址或其指定的收币人地址,然后由部署人转分发至其他受益人。一般这类合约会将 mint 方法放在合约的构造方法中在部署合约时一次性执行,也就是不允许之后再次铸造(增发)。
其特点有:
- 总量不变
- 从用户角度看,币是从部署人(或项目方)账户发放到他们账户的;
- 铸造过程一般会由项目方手动(或通过智能合约)操作,比如确定收到参与人一定款项后,再将币发送至参与人;
2- FERC V3 版的顶(Cap)如何计算?
Ferc V3 有免费和 Fair Token Offering(FTO)两种铸币模式,前者的顶(Cap)与通常的理解无二,而对于 FTO,因为部署人(Deployer)可自行设定进入流动池的 Token 数量,所以将无法用 Cap 来简单的控制总量,所以我们使用最大铸造次数(Max Rollup)来控制总量。而由此得到的实际顶(Actural Cap)通常会小于部署时设定的理论顶 Cap,之间的差额将永远无法被铸造出来。
公式如下:
Max Rollup = Math.floor(Cap * (1- Rate of token to LP) / LimitPerMint)Actural Cap = Max Rollup * LimitPerMint / (1 - Rate of token to LP)
举例:
- 理论硬顶 (Cap):10,000,000 个
- 单次铸造数量 (LimitPerMint):3,000 个 / 次
- 流动性占比 (TLR Rate of token to LP): 41.18%
计算结果:
- Max Rollup = Math.floor(10,000,000 * (1 - 41.18%)/3,000 = 1960
- Actural Cap = 1960 * 3,000 / (1 - 41.18%) = 9,996,599.80
- 相差:
3400.2
个,将永远无法铸造,占理论总量的 0.034%
3- 如何确保实际发行总量不可篡改,无法增发?
从上述公式可知,代币的实际发行总量(Actura Cap)
由以下三个参数决定:
- 部署人设定的
理论顶(Cap)
流动性占比(Rate of token to LP)
单次铸造数量(Limit Per Mint)
在已验证的代币合约源码中,可以看到上述三个参数均在代币构造函数中一次性设定,且代币合约无 owner 权限,该三项属性的不可篡改性决定了实际硬顶无法被突破。
在 mint() 方法中,只要通过检验maxRollups
即可方便的判断是否超过实际硬顶:
function mint(address _to) payable public { equire(totalRollups + 1 <= ferc20.maxRollups, "Touched cap"); ...}
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表Bi123的观点或立场