今天看到很多人在讨论 #
sato# burn
1️⃣ ethereum:0x829f4b62eebe12af653b4dd4ffc480966f7d7f09 从代码层面
现在burn是不是真销毁,会不会回流到铸造再次铸造出来:
️
先说答案:❗️是真的销毁 ❗️不会回流到铸造池❗️
📢看买入逻辑:
> solidity
uint256 fairSato = Curve.mintFor(ethCum, ethToCurve);
这里 mint 的依据:
🎯不是:
> solidity
totalSupply
🎯而是:
> solidity
ethCum
🎯和
> solidity
totalMintedFair
每次重新计算应该 mint 多少新币
系统不是:池子库存模式
而是:数学曲线实时生成模式
📢看买出逻辑:
当用户卖出 SATO 时,SatoHook 与 PoolManager 的交互如下:
1、代币离手并销毁(在 SatoHook 中)
// SatoHook 执行:
> solidity
POOL_MANAGER.take(SATO_CURRENCY, address(this), satoIn);
SATO_TOKEN.burn(address(this), satoIn);
2、在 PoolManager.sol 中对应:
> solidity
function take(Currency currency, address to, uint256 amount) external onlyWhenUnlocked {
_accountDelta(currency, -(amount.toInt128()), msg.sender); // 记录用户减少了 SATO
currency.transfer(to, amount); // 物理转移给 Hook
}
用户把 SATO 给了 Hook➡️Hook 拿到手的一瞬间➡️立刻执行了 SATO_TOKEN.burn➡️在区块链上,这部分代币的 totalSupply(总供应量)直接减掉了
它没有机会停留在 PoolManager 的池子里,
也没有停留在 Hook 的地址里。
销毁动作: SATO_TOKEN.burn(address(this), satoIn);(在 SatoHook 中)—— 这是死命令,代币在此终结。
拦截回流: toBeforeSwapDelta(...)(在 SatoHook 返回给 PoolManager)—— 告诉 PoolManager:不要把这笔交易记录在你的池子余额里,我自己处理(销毁)了。
买入时发生了什么?
ETH进入系统
↓
曲线计算
↓
mint 新币
↓
发给用户
卖出时发生了什么?
用户交币
↓
burn 销毁
↓
系统按曲线返ETH
2️⃣ #
sato# 从代码层面
为什么销毁和很多人理解的打入黑洞不一样:
👉从 Solidity / ERC20 标准角度
> solidity
SATO_TOKEN.burn(address(this), satoIn);
> solidity
_totalSupply -= amount;
balances[from] -= amount;
emit Transfer(from, address(0), amount);
SatoToken 的 burn() 实现是标准 ERC20Burnable 那种
这是标准意义上的真正销毁
因为:
token 已经
不在任何地址
totalSupply 已减少
永远无法恢复
很多人理解的销毁是转入黑洞地址
但实际上:
现代 ERC20
很多 burn根本不需要:转入黑洞
直接修改 totalSupply