SlideShare a Scribd company logo
1 of 30
Download to read offline
[ titangene@stust ~ ] $ cat .profile
# author: 郭柏均 (Titan)
# email: titangene.tw@gmail.com
# blog: https://titangene.github.io
# facebook: titangene.blog
# github: titangene
# date: 2018-10-25 14:00:00
以太坊智能合約開發
Slide
大綱
• 區塊鏈 (Blockchain)
• 以太坊 (Ethereum)
• 智能合約 (Smart Contract)
• Solidity
• 開發環境
• Truffle
• ganache-cli
1
區塊鏈 (Blockchain)
• 中本聰 在 2008 年,於 Bitcoin: A Peer-to-Peer
Electronic Cash System 此篇 paper 中提出區塊鏈概
念,作為加密貨幣比特幣的公開交易帳本
• 區塊鏈通常指的是虛擬貨幣 (比特幣、以太幣) 交易網路
所使用的技術
• 比特幣:第一大加密貨幣
• 以太幣:第二大加密貨幣
• 以廣義來說,區塊鏈用多個舊技術的組合技
• 去中心化:分散式帳本
• 共享帳本:P2P、密碼學 (非對稱式加密、雜湊、簽章)
2
區塊鏈 (Blockchain)
• 由區塊和鏈組成的
• 區塊:由許多筆交易組成
• 鏈:用來將許多區塊連接在一起
• 每個區塊都會保存上一個區塊的雜湊值 (Hash
value),因此能將區塊串成鏈狀
3
以太坊 (Ethereum)
• 提供智能合約的公共區塊鏈平台
• 利用其專用的加密貨幣 (以太幣,Ether,ETH)
提供去中心化的 VM (以太虛擬機,EVM,
Ethereum Virtual Machine) 來處理智能合約
• 以太幣可以在帳戶與智能合約之間進行轉移
4
EVM (Ethereum Virtual Machine)
• EVM 是 Ethereum 提供了一個去中心化的 VM 來執行智
能合約。利用特定程式語言開發智能合約,再將程式碼
經編譯後轉換成 bytecode,並存至區塊中。
5ref:Ethereum DApp 初心者之路 (3): 簡介 Ethereum (乙太坊)、Smart Contract (智能合約)
Ethereum Network
• 用於轉移資金和儲存資料
• networks 是由一個或多個節點所組成
• 每個節點都是跑 Ethereum client 端的主機
• 任何人都可以是節點
• 每個節點都可以包含區塊鏈的完整或單獨副本
• 區塊鏈可視為 DB,用於儲存每筆已發生的交易記錄
6
Ethereum Network 分類
Main net (主網路)
• 可以和法定貨幣或其他虛擬貨幣進行交易
• 用於部署正式智能合約的網路
Private net (私有網路)
• 在 local 建立的網路,不需連接 internet
• 通常帳戶都是虛擬的,由開發者控制多個虛擬帳戶進行交易或部署合約
• 便於開發,在私網挖礦相對容易,不用等待長時間的驗證
Test net (測試網路)
• 用於測試環境,測試網路上的 Ether 沒有實際價值
• 用於完成私有網路的測試後,再發布至主網路前的最後測試
• 需要等待交易驗證 (慢),不建議在測試網路開發智能合約
7
Ethereum 測試網路
Ropsten
• 以太坊官方提供的測試網絡
• 使用 PoW (Proof-of-Work,工作量證明) 共識機制
Kovan
• 由以太坊錢包 Parity 的開發團隊發起
• 僅有 Parity 錢包 client 端可以使用這個測試網絡
• 解決測試網絡中 PoW 共識機制的問題,改用權威證明 (Proof-
of-Authority,PoA) 共識機制
Rinkeby
• 以太坊官方提供的測試網絡
• 使用 PoA 共識機制
• 開發人員常用的測試網路 8
Etherscan
• Ethereum Block Explorer
• 可方便查看在區塊鏈上發生的交易
• 錢包餘額
• 錢包、智能合約的交易紀錄、狀態
• 主網路的 Etherscan
• 測試網路的 Etherscan
• Ropsten
• Kovan
• Rinkeby
9
Ethereum 帳戶
• 外部帳戶 (External owned accounts,EOAs):
• 由使用者所持有的帳戶
• 包含帳戶地址 (由公鑰產生)、帳戶餘額、私鑰
• 可以通過建立和簽署交易從 EOA 發送訊息
• 合約帳戶 (Contract accounts,CA):
• 由 EOA 發行的交易作為 Trigger 來執行智能合約內的
程式碼
• 合約地址是由建立合約時產生的
• 在合約帳戶中,每次合約帳戶收到一條訊息或交易時,
會執行該合約的程式碼,允許其讀取和寫入資料,並發
送其他訊息或依次建立合約
10
Ethereum client
• go-ethereum (Golang)
• Parity (Rust)
• cpp-ethereum (C++)
• EthereumJ (Java)
• ruby-ethereum (Ruby)
使用 go-ethereum 和 Parity 占多數
11
Ethereum 錢包
MetaMask (Web browser extension)
• Chrome, Firefox, Opera
Mist / Ethereum Wallet (Electrum)
• Mist 是 Electrum App,也就是帶有 Web 界面的桌面
混合 (hybrid) 應用程式
• Ethereum Wallet 只是 Mist 的一個實作,只能存取
一個 DApp,就是 Ethereum Wallet Ðapp
12
Ethereum 貨幣單位
• Ether 是 Ethereum 的貨幣單位
• 用於支付 EVM 中的計算
13
Unit Wei value Wei
wei 1 wei 1
Kwei (babbage) 103 wei 1,000
Mwei (lovelace) 106 wei 1,000,000
Gwei (shannon) 109 wei 1,000,000,000
microether (szabo) 1012 wei 1,000,000,000,000
milliether (finney) 1015 wei 1,000,000,000,000,000
Ether 1018 wei 1,000,000,000,000,000,000
Gas
• 類似燃料 (fuel),用於執行、部署合約,以太坊上
轉賬都需要消耗 Gas
• 交易費用 = Gas Limit x Gas Price
• 一般以 GWei 為單位 (1 GWei = 10-9 ETH)
• 交易費用就是礦工挖礦的獎勵
• 交易費用越低交易時間便越長
• 交易時,可以決定 Gas 價格,不能決定 Gas 用量
• 程式越複雜越貴
• out of gas:交易費不夠時,會取消交易
• 交易費還是會被礦工全拿走 14
智能合約 (Smart Contract)
15ref:Beginning DApp Programming on Ethereum with JavaScript and Solidity
開發智能合約的程式語言
• Solidity (JavaScript-like)
• 較多人用,社群較活躍,教學資源最多
• Serpent:(Python-like)
• LLL (Lisp Like Language)
• Viper (Python-like,實驗性)
• Mutan (已棄用)
16
Solidity
• Contract-Oriented Programming Language
(智能合約導向的程式語言)
• 在以太坊平台上開發智能合約的主要程式語言
• 靜態型別的程式語言
• 會被編譯成可在 EVM 上執行的 bytecode
• 類似 Java 在會被編譯成可在 JVM 上執行的 Java
bytecode
17
智能合約開發建議
• 不建議使用錢包開發
• 安裝錢包需要大量同步時間和空間,
• 建議在私有鏈開發,在測試鏈開發需要等待驗證
18
智能合約開發環境
19ref:Ethereum ❤ Truffle
開發環境 - 入門版
• Mist (以太坊官方錢包) / MetaMask (瀏覽器外掛錢包)
• 需準備足量的 Ether
• Solidity IDE:Remix
• 可在線上 IDE 開發、編譯、部署智能合約,並且能發行交易
• web3.js
• Ethereum JavaScript API
• 實作了通用的 JSON-RPC 規範
• 通過 RPC 呼叫與本地端節點溝通
20
開發環境 - 框架版
• 編輯器:VS Code
• 擴充功能:solidity
• 私有鏈:
• Ganache CLI (以前叫做 TestRPC)
• 提供快速方便的測試環境,建立以太坊私有鏈
• 每次執行都會產生 10 組帳戶,而且每組賬戶都有 100 ether,讓你有充
足的 ether 做測試
• 挖礦是自動的 (每個 transaction 執行都是即時的)
• Ganache:GUI 版
• 開發框架:Truffle
• 可自動化從智能合約的測試到編譯到部署合約再到 app 建置的過程
• 其中不含鏈的建置和操作,所以要搭配 Ganache (或用客戶端軟體自
建一個節點並開放 RPC)
• web3.js
21
安裝環境
$ npm install -g truffle ganache-cli
$ ganache-cli --version
$ truffle version
22
Truffle 操作
$ mkdir project
$ cd project
$ truffle init
23
設定 Truffle
truffle.js
24
ganache-cli 操作
25
-m,--mnemonic:指定 HD wallet 欄位
裡的 Mnemonic 來產生其對應的帳戶
編譯合約
26
部署合約
27
ABI (Application Binary Interface)
• API 和 ABI 都是程式間互動的介面
• API:包含程式提供外界存取的 functions、
variables 等
• ABI:程式是被編譯後的 binary code,傳遞是
binary 格式的資料
• ABI 就要描述如何 decode/encode 程式間傳遞
的 binary 資料
28
感謝各位聆聽
29

