iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 2
0
Blockchain

區塊練起來-智能合約與DApp開發系列 第 2

[區塊練起來-智能合約與DApp開發] DAY 02 - 介紹智能合約(1)

從合約到智能合約

合約(Contract) 經常出現在我們的生活中,像是:去電信局辦手機門號時需要簽訂合約、與其他公司合作時需簽訂合約等,而簽訂合約的目的就是要保障雙方的權益,避免其中一方違約,簡單來說就是透過合約來形成約束力,讓雙方都能照著約定走。

隨著資訊科技的發展,許多應用漸漸轉向資訊化、自動化的方式,合約也是其中之一,但要讓合約能夠資訊化、自動化,必須要解決第三方信任的問題,若第三方缺乏公信力或是受到其中一方賄賂進而偷改合約內容,那就會讓他人權益受損。所以在1994年時有人提出 智能合約(Smart Contract) 的概念,就是在沒有第三方的情況下,透過資訊化的方式與互不信任的人用信任的方式完成交易。

以太坊(Ethereum) 實現了智能合約,運用區塊鏈的特性來落實智能合約的概念,開創了區塊鏈2.0的時代,同時也是目前最大的智能合約區塊鏈平台,也因為以太坊奠定了智能合約的基礎,故現在稱呼的智能合約都是指「在區塊鏈上運行的程式」。

智能合約與區塊鏈平台的關係

說以太坊是一個有智能合約功能的區塊鏈平台對於初學者來說可能會有些模糊,那就來個換句話說會比較容易理解!
前面有提到智能合約是指「在區塊鏈上運行的程式」,而以太坊就是一個「區塊鏈平台」,這樣的關係就好像以太坊是一套作業系統,而智能合約是運行在這套作業系統上的應用程式。
那麼可能會有人提問智能合約是只能在以太坊上運行嗎?答案是否定的。智能合約不一定只能在以太坊上運行,還有像是 HyperLedger 這樣的區塊鏈平台,只不過撰寫智能合約的語言可能會有所不同罷了,以太坊使用 Solidity 撰寫智能合約, HyperLedger 使用 Golang 撰寫,就好比 Android 與 iOS ,使用不同的語言在撰寫應用程式。

https://ithelp.ithome.com.tw/upload/images/20190804/20119338oOQ466R26o.jpg

智能合約的運作-以太坊為例

讀到這邊可能開始會有人開始思考:區塊鏈不是一個大型分散式帳本嗎?為什麼可以讓程式在上面運行?(沒錯,就是剛開始接觸智能合約時的我XD)
要理解這個問題就要了解智能合約是如何運作的以及相關的基本概念,這部分會涉及到後面開發上的一些觀念,所以這邊打個星號然後準備好螢光筆畫重點!/images/emoticon/emoticon13.gif

帳戶的概念

以太坊將帳戶劃分兩種: 外部帳戶(Externally owned account, EOA)合約位址(Contract Address, CA)

  1. 外部帳戶
    外部帳戶就是擁有公鑰(Public Key)與私鑰(Private Key)、我們用來交易的帳戶。
    https://ithelp.ithome.com.tw/upload/images/20190804/20119338j66jVjE7eK.png
    圖片來源:Etherscan
  2. 合約位址
    合約位址是合約部署到以太坊後所產生的帳戶,只要與該合約互動就是對合約位址發起 交易(Transaction)
    https://ithelp.ithome.com.tw/upload/images/20190804/20119338WL150KegnI.png
    圖片來源:Etherscan

部署流程

前面有提到以太坊的智能合約是使用 Solidity 來撰寫,那麼在開發到部署智能合約的流程大致上是這樣的:

  1. 使用 Solidity 開發智能合約
  2. 將撰寫完畢的智能合約透過 Solidity 的編譯器進行編譯
  3. 編譯完畢後會產生 bytecodeABI
  4. bytecode 部署到以太坊中

何謂ABI?

ABI 的全名為 Application Binary Interface ,要與智能合約做溝通的介面就是 ABI,與 API 的概念相似,但程式是二進制編碼,故傳送的資訊也是二進制編碼,如何將資訊編碼成二進制形式或是解碼成易讀的資訊就是 ABI 的工作。

運作原理

經過上方的流程之後,已經將智能合約的 bytecode 存入以太坊的區塊中,當使用者要與智能合約互動時,就要透過 ABI 以及合約位址來發起交易,以執行智能合約中的程式,那麼是如何執行合約中的程式,這就要來說明智能合約的運作原理了:

在以太坊中的節點都有一個 Ethereum虛擬機(Ethereum Virtual Machine, EVM) ,它的作用就是來執行那些存在區塊中的 bytecode ,所以當使用者呼叫智能合約時,以太坊中的節點就會透過 EVM 來進行運算,並將相關結果傳給使用者,收到結果後會經由 ABI 把二進制編碼轉換成我們能夠讀懂的資訊。
https://ithelp.ithome.com.tw/upload/images/20190804/20119338LLMe3Csrp3.png


今日小結

今天的內容在這邊稍微整理一下:

  1. 了解合約到智能合約的轉變
  2. 了解區塊鏈平台與智能合約之間的關係
  3. 了解以太坊中的帳戶概念
  4. 智能合約是如何運作的

參考資料


上一篇
[區塊練起來-智能合約與DApp開發] DAY 01 - 起手式
下一篇
[區塊練起來-智能合約與DApp開發] DAY 03 - 介紹智能合約(2)
系列文
區塊練起來-智能合約與DApp開發31

尚未有邦友留言

立即登入留言