Thursday, 12 October 2017

ICO 機制

這兩天風風雨雨的一個消息是 Jason Teutsch 與 Vitalik Buterin 提出一個新的 ICO 機制,為了解決以往主流 ICO 機制的缺陷。本文不再重敘原理,而是補充幾個幫助閱讀論文的說明。
我大概花了一天時間昏昏沈沈把論文看過,後來花一天試著把論文中的步驟寫成程式碼,前後對照內文就好理解了。
以往的 ICO 機制出了什麼問題
有兩種主流機制:
Capped: 有固定數量的代幣以固定價格的原生幣販賣。壞處是造成搶購,網路壅塞,而且只有大戶有機會用高手續費或其他技巧搶到、散戶很難搶贏。限量是殘酷的
Uncapped: 代幣無上限,以固定價格販賣。好處是不用搶,人人有機會。壞處是投資人不知道總代幣發行量會跑到哪裡,會希望等待情勢明朗後下手。
這裡要解釋的是為何投資人關心總代幣發行量。買代幣就像買股票一樣:比起買一張還是兩張股票,投資人比較有興趣自己股票佔總股份的比例是 10% 還是 20%,後者才會決定分到的錢錢。在 ICO 的世界裡,雖然會孳息的機會渺茫,但投資人希望自己買到的代幣佔所有代幣發行量的比例越高越好。
Interactive 改善了什麼事?
投資人可以指定可容忍的代幣發行量上限(稱個人容忍上限, personal cap)。投資人同時要指定花多少 ETH 買代幣,可容忍總價值在多少 ETH。例如: Alice 想花 100 ETH 買代幣,但是如果代幣發行量價值超過 10000 ETH , Alice 就不想買了。
整個演算法的核心就是讓所有人在可接受的發行量上限下買到代幣。
Step3 自動退出在做什麼
step3 是演算法的核心,也是最複雜的步驟。
接續前面 Alice 的例子。假設情境一:
目前合約收到的以太幣,也就是總價值,達 12000 ETH (包含 Alice 的 100 ETH)
目前 10000 ETH 是現在最低的個人容忍上限
且 Alice 是唯一個人容忍上限 10000 ETH 的帳戶
那麼就把 Alice 踢掉,不讓 Alice 買。因為把 Alice 的 100 ETH 踢掉,剩下 11900 超過 Alice 個人容忍上限 Alice 也不想買。
但假設情境二,目前總價值 10050 ,代表如果把 Alice 踢掉一半剩 50 ETH 的話,總價值還能符合 Alice 個人容忍上限。
總結而言, Step 3 就是決定是否全踢 Alice ,或是部分踢,來符合所有人的個人容忍上限。並且要考慮多人有相同個人容忍上限的情況。
各種 Gotcha
論文中有很多符號沒有註明單位,要從前後文觀察。可從程式碼看各個 balance 是 ETH 的餘額,還是代幣的餘額。
inflation_ramp 函數的長相,也就是論文的 p(s) ,我理解錯數次。可參考程式碼的寫法。
最低門檻
第七節的 Personal minimums 蠻有意思,講說可用同樣原理實作讓投資人指定想要的募資門檻。假設募資總價值沒超過門檻,投資人就不投了。
參考資源
程式碼
ChihChengLiang/Interactive-Coin-offerings
這篇有許多實際數字的範例,值得一看
Interactive Coin Offering — A Protocol Explained
這篇偏白話文解說
A quick guide to the new Interactive Coin Offering
Interactive coin offerings 筆記 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

No comments:

Post a Comment

how-to-recursively-create-subfolder-in-each-folder-of-a-directory-in-cmd

test.cmd: @echo off setlocal for /f "usebackq tokens=*" %%a in (`dir /b /a:d`) do ( rem enter the directory pushd %%a echo...