Solidity

uniswap/sushiswap 如何分配他們的費用?

  • May 19, 2021

據我所知,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%)。

uniswap 文件

準確地說,這個公式的程式碼在核心儲存庫中:

程式碼

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%

引用自:https://ethereum.stackexchange.com/questions/98958