
Solidity 是一門面向合約的、為實作智能合約而建立的進階程式設計語言。這門語言受到了 C++,Python 和 Javascript 語言的影響,設計的目的是能在以太坊虛拟機(EVM)上運作。
Solidity 是靜态類型語言,支援繼承、庫和複雜的使用者定義類型等特性。
它的文法接近于Javascript,是一種面向對象的語言。但作為一種真正意義上運作在網絡上的去中心合約,它又有很多的不同,下面列舉一些:
- 以太坊底層是基于帳戶,而非UTXO的,是以有一個特殊的
的類型。用于定位使用者,定位合約,定位合約的代碼(合約本身也是一個帳戶)。Address
- 由于語言内嵌架構是支援支付的,是以提供了一些關鍵字,如
,可以在語言層面直接支援支付,而且超級簡單。payable
- 存儲是使用網絡上的區塊鍊,資料的每一個狀态都可以永久存儲,是以需要确定變量使用記憶體,還是區塊鍊。
- 運作環境是在去中心化的網絡上,會比較強調合約或函數執行的調用的方式。因為原來一個簡單的函數調用變為了一個網絡上的節點中的代碼執行,分布式的感覺。
- 最後一個非常大的不同則是它的異常機制,一旦出現異常,所有的執行都将會被回撤,這主要是為了保證合約執行的原子性,以避免中間狀态出現的資料不一緻。
代碼示例:
pragma solidity ^0.4.20;
contract HelloWorld{
uint balance;
function HelloWorld() {
balance = **;
}
function update(uint amount) returns (address, uint){
balance += amount;
return (msg.sender, balance);
}
}
工欲善其事必先利其器,下面介紹開發的IDE以及環境搭建:
可用的 Solidity 內建
- Remix 基于浏覽器的 IDE,內建了編譯器和 Solidity 運作時環境,不需要服務端元件。
- IntelliJ IDEA plugin IntelliJ IDEA 的 Solidity 插件(可用于其他所有的 JetBrains IDE)
- Visual Studio Extension Microsoft Visual Studio 的 Solidity 插件,包含 Solidity 編譯器。
- Package for SublimeText — Solidity language syntax SublimeText 編輯器的文法高亮包。
- Etheratom Atom 編輯器的插件,支援高亮、編譯和運作時環境(相容後端節點和虛拟機)。
- Atom Solidity Linter Atom 編輯器的插件,提供 Solidity 語言的 Lint 檢查(靜态檢查)。
- Atom Solium Linter Atom 的可配置的 Solidty 靜态檢查器,基于 Solium。
- Solium 一種靜态檢查器,識别和修複 Solidity 中的風格以及安全問題。
- Solhint 一種靜态檢查器,提供安全和風格指南以及智能合約驗證的最佳實踐規則。
- Visual Studio Code extension Microsoft Visual Studio Code 插件,包含文法高亮和 Solidity 編譯器。
- Emacs Solidity Emacs 編輯器的插件,提供文法高亮和編譯錯誤報告。
- Vim Solidity Vim 編輯器的插件,提供文法高亮。
- Vim Syntastic Vim 編輯器的插件,提供編譯檢查。
不再維護:
- Mix IDE 基于 Qt 的 IDE,可以設計、調試和測試 Solidity 智能合約。
- Ethereum Studio 專門的網頁 IDE,也提供一個完整以太坊環境的腳本通路。
Solidity 工具清單
- Dapp Solidity 語言的建構工具、包管理器以及部署助手。
- Solidity REPL 一個指令行控制台,可以讓你立刻嘗試 Solidity 語言。
- solgraph 可視化的 Solidity 控制流,并能标明潛在的安全漏洞。
- evmdis EVM 反彙程式設計式,可以執行位元組碼的靜态分析,能提供比 EVM 操作更進階的抽象。
- Doxity Solidity 語言的文檔生成器。
第三方 Solidity 解析器和文法
- solidity-parser JavaScript 的 Solidity 解析器
- Solidity Grammar for ANTLR 4 ANTLR 4 解析器生成器的 Solidity 文法
我個人主要atom配合
開發的,下面介紹一下
的使用
功能
這裡我們使用線上編譯器,打開網址
https://remix.ethereum.org/image
檔案夾管理
最左邊是檔案夾管理,裡面列出了目前的工作區裡的檔案,remix可以支援從本地檔案夾讀取檔案。
工作區
正中間是工作區,工作區上半部是代碼編輯區,在這裡可以寫solidity合約。
下半部是日志區,在執行智能合約時,會顯示transaction相關的資訊。在輸出日志的時候還可以檢視Details和Debug資訊。
功能區
最右邊的是功能區,裡面有編譯,運作,設定和分析以及調試器和支援。
在編譯器點選Details可以檢視編譯細節,裡面有NAME,METADATA,BYTECODE,ABI 等一些相關資訊。
在設定裡面可以選擇我們的編譯器版本,和一些IDE的使用設定。
其他就不介紹了,使用是很簡單的。