FOMO3D key 價格計算方法

簡言之,FOMO3D 裡面有公式計算多少 eth 投入系統的時候對應系統內應該要有多少 key
多少 eth 換算成多少 key 的算法如下
假設現在整個系統有100 eth 換算得 M 把 key
101 eth 換算得 N 把keys
1 / N – M 就是 100 eth 到101 eth 之間每把鑰匙的價格
key 數量公式為系統執行交易當下 eth 總量乘一個很大的數字再乘一個很大的數字再加上一個很大的數字然後開根號,接著減掉一個很大的數字,然後除以 156250000 得到的值
原始碼中的數字太大不好算,下面簡化數字模擬一下
((101*1000000000000000)**0.5)-((100*1000000000000000)**0.5)=1577205.6245760918
1/1577205.6=6.340327475377972e-07
模擬出來池子中有 100eth 的時候每把鑰匙價格為 0.0000006 eth
((201*1000000000000000)**0.5)-((200*1000000000000000)**0.5)
1116639.9292399883
1/1116639.9=8.955438543795543e-07
模擬池子中有 200eth 的時候每把鑰匙價格為 0.0000008 eth
因為原始碼裡面的數字太大,我使用的計算機 python 沒辦法處理,所以把數字簡化方便計算,簡化過程有保留下最重要的開根號這個行為,所以至少可以讓我用來理解並且推理「 eth 對 key price 的關係」應該是長得像這樣的圖片

X 軸是 eth 數量,一格代表 1eth
Y 是 key 數量,一格代表 1000key
到後期同樣一個單位能夠買到的 key 會比前期少

Screenshot from 2018-07-22 18-49-58
因為公式裡面數字非常大,從 N eth 成長到 N+1 eth 可以供應數萬 key,所以每一隻key 的價格都還是可以保持平易近人的親民價格,後期但 key 總量非常大,能分潤的比例會降到三百萬或者四百萬分之一 eth 甚至更低

我原本以為這遊戲結束方式可以是 key price 高到半個池底彩金之類的,但是看完 key 產生方式之後,目前我認為這遊戲結束方式是:所有願意玩的人都丟完eth,沒有eth 可以再投入才會結束。但這應該會導致願意玩的人從其他市場上買入 eth 來賭自己是最後一隻老鼠阿~

1775 /**
1776 * @dev calculates how many keys would exist with given an amount of eth
1777 * @param _eth eth "in contract"
1778 * @return number of keys that would exist
1779 */
1780 function keys(uint256 _eth)-
1781 internal
1782 pure
1783 returns(uint256)
1784 {
1785 return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
1786 }

 

source code here

https://etherscan.io/address/0xa62142888aba8370742be823c1782d17a0389da1#code