Getting started with Smart Contracts

Solidity Programming Language

前言

智能合約是一個可在以太坊上執行的程式碼,每個智能合約實體有個地址,合約有多少 balance ,合約的狀態,以及該合約可被其他人所執行的函式。

為了開發這些智能合約,我們將使用Solidity編程語言。這是一種專門用於在以太坊網絡上建立智能合約的一種語言,透過以太坊虛擬機(Ethereum Virtual Machine)來執行,所以了解這些的運作的基礎是非常重要。

Solidity 介紹

當我們想要再以太坊上開發智能合約時,我們有幾個程式語言的選項: Solidity (其語法特性與 Javascript 相近)、Serpent(其語法特性與 Python相近) 以及 vyper(其語法特性與 Python相近並且是 security oriented 語言)

智能合約與物件導向程式觀念非常接近,智能合約有類別的概念,每個合約在我們 deploy 後,合約會有自己獨立的地址,合約自己的餘額以及狀態。

與物件一樣,在物件導向式的編程中,我們可以利用 contract instance 上被我們所定義的方法來改變合約的狀態。

最後相同的地方是,智能合約是靜態語言,一旦被編譯過後,他就不能再像 JavaScript 一樣可以動態地增加 Methods 以及 field。

總結上面的幾點, 智能合約的結構與物件的類別結構非常類似。

如果你有一直在使用任何其他程式語言,那麼 Solidity 中所使用的關鍵字以及程式寫法不會讓你覺得難上手。

定義合約類別

如果我們要定義一個合約的類別,我們需要用到 contract 的關鍵字,並且透過 {} 來定義合約的內容物

接著我們定義 field 及 method,以範例來說,我們定義一個 uint 的 val 以及能夠透過呼叫得到其值的

我們利用關鍵字 public 來表示這個函式是在以太坊上可被任何人呼叫的,最後我們定義這個函式回傳一個 uint 的值給

一個要注意的地方是,我們常常看到 solidity 的最上方有 pagram solidity ^0.5.0 這個字,這個是告知編譯器我們將要以該版本的語法來進行編譯,現行 solidity 的版本是 0.5.7,我們可以用到此最高版本

型別

與多數 OO 語言相似,Solidity 有 boolean 型別,值可以包含true或false。

其中當然也包含有一個有符號整數的類型,關鍵字為 int。在 Solidity 中,一個整數預設都是 256 位元長度。

它還有一個無符號整數類型,關鍵字為 uint ,長度也是 256 位元。如果不需要用到那麼大的整數,那麼可以使用 int8,int16 等類型,一直到 int256。對於無符號整數(沒有負號),Solidity 也提供了從 uint8 到 unit256 的不同長度類型。 大家可以注意到跟其他語言不同的地方是 Solidity 並沒有 long 或是 short 這種關鍵字。

Solidity 還支持字串。

Solidity 最特殊的地方在於擁有地址的類型,此地址類型的值可以是 owner 的帳戶地址或是智能合約的地址。

Constant

Constant 關鍵字,用於指定 Constant 的值,一旦定義後不可被更改。

Operator

Solidity 具有多數其他語言都有的運算子,包含位元運算。

Comparsion

Solidity 也提供基本的比較運算子。

Comments

Solidity 有單行評論。編譯器會忽略兩個 // 之後的所有內容。

它也具有多行註釋。所以介於 / * 之間但在 */ 之前的所有內容也被編譯器忽略。

Returns val

可能與其他程式語言不同的地方是,我們可以使用 Solidity 回傳1 到多個值,在 returns(uint a, uint b ) 如此設定,最後在 return 回傳如: return(val1, val2);

總結

本篇主要介紹智能合約的大觀念以及基礎的結構、型別等。

如果你喜歡我的文章,請幫我按個讚之外,也請追蹤我們的專欄獲得更多知識!

--

--