code

2017年6月28日 星期三

Bitcoin筆記 7 - incentive engineering

鼓勵誠實

之前說到,bitcoin並非用技術克服distributed consensus的難題,有一部分是因為虛擬貨幣應用情境,使得鼓勵動機(incentive) 能用來增進系統可行性。

之前假設多數nodes在bitcoin系統中是誠實的,是一個有問題的假設,bitcoin藉由給予nodes"鼓勵“來提高nodes當好人的動機,這個鼓勵就是“bitcoin”!

Incentive 1 - Block Reward (鼓勵創造block的人)

第一個使用的鼓勵就是讓propose block到long-term consensus block chain的node,能夠獲得一些給付(單位是50 bitcoin,但是每四年減半,目前已經減半一次到25 bitcoin),可以把此行為視為網路參與者的工本費,每一個被選上propose block的node都能在block中加入一筆“創造錢幣”的交易,當然會寫上自己的address。

這邊為何產生鼓勵性?因為如果此block不能進入long-term consensus chain的話,這筆工本費交易當然也無法進入!所以至少,proposed block裡面的交易要是cryptographically valid(誠實),以及其他node要願意認可此block內的交易(?不太清楚定義?),此block才能在幾個回合後變成orphan block。

這也是為什麼bitcoin流通總數只能維持在2100萬個原因:這是一個等比級數,所以會收斂到一個數字,21M。

事實上這也是新的bitcoin能夠被產生的唯一機制!!!!! 除非規則更改了。

Incentive 2 - Transaction fee (創造transaction的人自願性鼓勵block creator)

創造某個transaction的人可以挪一小部分錢幣當作交易費,如果某node propose的block備選中納入long-term chain,則那個block內的所有交易費最終會給此node!這不是強制性的交易費,但是當bitcoin數量達到上限後,要維持網路運作就得靠這個incentive2,目前已經有跡象顯示這個機制慢慢在運作。

Proof of Work

有了以上兩個incentives,是否能對付以下的問題?
1. 怎樣隨機挑選node?
2. 如何避免惡意者一人產生多個node,來搶block reward? (稱為Sybil attack)

第一個隨機挑選問題,由於bitcoin設計出來就是抱持decentralization的精神,所以隨機挑選也要能貫徹這個精神,也就是並非真的隨機性,而是依照node對某種資源的多寡比例來挑選,使得這種資源無法被獨佔,並且讓node競爭block creation的權利。Bitcoin選擇的是computing power。

原本一個block的資料結構包含前一個block的hash pointer,以及一些transactions:


現在bitcoin system提出一個hash puzzle:要求每個node去計算一個nonce值放入proposed block,使得整個block(包含nonce) 的hash值落入一個極小的區間內:


所以這變成運氣運氣,也就是綁定資源稀缺性的隨機性。系統可以利用這個target space來控制解謎的成功率,理論上要找到某個hash value,只能暴力去try,在2014年此課程發表之際,每個node 在提出block時需要在2^20個hash values中找到一個hash value,根本跟中樂透差不多。

這是一個bernoulli process,也就是每次trial成功的機率為p,不成功機率為q,一直到成功找到的機率為何?其continuous版本為poisson distribution,其pdf如下圖:


這也造就了所謂的挖礦,因為這個computation其實多數node都放棄去競爭了,少數人願意付出資本去快速找出這個hash puzzle,Bitcoin反而在這部分變成集中化了

另外,為了避免nodes投入更多計算資源而造成block產生速度過快,系統會將block產生的速率訂在平均10分鐘一個(稱為block latency),約兩個禮拜會動態調整hash puzzle的target space一次。所以系統中越多miners,產生block的平均速度越快,則每兩個禮拜就會被調整一次,對miners來說,越多人加入,你要花更多成本才有辦法挖到之前數量的錢幣了。

可以說 P(產出下一個block) ~= computing power / total players' computing power

在這個控制下,某個礦工的個人的block latency可以用下式表示:

如果此礦工掌控了0.1% hash power,則他挖到下一個錢幣的時間平均來說約 10mins / 0.01 ~= 10000分鐘 ~= 7天。

當然最後,找出來的nonce要能被其他所有nodes verify,這又是一個decentralization的運作。

沒有留言:

張貼留言