solidity0x1

Solidity 0x1

Solidity是什麼 ?

根據維基百科描述,

Solidity logo.svgSolidity的標誌
網站 github.com/ethereum/solidity
啟發語言JavaScript, C++, Python, PowerShell

Solidity是一種合約導向式語言,可被應用於各種不同的區塊鏈平台上[1],其主要開發者為Gavin Wood,Christian Reitwiessner,Alex Beregszaszi,Liana Husikyan,Yoichi Hirai和其他幾位早期以太坊核心貢獻者。[2][3]Solidity 可使程式開發人員能在區塊鏈上(例如以太坊)編寫智能合約

  • Strongly Typed - 屬於一門強型別語言
  • Similar to Javascript - 與Javascript非常類似(指的是syntax部分)。

###Solidity 在 與智能合約。

Imgur

我們使用 Solidity 編寫完的合約,透過 Solidity Compiler 會編譯出兩個文件,分別是 Byte codeABIByte code 的文件將會被部署上 Ethereum Net ,所以真正在區塊鏈上的文件是 Byte codeABI 對於編寫可以與智能合約交互的應用程式來說,是非常重要的。

舉例來說 :

Imgur

我們在部署完智能合約之後,我們會需要透過Web前端,裡面會有一些Javascript的代碼,作為交互使用,Javascript並沒有能力能夠直接與 Bytecode 進行交互。我們就需要透過 ABI 與區塊鏈上的智能合約(ByteCode) 與其溝通而拿到目前智能合約內儲存的狀態或資料。

###Solidity IDE - Remix

Remix 是一個 Solidity Online的 Editor,可以用來編寫與測試 Solidity,也可以在上面直接發佈智能合約。

第一個智能合約 - 使用 Solidity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 //每一個智能合約都必須定義,這邊指的是使用0.4.17或更高的編譯器版本
pragma solidity ^0.4.17;

//contract的修飾符關鍵字就像class一樣,定義這是一個合約
contract Inbox {
//在這個合約裡面儲存一個string,並且是public,任何人都可以知道這個變量
string public message;
//建構子,當這個合約被部署到區塊鏈上,會執行這個函式。
function Inbox(string initialMessage) public {
message = initialMessage;
}
//改變這個合約中的message變量。
function setMessage(string newMessage) public {
message = newMessage;
}
//取得這個合約中的message變量。
function getMessage() public view returns(string) {
return message;
}
}

這樣就完成了一個簡單可以在區塊鏈上儲存字串訊息的智能合約。