3月5日,藍港互動創始人王峰問比特幣首富:傳言你有6位數比特幣,真的麼?李笑來答:曾經有過,現在沒那麼多。
聽到首富光環叮噹落地的聲音,多少會讓你停頓半秒,雖說去年我們就知道《李笑來的比特幣賬戶並沒有餘額》,但那只是為理解UTXO模型、把銀行的餘額模型抽出來寫的對比文章。
其實,區塊鏈世界也有餘額模型,又稱賬戶模型或賬戶餘額模型。
一、什麼是賬戶餘額模型?
如果UTXO是掰不開的硬幣,那賬戶餘額模型就是撕不掉的存摺,存摺上印著你在區塊鏈上擁有的一切。
我們用以太坊舉例,下文特別感謝Draveness的智力支持,很難找出比他《UTXO與賬戶模型》更簡明的文章,不愧是寫了三年博客的編程大神。
以太坊外觀複雜,但掀開蓋子往裡一看,其實只有三塊鋼板:賬戶、交易和區塊。
圖1 以太坊賬戶模型
賬戶就是存摺,記著你的餘額;
交易就是匯款單,你負責填單簽名輸密碼;
區塊就是銀行,櫃員把交易錄入系統,相當於礦工把交易刻進區塊,都能改變賬戶信息。
以上就是賬戶餘額模式的基本邏輯,這與UTXO模型有很大不同。
UTXO模型中,每筆輸入都是前一筆交易的未花費輸出,環環相扣,不會出現重複交易。
而賬戶模型則與之不同,每次賬戶變動就像塗一層修正液,只能看到最新結果,一旦重複記賬就會次次都錯,那如何防範這種隱患?
以太坊的做法是:在賬戶裡增加一個標籤,交易後標籤數字+1,每次交易前檢查標籤有無重號,一旦重號則取消交易。
這個標籤的名字叫nonce,看起來和比特幣工作量證明中找的隨機數(nonce)一樣,但以太坊中nonce意指“序號”,有了它你就能安心付款。
可是,賬戶中最重要的不是序號,而是餘額。交易的本質是改變雙方餘額。礦工一旦挖到交易信息,就會記入區塊,從而改寫賬戶信息。
圖2 以太坊賬戶基本結構
序號和餘額構成賬戶最基本的結構,以太坊賬戶的特別之處在於:它有兩種類型。
二、以太坊賬戶類型和內部結構
一種是外部賬戶,它和比特幣地址的功能相同,靠私鑰撬動餘額,如圖2。
另一種是合約賬戶。每次收到消息時,賬戶中的合約代碼會智能地跑起來,這就是以太坊“智能合約”的來歷。
合約賬戶的基本元素就如下圖:
圖3 以太坊合約賬戶基本元素
序號能防重複交易,餘額表示當前權益,合約代碼能夠響應特定請求,比如你可以教你男友設置:今年生日發你1個以太幣,以後每年增加1倍。
另外,每個賬戶還配備存儲空間,內部存有合約代碼和其他數據的哈希值,技術上能防篡改。這就構成合約賬戶的基本框架。
以太坊最著名的合約賬戶當屬ERC20,ERC指以太坊認證請求(Ethereum Request for Comment),20是賬戶編號。ERC20是發行Token的合約,轉Token給別人只需調用該合約。
所以你看,發行Token很簡單,只需在以太坊上開個賬戶,這和你去銀行櫃面開張卡沒什麼區別,YouTube上有很多手把手教程,練順手之後,發一種幣就像發一圈牌一樣簡單。
在以太坊上開好戶,然後用這個賬戶發出的Token換別人手上的BTC或ETH,這是大多數ICO在技術上的實現方式。
ERC20最大的功能是讓所有人都能當億萬富翁,很簡單:發行1萬億個以你名字命名的幣,讓你朋友花1塊錢買一個玩玩,這樣你的幣就有了1元的市場價格,於是一轉身你就身價萬億。
在技術上,這都得歸功於以太坊的賬戶模式。
此模式中,序號、餘額、合約代碼和存儲信息等,都稱為狀態。狀態相當於忽明忽暗、五顏六色的燈,整個以太坊就是蓋在我們頭頂上的不停閃爍的霓彩。這也是為什麼人們把以太坊稱為“狀態機”的原因。
賬戶模型能高效切換狀態,這為區塊鏈應用撒出更多可能,比如每個賬戶都既能用智能合約向其他賬戶發消息,又能設定收到消息後如何應對,於是只要把規則寫進代碼,不需要運營人員,僅憑代碼就能幹活。
效率方面,賬戶模型完勝UTXO,比如當我們計算某個地址的餘額時,賬戶模式會秒出結果,而UTXO模型會遍歷網絡中全部的區塊,再加總得出餘額,但UTXO並不在乎慢,因為它堅守的是寫入的數據不可更改。
安全方面,UTXO模型被公認領先,所以很多人認為UTXO和私鑰的搭配更能保護財富,因為私鑰代表對財富的擁有權,而UTXO又能確保賬戶系統安全,這種觀點看起來很正確,但卻隱藏著一個前提:使用者已經過培訓,而且使用和保管私鑰過程中能處處小心。
保管難度還在其次,最重要的是,私鑰一旦丟失或洩露,用戶將失去所有財富,此時UTXO的穩固就會沒有意義。
這是加密數字貨幣普及過程中遇到的首要難題,包括比特幣在內的很多數字貨幣至今束手無策,但這裡有一種新的解題思路,它來自6月即將上線、同樣使用賬戶模型的EOS。
三、讓財富真正屬於普通用戶
EOS設計者認為:私鑰對普通用戶並不代表真正的所有權,因為稍不留心就會丟失財富,這不符合價值保有的本意。
設計系統時,應該分清對財富的控制能力和擁有權利之間的區別。真正的財富應該像本領,即使暫時被別人拿到,但依然屬於你。
所以,EOS沒有把人的身份綁定在光禿禿的私鑰上,而是標註於一個賬戶,這個賬戶對應一個密碼。
這種設計有什麼好處呢?
最大的好處是普通用戶的財富得到極大的保障,一旦密碼洩露造成財產損失,普通用戶可以多一項選擇:在預設時間內取消交易。
比如,你可以預設轉賬1萬個幣以上需要1小時後才確認,所以一旦有人通過密碼盜取你的財富,你會收到通知,1小時內,你能通過預設的社交關係人取消交易。
社交關係人可以是默認的身份開設機構,也可以是你指定的親戚朋友。於是,普通用戶突然具備一種能力:在預設時間內,簽署消息指明一筆交易無效,而這種能力的存在本身也能壓制惡意。
這就是EOS給我們守護財富的新思路。
當然,回到財富保有的初衷,EOS的賬戶模式保障了普通用戶擁有財富的權利,但也意味著放棄了專業用戶對財富絕對控制的能力,這部分用戶必然會選擇留在UTXO+私鑰的世界。
之所以兩種模型會分家,根源還是來自我們熟悉的不可能三角:分佈式、安全和高效三者不可兼得,最多取二。
圖4 不可能三角和兩種模型的站位
既然都選分佈式,就只能在安全和高效間權衡。比特幣要做的是電子現金系統,安全穩健至上,於是抱著UTXO站在圖4左邊;而以太坊和EOS都希望做成智能合約平臺,追求高效靈活,所以靠右選擇賬戶模型。
賬戶模型的確高效,但必然付出安穩的代價,可這又有什麼辦法呢,為了開墾區塊鏈的新邊疆,總得先付出些什麼。
結語
UTXO是區塊鏈的原生模型,比特幣含著它出生,但區塊鏈要長大,就不能沒有賬戶餘額模型,因為它可以更快翻出更多姿勢。
總之,每個區塊鏈系統最終都面臨兩種模式間的權衡,但目的只有一個:用更低的代價博取更高的收益。
接受王峰採訪前,李笑來說過很多遍:“很少有東西能夠跑贏比特幣,最好的姿勢是持幣睡覺。”但他最後卻賣了幣。
當向王峰解釋為什麼會賣幣時,他說:
開交易所時,銀行賬戶總被凍結,因為要保證擠兌時儲備充足,不得不在熊市賣出一些,等幾個月之後凍結,再也買不回那麼多。
是他當初沒有選擇抱幣安逸不得已的結果,即使明知如此,卻依然選擇下地幹活,因為他的原則是不斷成長,成長才能給他歡樂。
那些賣掉的比特幣是他的尋歡成本,而正是這些成本讓他在成長的跑道上一路狂奔。
一個人之所以值錢,不是他賬戶餘額有錢,而是因為他的原則值錢。
如果這類創業者最終能墾出一片天地,一定不是因為姿勢對或者運氣好,真正的原因是:在所有人都看不見光的夜裡,依然肯付代價。
閱讀更多 輕信區塊鏈 的文章