合約編程語言 Solidity
來自專欄區塊鏈4 人贊了文章
編寫智能合約繞不過去的一個坑就是要學一種新的編程語言,這就是號稱智能合約編程語言的 Solidity 。這篇小文是 Solidity 的一個開發入門。首先介紹 Solidity 的誕生和自我定位,接下來進入重點內容,聊聊智能合約編程的哪些具體的挑戰決定了我們必須要發明一種新的語言,最後介紹一下網上 Peter 覺得最優秀的學習 Solidity 的網站資源。
Soldity 定位
先來講講 Solidity 的誕生和定位。
故事還是要從以太坊說起,為了開發強大的智能合約,以太坊開發了 EVM ,也就是以太坊虛擬機,而以太坊虛擬機上運行的語言就是 Solidity 。之後的2016和2017年,智能合約爆發,Solidity 也被其他的區塊鏈項目搬到了自己的平台上,所以在其它平台,例如 Nervos 上, 開發智能合約也都會用 Solidity 語言。
按照官網的說法,Solidity 是一個面向合約開發的高級語言,借鑒了其他一些高級語言,例如 Javascript 和 Python,的特性。它是一門靜態類型語言,支持繼承,支持各種庫和用戶自定義的類型。非常適合用來開發類似於投票,眾籌,拍賣,多重簽名錢包等各種功能。
簡單一句話,Solidity 就是為智能合約而生。
核心語言特性
這時候我們心中最大的疑問是,為啥不直接用目前已經非常流行的語言,例如 Javascript ,來開發智能合約呢?或者說智能合約開發有哪些獨特的特點,要求我們必須要開發一門新的語言來應對呢。
首先一點是安全。智能合約往往都跟真金白銀掛鉤,而且智能合約是部署到區塊鏈上的,而區塊鏈是一個大家形成共識的環境,所以說智能合約部署之後,代碼雖然不能說絕對不能改,但是要改也是非常麻煩的事。這就要求智能合約的代碼要非常的嚴禁和安全。而我們熟悉的 Javacript 是弱類型語言,恰好不太能寫出安全的代碼,這也就是為何給 Javascript 添加強類型之後的 Typescript 語言變得如此流行了。而 Solidity 直接就被設計為靜態類型和強類型的語言,保證對於一些常見錯誤,讓開發者能夠迅速通過編譯捕捉到,增強的語言的安全性。這裡要插一句,雖然 Java/C++ 這些大型語言也都有對安全性的非常好的優化,但是要把這些語言移植到在區塊鏈上,對系統造成的負荷也會很大,整個的移植工作量也是非常大的,所以 Solidity 的小巧和專用也是它的優勢。
第二點是對智能合約特定業務的支持。智能合約不一定是一個現實意義的合約,即使一個只列印 Hello World 的程序,只要部署到區塊鏈上,我們也叫它做一個智能合約。但是話說回來,智能合約的很常見的一種作用就是來實現合約,常見的編程語言對於這一點是沒有特殊支持的,而 Solidity 就專門對此作了優化,甚至專門添加了一種類型,就叫 contract 。除了對於合約的支持,以太坊之所以迅速火爆,跟它的能夠輕鬆發代幣的能力是分不開的,所以 Solidity 之下有專門的數據類型叫做 address ,可以用來在發代幣的時候設置鑄幣人地址。
所以說,Solidity 之所以能流行起來就是因為它的安全小巧,和專門的對智能合約開發所做的優化。
參考資料
最後給大家介紹一下幾個學習 Solidity 的最優秀的網站和工具。
第一個是 Remix ,http://remix.ethereum.org 。這是以太坊官方推出的一個 Solidity 的在線集成開發環境。提供了文件瀏覽器,帶高亮支持的代碼編輯器,調試工具,甚至有編譯功能。Remix 是每個 Solidity 開發者都在用的項目。
第二個是 Solidity 官網,是有中文版的哦, https://solidity-cn.readthedocs.io/zh/develop/ 。官網上介紹了,合約編譯輸出之後的元數據的作用,什麼是 ABI ,也就是應用二進位介面,以及合約的結構,各種語言類型的詳細說明等等重要信息,是上手智能合約編程之前的必備基礎。
最後一個不得不提的資源是,https://cryptozombies.io/ 。這是一個第三方的在線智能合約學習環境,目標是教會大家實現 DApp 遊戲。這個網站的特點是自作非常精良,各種輔助學習材料豐富,並且是對 Solidity 小白友好的。
好,我想推薦的資源就是這三個了。
總結
來總結一下本文要點。Solidity 是一門誕生在以太坊之上的新語言,因為非常適合做合約開發,目前已經被很多其他區塊鏈項目也移植到自己的平台之上。Solidity 足夠小巧足夠安全,讓它非常適合運行在區塊鏈上成為智能合約語言,同時 Solidity 還為智能合約和發代幣等各種實際業務場景做了語言層面的優化,這個也是其他語言所不具備的,所以說人們沒有使用現有的 Java/C++ 這些語言來開發智能合約,而是專門發明了 Solidity 。
推薦閱讀: