以太坊帶來的一些反思

2021-10-02 18:41:17 字數 1562 閱讀 1545

智慧型合約真的智慧型嗎?(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語言中 可以表示乘號,也可以表示指標符號。這兩個用法是毫無關聯的,只...