Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ethereum Smart Contract Development / ethereum-...
Search
Titangene
October 25, 2018
Programming
1
210
Ethereum Smart Contract Development / ethereum-smart-contract-development
使用 Truffle 區塊鏈開發框架 + Ganache 自建私有鏈開發 DApp
Titangene
October 25, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
SODA - FACT BOOK(JP)
sodainc
1
9.1k
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
Software Architecture
hschwentner
6
2.4k
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
170
ドメイン駆動設計のエッセンス
masuda220
PRO
15
7.3k
CSC509 Lecture 10
javiergs
PRO
0
160
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
150
Introducing RemoteCompose: break your UI out of the app sandbox.
camaelon
2
430
品質ワークショップをやってみた
nealle
0
910
Pythonに漸進的に型をつける
nealle
1
150
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
450
EMこそClaude Codeでコード調査しよう
shibayu36
0
560
Featured
See All Featured
Building an army of robots
kneath
306
46k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Designing for humans not robots
tammielis
254
26k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Transcript
[ titangene@stust ~ ] $ cat .profile # author: 郭柏均
(Titan) # email:
[email protected]
# 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,並存至區塊中。 5 ref: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) 15 ref: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
智能合約開發環境 19 ref: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