uniswap/sushiswap 如何分配他們的費用?
據我所知,Sushiswap 收取 0.3% 的費用,然後分成兩部分
- 0.25% 歸 LP 供應商
- 0.05% 去國庫燒掉
請注意,未指示 0.5% 但我想在查看程式碼後就是這種情況,
const BASE_FEE = new Percent(JSBI.BigInt(30), JSBI.BigInt(10000))
並且 0.05% 必須去某個地方,例如煎餅正在燃燒它現在,正如我上面提到的,費用是在前端程式碼中定義的,
JSBI.BigInt(30)
. 但我找不到他們在哪里分攤這 30 美元的費用。後端有一個程式碼,Uniswap 白皮書 (v2) 中也說明了一個公式,這可能正在起作用。他們提到了 sqrt(k) 中 1/6 的增長,最初我不明白這與公式或這種費用分配有什麼關係(是的,我對數學很笨)。
我的扣除是這樣的 - 1/6(大約是 1.16)乘以 0.3%,他們的初始費用,你得到 0.048 即 0.05 對嗎?並且由於國庫費也是0.05,是這樣嗎?
對於復核,我對 pancakeswap 做了同樣的事情,它收取 0.2% 的
JSBI.BigInt(20)
費用,和上面一樣你得到 0.032 即 0.03,他們的國庫分配是 0.3%。我知道,我可能正在尋找一個大巧合,或者只是數字遊戲,這對於經驗豐富的開發人員來說可能聽起來有點愚蠢,但我會冒險問 -在程式碼中,shushiswap 或 uniswap 0.3% 的費用在哪里分為 LP 提供商和國庫。
好吧,經過一些研究,我可以回答我的問題。
我確實是對的,國庫費是總費用的 1/6(16.6%)。
準確地說,這個公式的程式碼在核心儲存庫中:
unction _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) { address feeTo = IShuttleFactory(factory).feeTo(); feeOn = feeTo != address(0); uint _kLast = kLast; // gas savings if (feeOn) { if (_kLast != 0) { uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1)); uint rootKLast = Math.sqrt(_kLast); if (rootK > rootKLast) { uint numerator = totalSupply.mul(rootK.sub(rootKLast)); uint denominator = rootK.mul(5).add(rootKLast); uint liquidity = numerator / denominator; if (liquidity > 0) _mint(feeTo, liquidity); } } } else if (_kLast != 0) { kLast = 0; } }
正如我所提到的,總費用在前端程式碼中聲明為一個基點(0.3%):
const BASE_FEE = new Percent(JSBI.BigInt(30), JSBI.BigInt(10000))
因此,對於 Uniswap:
0.3$ 是總費用,乘以 1/6 是 0.05,他們的國庫費。如果不收取此費用,LP 提供商將獲得全額 0.3%,因此開啟費用不會改變交易者的任何東西,他們仍將支付相同的金額,但在這種情況下,LP 提供商將僅獲得 0.25%