以太坊區塊鏈搭建與使用(五)-智慧合約Solidity
阿新 • • 發佈:2020-12-17
一、智慧合約Solidity開發工具
1、remix-idehttp://remix.ethereum.org/線上版本,也可以去github下載安裝到本地。開發、編譯、釋出、執行、測試
2、remix-ide-cn線上中文版本,也可以去github下載安裝到本地。支援開發、編譯、釋出、執行、測試 。這個有個好用的地方就是部署的合約可以直接在這裡呼叫執行。
p.s. 一般開啟連結是空白可以試試Ctrl+F5強刷幾次試試。
3、Ethereum Studio 目前官網推出Ethereum Studio。https://studio.ethereum.org/線上版本,還是比較好用,不過目前沒看到可下載本地。
4、IntelliJIDEA Java開發者可以試試IDEA的外掛,不過開發與編譯好像要安裝2外掛才行。
二、智慧合約Solidity入門
Solidity是一種智慧合約高階語言,執行在Ethereum虛擬機器(EVM)之上。
Solidity與其它語言相關的特點?
它的語法接近於Javascript,是一種面向物件的語言。但作為一種真正意義上執行在網路上的去中心合約,它又有很多的不同,下面列舉一些:
- 以太坊底層是基於帳戶,而非UTXO的,所以有一個特殊的
Address
的型別。用於定位使用者,定位合約,定位合約的程式碼(合約本身也是一個帳戶)。 - 由於語言內嵌框架是支援支付的,所以提供了一些關鍵字,如
payable
- 儲存是使用網路上的區塊鏈,資料的每一個狀態都可以永久儲存,所以需要確定變數使用記憶體,還是區塊鏈。
- 執行環境是在去中心化的網路上,會比較強調合約或函式執行的呼叫的方式。因為原來一個簡單的函式呼叫變為了一個網路上的節點中的程式碼執行,分散式的感覺。
- 最後一個非常大的不同則是它的異常機制,一旦出現異常,所有的執行都將會被回撤,這主要是為了保證合約執行的原子性,以避免中間狀態出現的資料不一致。
Hello Wolrd!
聽起來高大上,其實入手玩起來也可以很簡單:
pragmasolidity ^0.4.0;contractHelloWorld{uintbalance;functionupdate(uint amount) returns (address, uint){balance+= amount;return(msg.sender, balance); } }
通過讀取引數輸入的新值,並將之累加至合約的變數中,返回傳送人的地址,和最終的累計值。
Solidity的完整語法:
入門說明:
值型別:
- 型別
- 布林(Booleans)
- 整型(Integer)
- 地址(Address)
- 位元組陣列(byte arrays)
- 小數
- 字串(String literal)
- 十六進位制字面量
- 列舉
- 函式(Function Types)
引用型別:
雜項:
- 對映/字典(mappings)
- 左值運算子(Operators Involving LValues)
- 型別間的轉換(Conversions between Elementary Types)
- 型別推斷(Type Deduction)
單位:
語言內建特性:
- 特殊變數及函式(Special Variables and Functions)
- 數學和加密函式(Mathematical and Cryptographic Functions)
- 地址相關(Address Related)
進階:
- 入參和出參(Input Parameters and Output Parameters)
- 控制結構
- 函式呼叫(Function Calls)
- 建立合約例項(Creating Contracts via new)
- 表示式的執行順序(Order of Evaluation of Expressions)
- 賦值(Assignment)
- 作用範圍和宣告(Scoping And Decarations)
- 異常(Excepions)
- 內聯彙編(Inline Assembly)
合約詳解:
- 合約
- 可見性或許可權控制(Visibility And Accessors)
- 訪問函式(Accessor Functions)
- 函式修改器(Function Modifiers)
- 常狀態變數(constant state variables)
- 回退函式(fallback function)
- 事件(Events)
- 繼承(Inheritance)
- 介面(Abstract Contracts)
其它:
- 庫(Libraries)
- 狀態變數的儲存模型(Layout of State Variables in Storage)
- 記憶體變數的存局(Layout in Memory)
- 呼叫資料的佈局(Layout of CallData)
此文引用網路資源https://www.tryblockchain.org/hanko:以太坊區塊鏈搭建與使用(一)-私有鏈hanko:以太坊區塊鏈搭建與使用(二)-私有鏈配置與啟動hanko:以太坊區塊鏈搭建與使用(三)-聯盟鏈hanko:以太坊區塊鏈搭建與使用(四)-以太坊錢包工具hanko:以太坊區塊鏈搭建與使用(五)-智慧合約Solidityhanko:以太坊區塊鏈搭建與使用(六)-基於Java呼叫以太坊