智慧型合約真的智慧型嗎?(is smart contract really smart?)
智慧型合約並不智慧型,而是更接近自動合約。(smart contract is anything but smart.)
irrevocability is a double edged sword.
很多區塊鏈的應用都利用了不可篡改的特性,比如防偽、溯源。但是從「the dao」事件當中,可以看出不可篡改性其實是乙個雙刃劍。
一方面,不可篡改性增加了合約的公信力,但另一方面,不可篡改性也導致了**漏洞不能及時修復,也不能阻止別人呼叫智慧型合約。在區塊鏈世界,漏洞修改有時需要硬分叉,還需要得到大部分礦工的支援。
不可篡改性還導致另乙個問題,在賬戶私鑰洩露的情況下,賬戶凍結需要軟分叉來實現,對於普通人只能盡快將資金轉安全賬戶。
nothing is irrevocability.
理論上,沒有什麼什麼是絕對不可篡改的,比如分叉攻擊可以回滾交易。「the dao」事件中,以太坊開發團隊通過軟體公升級方式強行改變了某些賬戶的狀態,所以不能迷信不可篡改的特性。
is solidity the right programming language?
solidity語言上有一些***的特性,比如轉賬給另乙個人,另乙個人可以反過來呼叫自己的函式,這與常識不一樣。
有人提議應該改進為函式式程式語言,這樣比較安全,不容易出現漏洞。
如果能夠用形式化驗證(formal verification)的方式,證明一段程式只能做規定好的工作,那麼將能夠解決智慧型合約的漏洞問題。但是形式化驗證距離實用仍有很大的距離。
表達能力適中的語言,可以實現智慧型合約的功能,又不容易出現漏洞。但是難以設計出適當的語言,因為難以預料未來的攻擊。
聯想到現實中的合同,也會出現由於不嚴謹出現一些糾紛,所以通常使用模板寫合同來規避這些問題。智慧型合約可以參考這種在模板基礎上書寫合約的方法,以後應該也會出現類似寫智慧型合約的專門機構。
去中心化的系統一般都是開源的,因為需要所有節點執行同樣的操作,才能達成共識。開源的乙個好處就是增加合約的公信力,接受群眾的監督;有人認為另乙個好處是不容易出現安全漏洞,但實際情況並不如此。
many eyeball fallacy.
理論上**是開源的,但實際上去研究**的人是很少的,即便研究了也不一定有足夠的專業性去研究,例如像「the dao」這樣涉及到財產安全的專案,也出現了重大安全事故。所以開源軟體不能避免出現漏洞。
what does decentralization mean?
用去中心化的方式更改規則。
分叉並不是強迫的結果,不同分叉代表了不同人認可的規則,所以分叉恰恰是去中心化(民主)的體現;反觀在中心化的世界中,使用者不滿意遊戲規則只能選擇退出。
decentralized ≠ distributed
乙個去中心化系統必然是分布式的,但是分布式系統不一定是去中心化的。
所以智慧型合約不適合大規模計算和大規模儲存的需求,只有那些需要在互不信任的實體間建立共識的操作,才需要寫在智慧型合約裡。
最近的一些反思
1做什麼事情都要把相關的人聚集在一塊去解決問題,而不是找幾個沒有參與這件事情的人,因為一旦出了問題,就會去找參與者去解決 3還有無論去做什麼事情都要把事情吃透才罷休,否則一旦下次遇到類似的問題,你是躲避不了的,還是得解決,而且那個時候的情況會更加緊急 4現在感覺業務流程每乙個人都不太清晰,所有如果沒...
關於springboot的一些反思總結
在這裡深刻的反省一下自己之前急於求成,而犯了很多程式設計思想上的錯誤。關於springboot的controller,盡量只是乙個呼叫service層的工具,而不要寫太多的演算法,演算法是交給service層的,不能讓人通過你的controller層來看出你的設計邏輯。比如下面 這樣寫是完全錯誤的思...
指標帶來的一些符號的理解
指標帶來的一些符號的理解 我們寫的 是給編譯器看的,要想達到你想象的結果,就必要編譯器對你的 的理解和你自己對 的理解一樣。編譯器理解 就是理解的符號,所以我們要正確理解c語言中的符號,才能像編譯器一 樣思考程式 理解 星號 1 c語言中 可以表示乘號,也可以表示指標符號。這兩個用法是毫無關聯的,只...