BEP20 代币合约中的 Rebase 函数
Rebase function in BEP20 token contract
任何人都可以向我解释一下这个 solidity 代码的 rebase 函数吗?我正在构建像 Titano 这样的 rebase 令牌。
function rebase(uint256 epoch, int256 supplyDelta)
external
onlyOwner
returns (uint256)
{
require(!inSwap, "Try again");
if (supplyDelta == 0) {
emit LogRebase(epoch, _totalSupply);
return _totalSupply;
}
if (supplyDelta < 0) {
_totalSupply = _totalSupply.sub(uint256(-supplyDelta));
} else {
_totalSupply = _totalSupply.add(uint256(supplyDelta));
}
if (_totalSupply > MAX_SUPPLY) {
_totalSupply = MAX_SUPPLY;
}
_gonsPerFragment = TOTAL_GONS.div(_totalSupply);
pairContract.sync();
emit LogRebase(epoch, _totalSupply);
return _totalSupply;
}
您可以看到合约的完整代码here。
它通过 supplyDelta
参数值改变总供应量。
rebase 代币的一种常用方法是存储每个持有人的股份百分比,而不是他们的绝对代币数量。然后,他们的实际代币数量通过将股权百分比乘以一个变量来计算 - 在本例中为 _gonsPerFragment
值。
示例:
总供应量 100,Alice 拥有 80%,Bob 拥有 20% 的代币。这使得 Alice 拥有 80 个代币,Bob 拥有 20 个代币。
现在让我们开始一个新的纪元,rebase 总供应量增加 200,使其总数达到 300。Alice 现在拥有 240 个代币(仍然是 80%),Bob 现在拥有60 个代币(仍为 20%)。
但是如何自动执行此变基?尽管有它的名字,但以太坊中的“智能”合约并不是 self-executing。您需要外部资源(人或机器)来调用智能合约并执行其代码。
任何人都可以向我解释一下这个 solidity 代码的 rebase 函数吗?我正在构建像 Titano 这样的 rebase 令牌。
function rebase(uint256 epoch, int256 supplyDelta)
external
onlyOwner
returns (uint256)
{
require(!inSwap, "Try again");
if (supplyDelta == 0) {
emit LogRebase(epoch, _totalSupply);
return _totalSupply;
}
if (supplyDelta < 0) {
_totalSupply = _totalSupply.sub(uint256(-supplyDelta));
} else {
_totalSupply = _totalSupply.add(uint256(supplyDelta));
}
if (_totalSupply > MAX_SUPPLY) {
_totalSupply = MAX_SUPPLY;
}
_gonsPerFragment = TOTAL_GONS.div(_totalSupply);
pairContract.sync();
emit LogRebase(epoch, _totalSupply);
return _totalSupply;
}
您可以看到合约的完整代码here。
它通过 supplyDelta
参数值改变总供应量。
rebase 代币的一种常用方法是存储每个持有人的股份百分比,而不是他们的绝对代币数量。然后,他们的实际代币数量通过将股权百分比乘以一个变量来计算 - 在本例中为 _gonsPerFragment
值。
示例:
总供应量 100,Alice 拥有 80%,Bob 拥有 20% 的代币。这使得 Alice 拥有 80 个代币,Bob 拥有 20 个代币。
现在让我们开始一个新的纪元,rebase 总供应量增加 200,使其总数达到 300。Alice 现在拥有 240 个代币(仍然是 80%),Bob 现在拥有60 个代币(仍为 20%)。
但是如何自动执行此变基?尽管有它的名字,但以太坊中的“智能”合约并不是 self-executing。您需要外部资源(人或机器)来调用智能合约并执行其代码。