Bonding Curve 是一个通过预先设定的曲线,来确定 Token 供应量与 Token 价格关系的函数曲线。 即 Token 价格 = f(Token 供应量)。
特点: 价格很难被恶意操纵。 项目方不能通过保留 99% 的代币实现砸盘。
在 Bonding Curve 上,所有的 Token 都是通过将锚定资产打入铸造合约来铸造产生的。 比如用 ETH 作为锚定资产铸造 Token 代币:
- 打入 ETH,获得 Token 代币
- 代入 Token 代币,获取 ETH
ETH 所需的数量和 Token 代币的数量由 Bonding Curve 决定。
要得到在 Bonding Curve 下两种代币之间的关系,我们需要对曲线函数进行积分计算。
比如对于函数曲线
因此有 k 和 p 的关系为:
其中
例如
以及对应的 solidity 代码:
function calculatePurchaseReturn(
uint256 _totalSupply,
uint256 _depositAmount
) public pure returns (uint256) {
uint256 temp = 1000*_depositAmount + _totalSupply*_totalSupply*_totalSupply;
temp = powerOneThird(temp); // temp^(1/3)
return temp - _totalSupply;
}
在实际情况中,我们使用Bancor Bonding Curve 公式来简化计算和避免整数计算溢出。
定义 $$ F = \frac{R}{S * P}$$
其中:
- F: 表示锚定资产比例
- R: 表示锚定资产数量
- S: Token 的供应量
- P: Token 的价格
锚定资产比例 = 1 是常数价格曲线。 锚定资产比例 = 1/2 是线性价格曲线。 锚定资产比例 < 1/2 是下凹价格曲线。 锚定资产比例 > 1/2 是上凸价格曲线。
我们还可以得到两个公式:
计算使用锚定资产($E$)买入Token的数量($T$):
计算卖出Token数量($T$)所得到的锚定资产($E$):
参考: