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
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.6k
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
280
Graviton と Nitro と私
maroon1st
0
160
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
4
690
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
470
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
620
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
GoLab2025 Recap
kuro_kurorrr
0
3.6k
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
39k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2k
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
1.1k
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to make the Groovebox
asonas
2
1.9k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Scaling GitHub
holman
464
140k
Why Our Code Smells
bkeepers
PRO
340
58k
ラッコキーワード サービス紹介資料
rakko
0
2M
We Are The Robots
honzajavorek
0
130
Building AI with AI
inesmontani
PRO
1
620
New Earth Scene 8
popppiees
1
1.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
38
Building an army of robots
kneath
306
46k
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