什么是线性释放
线性释放(Linear Vesting)一种常见的代币释放机制,指得是:代币按照固定的速率、持续均匀地在设定时间内逐渐释放。而不是一次性就释放完。
为什么需要线性释放
我们来思考一下,假如没有线性释放的场景。就比如,我们作为项目方,将要发行一个叫做 ShawnCoin 的 ERC20 代币,总量为 10 亿。为了奖励投资者(风投机构、私募),我们需要为他们发放 5 亿的代币,如果是一次性释放给他们的话,假如他们马上就抛售代币,会导致币价下跌非常迅猛,直接砸穿币价,散户成为接盘侠。
而有了线性释放的话,我们将代币均匀地按时间分摊释放给到投资者,将降低投资者抛售代币的压力,防止投资者过早跑路。
线性释放的核心流程
为了实现代币线程释放的要求,我们必须要设定一个释放的起始时间 start ,一个释放持续时间 duration 。在合约内,投资者主动调用 release 函数来获取代币,而在这个 release 函数中,我们通过一套数学公式来确定出每个时间片中该释放多少代币。这么讲可能有点抽象,我们通过一个具体例子来展示流程:
核心状态变量
线性释放合约中的核心状态变量有 4 个
核心函数手搓一个线性释放的合约
手搓最小代码实现,参考 OZ 代码库 VestingWallet.sol
forge test --match-path "./test/linearVesting/LinearVestingTest.t.sol" -vvv