More Related Content

Similar to Ethereum Smart Contract Development

blockchain&cryptocurrency
blockchain&cryptocurrencyblockchain&cryptocurrency
blockchain&cryptocurrencySean Liu
 
A tour of ethereum ecosystem
A tour of ethereum ecosystemA tour of ethereum ecosystem
A tour of ethereum ecosystemChang-Wu Chen
 
投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈Yao-Wei Ou
 
TokenPocket钱包官网 TP钱包下载 TP Wallet.pdf
TokenPocket钱包官网 TP钱包下载 TP Wallet.pdfTokenPocket钱包官网 TP钱包下载 TP Wallet.pdf
TokenPocket钱包官网 TP钱包下载 TP Wallet.pdfToken Pocket
 
Cloud native
Cloud nativeCloud native
Cloud nativeCi Jie Li
 
Build the Blockchain as a Service using Ethereum on Kubernetes
Build the Blockchain as a Service using Ethereum on KubernetesBuild the Blockchain as a Service using Ethereum on Kubernetes
Build the Blockchain as a Service using Ethereum on KubernetesCi Jie Li
 
TokenPocket钱包官网TP钱包TP钱包官网APP下载.pdf
TokenPocket钱包官网TP钱包TP钱包官网APP下载.pdfTokenPocket钱包官网TP钱包TP钱包官网APP下载.pdf
TokenPocket钱包官网TP钱包TP钱包官网APP下载.pdftp wallet
 

