[ModernWeb2018] Web3.0 區塊鏈 DApp + 智能合約開發:你必要挑戰的坑坑洞洞

Taien Wang
Taien WangCTO & Capital Partner at NST Capital & LEADBEST
Web3.0 區塊鏈 DApp + 智能合約開發
你必要挑戰的坑坑洞洞
2018.07.18 @ ModernWeb 2018
Taien Wang <taien.wang@gmail.com>
• 安世泰共同合夥創辦人
• LEADBEST共同創辦人兼技術長
• TGO鯤鵬會台北分會會長
大型電商 friDay 購物前技術總監,微軟資安 MVP,2013
年拿下Facebook廣告API全球冠軍,擁有超過 10 年網路
研發和5年大型技術團隊管理。在技術架構與領導管理有
豐富實戰經驗,並於多項領域(資安、創新、雲端、網路
與廣告技術)獲得傑出成就。全球技術領導者高階社群
TGO 鯤鵬會台北分會發起人。知名白帽駭客,獲得多項國
際公司 Bug Bounty Award,包含:Yahoo、Line、
Synology 等。
https://www.linkedin.com/in/taienwang/
王志清 (Taien Wang)
區塊鏈不是新技術?
區塊鏈:一個新的技術組合
● 去中心化:分散式,效能不好的分散式資料庫
● 共享帳本:P2P & 密碼學(非對稱式金鑰、雜湊、簽章)
● 共識演算法:PoW(Proof of Work)、PoS(Proof of Stake)、DPoS(Delegated Proof of Stake)、
Ripple共識算法…
Ref: https://bitcoin.org/en/developer-guide#block-chain
新的技術組合
搭配經濟模型與人性
Bitcoin 到 Cryptocurrency(加密貨幣)
區塊鏈的類型
● 公有鏈
● 私有鏈
● 側鏈
● 聯盟鏈
授權節點
私有鏈
公開節點
公有鏈公有鏈
公開節點
聯盟鏈
側鏈
internet
intranet
3.0:超越貨幣與金融範圍1.0:加密貨幣 2.0:可程式化區塊鏈
區塊鏈架構
Ref: 邹均等人 - 区块链技术指南
區塊鏈生態圈概觀
挖礦
加密貨幣
應用
出金
礦機 礦場
資產交易
資產交易
線上中心
交易所
線下場外交易
線上去中心化
交易所
清算
資產
數位化
社群
與媒體
投資
溯源 基金企業應用
IoT支付
錢包
如果全世界以區塊鏈重新詮釋網際網路
是什麼樣子?
Web3.0
如同當年第一次接上網際網路
高風險、高收穫
不要為了
區塊鏈而區塊鏈
下一代
加密貨幣與去中心化
應用平台
• 開源有智慧型合約功能的公共區塊鏈平台
• 通過其專用加密貨幣以太幣(Ether,又稱
「以太幣」)提供去中心化的虛擬機器(稱為
「以太虛擬機」Ethereum Virtual Machine)
來處理對等合約
Ethereum DApp 重要角色
● (身份)Key
● (程式)Solidity
● (虛擬機)EVM
● (執行環境)Main / Test / Private
EVM
Main
Blockchain
Test Blockchain
(Ropsten/Kovan/Rinkeby)
Main
Blockchain
Smart Contract
(Solidity)
Truffle
(on node.js)
Web3.js
Web App
(HTML/CSS/Javascript)
Ethereum core(Geth, cpp-ethereum, ethereumj, …)
RPC / TestRPC / JSONRPC
Account Address / Public Key / Private Key
以錢包私鑰地址為主的世界
DApp(Decentralized Application)
通行證 1
瀏覽器+外掛錢包
坑:brave 的 metamask 版本更新最快
坑:頻繁更新,造成程式錯誤
通行證 2
App 錢包
坑:不一定支援測試網路
坑:錢包調用 Web3.js 版本不一緻
Toshi imTokenCipher
錢包金鑰產生的方式
● (主)Ethereum Wallet:keystore 檔案,加密封裝的金鑰
● (輔)MetaMask:BIP32/BIP39,單一 seed 產生多組 key pair 及 seed 產生
● PS:透過 MyEtherWallet 轉換出私鑰
Main / testnet / privatenet
MetaMaskEthereum Wallet
強烈不建議用錢包開發
同步太耗時間與空間
智能合約 Solidity
Solidity Compiler
Byte Code
智能合約定義
(Solidity)
Application
Binary Interface
Ref: https://www.ethereum.org/token
開發工具(DEMO)
● Online/Web:REMIX ● Desktop:Atom
測試鏈開發
延遲、不穩定是家常便飯
自建私有鍊
● 運行私有練 Ethereum
○ 創世區塊設定
○ 參考
■ Karien:建立 Go Ethereum 私有鍊
● 伺服器狀態 eth-netstats / eth-net-intelligence-api
○ 參考
■ Karien:監控 Go Ethereum 的區塊鏈狀況
● 鏈紀錄查詢 ethereumproject/explorer
○ 網頁主程式與同步程式
自建私有鍊 – 常見問題
● Node.JS Mongo 函式庫方法更新
○ 解法:mongoose 连接警告问题(node:148572) DeprecationWarning: `open()` is deprecated
in mongoose >= 4.11.0
● Ethereum 限制連線節點
○ 設定子網路連線後,其他網路被拒絕( --netrestrict 10.1.0.0/16 )
■ DEBUG[05-11|10:38:36] Rejected conn (not whitelisted in NetRestrict)
addr=34.213.59.140:47536
■ DEBUG[05-11|10:38:39] Rejected conn (not whitelisted in NetRestrict)
addr=103.106.98.120:48290
ERC-20 Token
本質上:就是個智能合約
股票?公司債?Utility?
EIP 與 ERC
● EIP:Stands for Ethereum Improvement Proposals (以太坊改进建议)
● ERC:Ethereum Request for Comment
● ERC-20 對應 EIP-20
Ethereum ERC20 代幣
● Functions
○ function totalSupply() constant returns (uint256 totalSupply)
○ function balanceOf(address _owner) constant returns (uint256 balance)
○ function transfer(address _to, uint256 _value) returns (bool success)
○ function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
○ function approve(address _spender, uint256 _value) returns (bool success)
○ function allowance(address _owner, address _spender) constant returns (uint256 remaining)
● Events
○ event Transfer(address indexed _from, address indexed _to, uint256 _value)
○ event Approval(address indexed _owner, address indexed _spender, uint256 _value)
ERC20本質(2/2)
0x00001
代幣智能合約
0x00002
錢包 A
0x00003
錢包 B
0x00004
智能合約
錢包基本上不會知道你有啥 Token
Dapp – 加密貓 (1/2)
● Login ● 主畫面
Dapp – LEADBEST (2/2) (DEMO)
● 登入錢包 ● 透過錢包辨識身份登入
Ethereum 歷史資安事件
Dapp 還是網頁應用程式
所有網路弱點都會發生
請參考 OWASP Top Ten
最麻煩的是
區塊鏈特性與智能合約的安全性
SmartContract 安全原則
● 做好異常錯誤準備
● 謹慎發布智能合約
● 保持智能合約簡單
● 保持最新狀態
● 留意區塊鏈的特性
○ 外部調用、時間、同步
● 確保金鑰保護與權責分離
Ref: https://consensys.github.io/smart-contract-best-practices/general_philosophy/
SmartContract 已知攻擊(1/3)
● 外部調用
○ 盡量避免外部調用
○ 了解 send()、transfer()、以及 call.value() 差別
○ 處理外部調用錯誤
○ 不要假設你知道外部調用的控制流程
○ 外部合約優先使用 pull,而不是 push
● 鏈上的資料是公開的
● 正確使用 assert() 和 require()
Ref: https://consensys.github.io/smart-contract-best-practices/known_attacks/
SmartContract 已知攻擊(2/3)
● 注意使用整數除法
● 小心除0、整數溢位
○ SafeMath
● 保持 fallback 簡單(2300 GAS限制)
● 時間依賴性
● block.timestampe: 30秒規則
● Block.number: 12 分鐘
Ref: https://consensys.github.io/smart-contract-best-practices/known_attacks/
SmartContract 已知攻擊(3/3)
● 檢查 fallback 的資料長度限制
● 明確定義函數與變數可視性
● 將 pragmas 鎖定在某個特定版本
● 區分功能與事件
● 避免使用 tx.origin
Ref: https://consensys.github.io/smart-contract-best-practices/known_attacks/
Build Security In Agile
Code Review Meeting圖片來源:https://eternalsunshineoftheismind.wordpress.com/2013/02/04/agile-
methods-of-software-development-2/
development alpha beta gamma stage production
資料庫 docker docker 獨立 獨立 共用
乙太坊網路 testrpc testrpc privatenet testnet main
用途 開發 CI QA UAT 程式碼相容
是否對外 否 否 否 否
申請後開放
不對外 對外
Dapp 持續集成部署流程
commit to
master
static
analysis
checkout tag
vX.X.X
checkout tag
vX.X.X
create tag
vX.X.X
build
ABI/bytecode
checkout tag
vX.X.X
deploy
alpha
deploy
stage
build
ABI/bytecode
testcode
checkout tag
vX.X.X
checkout tag
vX.X.X
deploy
development
endendendendend
run test
deploy
beta
run test
deploy
gamma
run test manual test
deploy
production
end
verify? verify? verify? verify? verify?
manual test
Security 重點
安全要點 程式碼風格 安全工具
漏洞賞金 安全稽核
測試案例
Web 2.0 到 Web 3.0 轉換
工具 運算 服務介面 資料庫 儲存空間
Web2 App
瀏覽器 伺服器 HTTP API 資料庫
網頁伺服器
CDN
Web3 DApp
錢包
瀏覽器
點對點網路 智能合約 ABI
分散式儲存於
區塊鏈
分散式
CDNS
(IPFS/SWA
RM)
技術人最好的時代
2018 區塊鏈落地元年
We Are Hiring
Taien Wang
<taien.wang@gmail.com>
<Fb: taien.tw>
1 of 44

More Related Content

Similar to [ModernWeb2018] Web3.0 區塊鏈 DApp + 智能合約開發:你必要挑戰的坑坑洞洞(20)

災難演練@AWS 實戰分享 災難演練@AWS 實戰分享
災難演練@AWS 實戰分享
Amazon Web Services356 views
Let's build a user-centric teamLet's build a user-centric team
Let's build a user-centric team
George Chang148 views
About grow upAbout grow up
About grow up
biaowei zhuang1.3K views
JIRA Live DEMO 2020 v17JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17
Linktech593 views
Jira live demo 2021 v23Jira live demo 2021 v23
Jira live demo 2021 v23
Linktech115 views
中文台日提携対中ビ[1].. (中文台日提携対中ビ[1].. (
中文台日提携対中ビ[1].. (
沖縄ロングステイ協議会代表(超小型モビリティ実証)294 views

More from Taien Wang(16)

[ModernWeb2018] Web3.0 區塊鏈 DApp + 智能合約開發:你必要挑戰的坑坑洞洞