Solidity
是否可以在 Solidity 合約中包含 Go 程式碼?
我首先學習了 Solidity,現在我正在學習 Go 語言。在我的學習過程中,我注意到兩種語言非常相似。那麼,未來是否有可能在 Solidity 合約中包含 Go 程式碼?還是我錯了?
首先,不要將 Go 作為用於建構一些乙太坊工具和基本實現的語言以及用於編寫智能合約的語言(例如可以編譯成 evm 程式碼的solidity)混合使用。
今天我不知道有任何 evm 編譯器能夠使用 Go 程式碼作為輸入或 Go 和 Solidity 的混合。但是您可以想像其中一些能夠使用 JavaScript 作為智能合約語言(Lisk)。
乙太坊智能合約是用solidity(或較少使用的Serpent)編寫的主要原因是它是一種確定性語言。Go 不是確定性的,可能會導致致命的程式碼行為,或者您必須告訴開發人員不要使用某些函式,但不能強迫他們不要使用這些函式。想想隨機函式的使用:
rand.Intn(100)
. 每次合約執行,結果都應該不同。那麼如何才能對合約執行的結果有共識呢?沒有共識意味著合約根本沒有用,因為共識是區塊鏈的主要目的。(契約中的隨機性是有可能的,但是要非常小心地使用它是一件棘手的事情,而不僅僅是簡單地使用隨機函式,例如參見這個答案)Lisk 加密貨幣打賭,擁有一種廣為人知的語言比擁有一種確定性的語言更重要。乙太坊做出了另一種選擇,並且更喜歡確定性語言,即使它是一種新的學習語言(我們一開始認為它不是那麼複雜的語言,但那是在 The DAO 之前……)。看看有多少“錯誤”寫在合約中,即使使用簡單的確定性語言作為可靠性,想像一下如果它是用其他語言(如 Go)編寫的,會是怎樣的一團糟。我喜歡 Go,它是一種很好的語言,適用於很多事情,但不適用於 IMO 智能合約。