Similar to Ethereum Smart Contract Development (8)

blockchain&cryptocurrency
blockchain&cryptocurrencyblockchain&cryptocurrency
blockchain&cryptocurrency
 
A tour of ethereum ecosystem
A tour of ethereum ecosystemA tour of ethereum ecosystem
A tour of ethereum ecosystem
 
Intro to TrueBit
Intro to TrueBitIntro to TrueBit
Intro to TrueBit
 
投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈投資還是投機?帶你入門虛擬貨幣與區塊鏈
投資還是投機?帶你入門虛擬貨幣與區塊鏈
 
TokenPocket钱包官网 TP钱包下载 TP Wallet.pdf
TokenPocket钱包官网 TP钱包下载 TP Wallet.pdfTokenPocket钱包官网 TP钱包下载 TP Wallet.pdf
TokenPocket钱包官网 TP钱包下载 TP Wallet.pdf
 
Cloud native
Cloud nativeCloud native
Cloud native
 
Build the Blockchain as a Service using Ethereum on Kubernetes
Build the Blockchain as a Service using Ethereum on KubernetesBuild the Blockchain as a Service using Ethereum on Kubernetes
Build the Blockchain as a Service using Ethereum on Kubernetes
 
TokenPocket钱包官网TP钱包TP钱包官网APP下载.pdf
TokenPocket钱包官网TP钱包TP钱包官网APP下载.pdfTokenPocket钱包官网TP钱包TP钱包官网APP下载.pdf
TokenPocket钱包官网TP钱包TP钱包官网APP下载.pdf
 

