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。您需要外部资源(人或机器)来调用智能合约并执行其代码。