Ethereum Smart Contract Development

  • 1. [ titangene@stust ~ ] $ cat .profile # author: 郭柏均 (Titan) # email: titangene.tw@gmail.com # blog: https://titangene.github.io # facebook: titangene.blog # github: titangene # date: 2018-10-25 14:00:00 以太坊智能合約開發 Slide
  • 2. 大綱 • 區塊鏈 (Blockchain) • 以太坊 (Ethereum) • 智能合約 (Smart Contract) • Solidity • 開發環境 • Truffle • ganache-cli 1
  • 3. 區塊鏈 (Blockchain) • 中本聰 在 2008 年,於 Bitcoin: A Peer-to-Peer Electronic Cash System 此篇 paper 中提出區塊鏈概 念,作為加密貨幣比特幣的公開交易帳本 • 區塊鏈通常指的是虛擬貨幣 (比特幣、以太幣) 交易網路 所使用的技術 • 比特幣:第一大加密貨幣 • 以太幣:第二大加密貨幣 • 以廣義來說,區塊鏈用多個舊技術的組合技 • 去中心化:分散式帳本 • 共享帳本:P2P、密碼學 (非對稱式加密、雜湊、簽章) 2
  • 4. 區塊鏈 (Blockchain) • 由區塊和鏈組成的 • 區塊:由許多筆交易組成 • 鏈:用來將許多區塊連接在一起 • 每個區塊都會保存上一個區塊的雜湊值 (Hash value),因此能將區塊串成鏈狀 3
  • 5. 以太坊 (Ethereum) • 提供智能合約的公共區塊鏈平台 • 利用其專用的加密貨幣 (以太幣,Ether,ETH) 提供去中心化的 VM (以太虛擬機,EVM, Ethereum Virtual Machine) 來處理智能合約 • 以太幣可以在帳戶與智能合約之間進行轉移 4
  • 6. EVM (Ethereum Virtual Machine) • EVM 是 Ethereum 提供了一個去中心化的 VM 來執行智 能合約。利用特定程式語言開發智能合約,再將程式碼 經編譯後轉換成 bytecode,並存至區塊中。 5ref:Ethereum DApp 初心者之路 (3): 簡介 Ethereum (乙太坊)、Smart Contract (智能合約)
  • 7. Ethereum Network • 用於轉移資金和儲存資料 • networks 是由一個或多個節點所組成 • 每個節點都是跑 Ethereum client 端的主機 • 任何人都可以是節點 • 每個節點都可以包含區塊鏈的完整或單獨副本 • 區塊鏈可視為 DB,用於儲存每筆已發生的交易記錄 6
  • 8. Ethereum Network 分類 Main net (主網路) • 可以和法定貨幣或其他虛擬貨幣進行交易 • 用於部署正式智能合約的網路 Private net (私有網路) • 在 local 建立的網路,不需連接 internet • 通常帳戶都是虛擬的,由開發者控制多個虛擬帳戶進行交易或部署合約 • 便於開發,在私網挖礦相對容易,不用等待長時間的驗證 Test net (測試網路) • 用於測試環境,測試網路上的 Ether 沒有實際價值 • 用於完成私有網路的測試後,再發布至主網路前的最後測試 • 需要等待交易驗證 (慢),不建議在測試網路開發智能合約 7
  • 9. Ethereum 測試網路 Ropsten • 以太坊官方提供的測試網絡 • 使用 PoW (Proof-of-Work,工作量證明) 共識機制 Kovan • 由以太坊錢包 Parity 的開發團隊發起 • 僅有 Parity 錢包 client 端可以使用這個測試網絡 • 解決測試網絡中 PoW 共識機制的問題,改用權威證明 (Proof- of-Authority,PoA) 共識機制 Rinkeby • 以太坊官方提供的測試網絡 • 使用 PoA 共識機制 • 開發人員常用的測試網路 8
  • 10. Etherscan • Ethereum Block Explorer • 可方便查看在區塊鏈上發生的交易 • 錢包餘額 • 錢包、智能合約的交易紀錄、狀態 • 主網路的 Etherscan • 測試網路的 Etherscan • Ropsten • Kovan • Rinkeby 9
  • 11. Ethereum 帳戶 • 外部帳戶 (External owned accounts,EOAs): • 由使用者所持有的帳戶 • 包含帳戶地址 (由公鑰產生)、帳戶餘額、私鑰 • 可以通過建立和簽署交易從 EOA 發送訊息 • 合約帳戶 (Contract accounts,CA): • 由 EOA 發行的交易作為 Trigger 來執行智能合約內的 程式碼 • 合約地址是由建立合約時產生的 • 在合約帳戶中,每次合約帳戶收到一條訊息或交易時, 會執行該合約的程式碼,允許其讀取和寫入資料,並發 送其他訊息或依次建立合約 10
  • 12. Ethereum client • go-ethereum (Golang) • Parity (Rust) • cpp-ethereum (C++) • EthereumJ (Java) • ruby-ethereum (Ruby) 使用 go-ethereum 和 Parity 占多數 11
  • 13. Ethereum 錢包 MetaMask (Web browser extension) • Chrome, Firefox, Opera Mist / Ethereum Wallet (Electrum) • Mist 是 Electrum App,也就是帶有 Web 界面的桌面 混合 (hybrid) 應用程式 • Ethereum Wallet 只是 Mist 的一個實作,只能存取 一個 DApp,就是 Ethereum Wallet Ðapp 12
  • 14. Ethereum 貨幣單位 • Ether 是 Ethereum 的貨幣單位 • 用於支付 EVM 中的計算 13 Unit Wei value Wei wei 1 wei 1 Kwei (babbage) 103 wei 1,000 Mwei (lovelace) 106 wei 1,000,000 Gwei (shannon) 109 wei 1,000,000,000 microether (szabo) 1012 wei 1,000,000,000,000 milliether (finney) 1015 wei 1,000,000,000,000,000 Ether 1018 wei 1,000,000,000,000,000,000
  • 15. Gas • 類似燃料 (fuel),用於執行、部署合約,以太坊上 轉賬都需要消耗 Gas • 交易費用 = Gas Limit x Gas Price • 一般以 GWei 為單位 (1 GWei = 10-9 ETH) • 交易費用就是礦工挖礦的獎勵 • 交易費用越低交易時間便越長 • 交易時,可以決定 Gas 價格,不能決定 Gas 用量 • 程式越複雜越貴 • out of gas:交易費不夠時,會取消交易 • 交易費還是會被礦工全拿走 14
  • 16. 智能合約 (Smart Contract) 15ref:Beginning DApp Programming on Ethereum with JavaScript and Solidity
  • 17. 開發智能合約的程式語言 • Solidity (JavaScript-like) • 較多人用,社群較活躍,教學資源最多 • Serpent:(Python-like) • LLL (Lisp Like Language) • Viper (Python-like,實驗性) • Mutan (已棄用) 16
  • 18. Solidity • Contract-Oriented Programming Language (智能合約導向的程式語言) • 在以太坊平台上開發智能合約的主要程式語言 • 靜態型別的程式語言 • 會被編譯成可在 EVM 上執行的 bytecode • 類似 Java 在會被編譯成可在 JVM 上執行的 Java bytecode 17
  • 21. 開發環境 - 入門版 • Mist (以太坊官方錢包) / MetaMask (瀏覽器外掛錢包) • 需準備足量的 Ether • Solidity IDE:Remix • 可在線上 IDE 開發、編譯、部署智能合約,並且能發行交易 • web3.js • Ethereum JavaScript API • 實作了通用的 JSON-RPC 規範 • 通過 RPC 呼叫與本地端節點溝通 20
  • 22. 開發環境 - 框架版 • 編輯器:VS Code • 擴充功能:solidity • 私有鏈: • Ganache CLI (以前叫做 TestRPC) • 提供快速方便的測試環境,建立以太坊私有鏈 • 每次執行都會產生 10 組帳戶,而且每組賬戶都有 100 ether,讓你有充 足的 ether 做測試 • 挖礦是自動的 (每個 transaction 執行都是即時的) • Ganache:GUI 版 • 開發框架:Truffle • 可自動化從智能合約的測試到編譯到部署合約再到 app 建置的過程 • 其中不含鏈的建置和操作,所以要搭配 Ganache (或用客戶端軟體自 建一個節點並開放 RPC) • web3.js 21
  • 23. 安裝環境 $ npm install -g truffle ganache-cli $ ganache-cli --version $ truffle version 22
  • 24. Truffle 操作 $ mkdir project $ cd project $ truffle init 23
  • 26. ganache-cli 操作 25 -m,--mnemonic:指定 HD wallet 欄位 裡的 Mnemonic 來產生其對應的帳戶
  • 29. ABI (Application Binary Interface) • API 和 ABI 都是程式間互動的介面 • API:包含程式提供外界存取的 functions、 variables 等 • ABI:程式是被編譯後的 binary code,傳遞是 binary 格式的資料 • ABI 就要描述如何 decode/encode 程式間傳遞 的 binary 資料 28