智能合約 一、Articles 1. 智能合約的發展與應用 陳 恭 (2017) [download ] 二、Slides 1. 以太坊智能合約撰寫簡單教學 (林修平,2016) 簡單的介紹以太方智能合約撰寫的基礎及注意事項,使用 Solidity 語言撰寫
https://www.slideshare.net/NicholasLin15/ss-69279815 2. 三、Teaching Materials 1.Smart Contract 開發 - 使用 Solidity 系列 Day01~Day 30 Liou, Ailin (2018) https://ithelp.ithome.com.tw/users/20092025/ironman/1759
開發智能合約 - 序 (Day01)
開發智能合約 - 交易 (Day02)
開發智能合約 - 區塊 (Day03)
開發智能合約 - 帳戶的基本概念 (Day04)
開發智能合約 - MetaMask 加密貨幣錢包 (Day05)
開發智能合約 - 什麼是 Gas (Day06)
開發智能合約 - 網路 (Day07)
開發智能合約 - 用戶端 Geth, Parity (Day08)
開發智能合約 - 線上版 IDE 之 Remix 基礎篇 (Day09)
開發智能合約 - 線上版 IDE 之 Remix 進階篇 (Day10)
開發智能合約 - 介紹 Solidity 語言 (Day11)
開發智能合約 - 合約的結構 (Day12)
開發智能合約 - Solidity 型別 (Day13)
開發智能合約 - 表達 式 與流程控制 (Day14)
開發智能合約 - 函式與修飾標記 (Day15)
開發智能合約 - mapping 型別 (Day16)
開發智能合約 - 可見度和自動生成 getter 函示 (Day17)
開發智能合約 - 單位和全域變數 (Day18)
開發智能合約 - 實戰練習「簡易版 King of the Ether (1/2) 」 (Day19)
開發智能合約 - 實戰練習「簡易版 King of the Ether (2/2) 」 (Day20)
開發智能合約 - 繼承、抽象合約 (Day21)
開發智能合約 - 介面 (Day22)
開發智能合約 - 實戰練習「 Rinkeby Faucet 」 (Day23)
開發智能合約 - 函式庫 (Day24)
開發智能合約 - 介紹 Oraclize 與資料來源 (Day25)
開發智能合約 - Oraclize request (Day26)
開發智能合約 - Oraclize 可靠證明 (Day27)
開發智能合約 - Oraclize 的 computation 資料來源 (Day28)
開發智能合約 - Solidity 代碼檢查工具 Solium (Day29)
開發智能合約 - 附錄 (Day30)
2. 四、Syllabuses 1. 台大 資訊系統訓練班 https://train.csie.ntu.edu.tw/train/course.php?id=2813
乙太坊智能合約(Solidity)實作班
本課程之設計以乙太坊(Ethereum)上之智能合約的初學者為出發,從區塊鏈與Ethereum的發展跟Gas的介紹談起,接著帶入Solidity的語法與寫作,最後談到智能合約上的資訊安全課題,課程目標是讓學生具有基本智能合約的撰寫與審計能力(本門課10小時不含Web3.js的教學)。Class 1:區塊鏈與乙太坊簡介、Geth使用、環境介紹 Class 2:Solidity的合約架構、變數型別、運算、修飾詞、函式 Class 3:Visibility、enum、struct、繼承、變數屬性 Class 4:錯誤處理、存取其他合約、常見函式庫與關鍵字 Class 5:乙太坊上的資訊安全
2.智能合約開發超級入門 ( 胡耀傑 Jeff)
https://www.tibame.com/course/347
(1).
從零開始寫第一份智能合約
初學開發工具介紹 20:23
智能合約 ( 一 )- 區塊鏈數據存儲 32:31
(2).
初階智能合約技巧
智能合約 ( 二 )- 加減器 16:09
智能合約 ( 三 )- 安全加減器 / 外部模組調用 19:12
智能合約 ( 四 )- 亂數器 / 區塊鏈高度查看 / 哈希亂數器 20:44
(3).
第一份發幣合約
智能合約 ( 五 )- 帳本 / 簡易安全防禦 29:41
(4).
[Bonus 彩蛋解鎖成功 ] ERC20 相容的完整發幣合約 ( 破 50 人加碼演出 )
速寫 ERC20 相容的發幣合約 + 利用 MyEtherWallet 直接操作轉幣 20:50
沒寫過程式也能輕鬆上手! 智能合約(一):你的第一份智能合約
帶你從最基礎理解智能合約撰寫,學習撰寫智能合約語言Solidity的基本語法、程式註解、相容版本宣告、合約本體、無符號整數變數宣告...等概念。寫過程式的同學可以很快上手,沒學過程式的同學也能一步一步學習。
智能合約(二):加減器
從上一份合約延伸更多修改區塊鏈上的數據的方式,這們課將教你非公開變數宣告,以及變數增減,學習如何合理有效的更新區塊鏈上的數據。
智能合約(三):安全加減器
第二份智能合約的加減器存在著執行上的漏洞,有很大機會被駭客利用。 因此第三門合約將教大家如何調用外部模組來修正不安全的函數。
智能合約(四):亂數器
想要寫遊戲或是一份比較生動彈性的智能合約,產生亂數的機制是不可或缺的。 第四個合約將帶大家寫出一個產生亂數的函數,其中使用到區塊鏈高度查看、區塊鏈高度調用、區塊鏈時間調用來完成這個簡易隨機數產生器。
智能合約(五):第一份發幣合約
談到區塊鏈,就會聯想到現今已知超過1500個幣種,這讓金融世界變得非常活躍、豐富也 充滿挑戰。這門課就將帶大家自己動手完成一份極度簡易發幣合約,讓大家瞭解完成一次發幣並不是那麼難的一件事!
3. https://www.tibame.com/course/492 4.
區塊鏈以太坊 (09D364 科管局免費課程) https://www.sharecourse.net/sharecourse/course/view/courseInfo/2257Section 1 1. 課程介紹 2. 什麼是區塊鏈 3. 區塊鏈展示 4. 什麼是共識協定 5. 去中心化應用程式架構介紹
Section 2 1. 乙太坊區塊鏈 2. 介紹乙太坊錢包-metamask 3. 安裝乙太坊錢包-metamask 4. 如何使用乙太坊錢包-metamask 5. 乙太坊錢包-metamask與去中心化應用程式
Section 3 1. 介紹開發環境與工具 2. 安裝visual Studio Code 3. 安裝NodeJS和 Truffle 4. 安裝Ganache 5. 介紹truffle使用方式 6. 編寫智能合約及編譯智能合約 7. 佈署智能合約及使用智能合約
Section 4 1. Pet shop 專案介紹 2. Pet shop 傳案資料夾介紹與撰寫智能合約 3. 佈署智能合約 4. 智能合約單元測試 5. 介紹pet shop如何運作 6. 撰寫pet shop前台 7. MetaMask 設定及如何與petshop互動 8. 佈署 Pet shop智能合約在Ropsten測試鏈上
5. 東海大學推廣教育區塊鏈在智能合約的建置
1.區塊鏈介紹*發展歷程介紹※比特幣與區塊鏈概觀*智能合約:以太坊 ※區塊鏈技術與智能合約的應用2.共識演算法分析與討論*共識演算法整理與分析 ※深入淺出共識演算法理論*Bitcoin Blockchain 共識演算法介紹2.1共識演算法分析與討論*Hyperledger Fabric 1.0 共識演算法介紹*Ethereum 共識演算法介紹3.以太坊私有鏈建置教學由教師進行以太坊用戶端安裝教學,讓所有學員加入同一個私有鏈中,接著在私有鏈上進行挖礦與交易的測試4.Bitcoin 到 Blockchain 基礎概念*Bitcoin 與 Blockchain 的運作流程剖析*Blockchain 為什麼比 Bitcoin 更重要*認識分散式帳冊 (Distributed Ledger)*Peer-to-Peer 與 Decentralized 概念*Bitcoin Blockchain 的 Proof-of-Work 流程5.Blockchain 商業模式與 Use Case*區塊鏈1.0:Blockchain 在 Cryptocurrency 與 Fintech 的應用探討*區塊鏈2.0:Blockchain 在 Non-fintech 的應用探討*區塊鏈3.0:Blockchain 在 IoT 的應用探討*熱門創新應用探討-Assets 與 Property*混合區塊鏈產品規劃(Hybrid Blockchain)6.Blockchain 開源與安全議題*Hyperledger、R3 與 Ethereum 生態*看懂「hard-fork」與全球區塊鏈安全事件*認識社群-AltCoin、Colored Coin 與 LiteCoin*交易安全性探討 (Transactions and Consensus)*深入 Block Size 與 Fork 安全議題7.智能合約規劃*認識智能合約的本質與應用*從共識算法到認識智能合約原理*智能合約區塊鏈平台使用介紹 (Hyperledger 與 Ethereum)8.智能合約實習*讓學員私有鏈平台,練習撰寫區塊鏈應用的智能合約(Smart Contracts)*請學員利用範例網頁程式呼叫區塊鏈以及智能合約,將網頁交易寫入區塊鏈並觀察寫入狀況 6. 南台科大 區塊鏈技術 https://flip.stust.edu.tw/course/26514/intro
區塊鏈是一種點對點網路形式的分散式資料庫,可實現去中心化(decentralized)、資料無法被片面竄改(indelible ledger)以及透明公開的交易(Transparent)。去中心化不僅能取代第三方的昂貴費用以及風險,如惡性倒閉與捲款潛逃,而資料無法被片面竄改與透明公開性,可確保交易的真實與公平。目前區塊鏈已經從數位貨幣,逐漸發展到智能合約與分散式帳本的相關應用,更是Fintech與物聯網(IoT)等產業不可或缺的應用趨勢,本課程將介紹如何利用區塊鏈相關技術,來實現更多創新應用。
課程大綱 1. 區塊鏈基本概念與相關密碼學 2. Bitcoin比特幣以及其他數位貨幣 3. 區塊鏈平台Etherum建置、錢包、挖礦及驗證流程 4. Etherum上私有鏈的建置 5. Etherum上智能合約的撰寫與佈建 6. 智能合約在金融科技上與應用實務(集保、證卷) 7. 智能合約在共享經濟上與應用實務(電子書、共享單車) 8. Hyperledger基礎架構布建 9. Hyperledger上分散式帳本建置 10. 分散式帳本在資料紀錄上的應用實務 11. 分散式帳本在行動支付的應用實務 12. 分散式帳本在務聯網上的應用實務 13. 區塊鏈安全議題(一)- 共識演算法PoW PoS (Consensus Algorithm) 與常見的區塊鏈威脅 14. 區塊鏈安全議題(二) – 交易內容的隱私與Hawk,Zcoin的介紹 15. 區塊鏈安全議題(三) –隱私保護技術 Zero Knowledge Proof、非交互式零知識證明
7.Mokoversity 開放創新學院 2017 區塊鏈高階實務班:共識機制與智能合約
https://www.moko365.com/enterprise/blockchain-distilled完整學習區塊鏈最核心的技術:智能合約、共識演算法、挖礦機制與商業思維。透過零碎的新聞報導,感覺無法接收完整的 Blockchain 知識嗎?這門課程是你搭上這波區塊鏈列車的關鍵課程,除了能得到完整的知識外,也能深入理解 Blockchain 的知識與技術內涵。 課程內容 Proof-of-Work Proof-of-Stake 與 Virtual Mining 共識算法的設計與實作範例 Smart Contract 區塊鍊 3.0 與應用領域 Use Case 研究 學習重點 使用 Hyperledger Fabric 上機演練 使用 Ethereum 上機演練 共識演算法的類型與使用 建立系統化的區塊鏈知識 第 1 天 13:30-17:30 第 1 課:共識演算法分析與討論 (1 Hour) • 共識演算法整理與分析 • 深入淺出共識演算法理論 • Bitcoin Blockchain 共識演算法介紹 • Hyperledger Fabric 1.0 共識演算法介紹 • Ethereum 共識演算法介紹 • 拜占庭共識演算法 (PBFT) 研究 • DoS attack 防範 • Real-time 共識演算法設計 全球首發 第 2 課:智能合約規劃 (1 Hours) • 認識智能合約的本質與應用 • 從共識算法到認識智能合約原理 • 智能合約區塊鏈平台使用介紹 (Hyperledger 與 Ethereum) 第 3 課:智能合約實習 (2 Hours)由學員自選 Hyperledger Fabric 或 Ethereum 平台,練習撰寫 Anti-Counterfeit 區塊鏈應用的 Smart Contracts
Jollen 第 2 天 13:30-17:30 第 4 課:Bitcoin 到 Blockchain 基礎概念 (1 Hour) • Bitcoin 與 Blockchain 的運作流程剖析 • Blockchain 為什麼比 Bitcoin 更重要 • 認識分散式帳冊 (Distributed Ledger) • Peer-to-Peer 與 Decentralized 概念 • Bitcoin Blockchain 的 Proof-of-Work 流程 第 5 課:Blockchain 商業模式與 Use Case (1.5 Hour) • Blockchain 在 Cryptocurrency 與 Fintech 的應用探討 • Blockchain 在 Non-fintech 的應用探討 • Blockchain 在 IoT 的應用探討 • 熱門創新應用探討-Assets 與 Property • 混合區塊鏈產品規劃(Hybrid Blockchain) • 實例研究-區塊鏈在 Digital Property 應用實作研究 • 實例研究-區塊鏈在 Supply Chain 應用實作研究 第 6 課:Blockchain 開源與安全議題 (0.5 Hour) • Hyperledger、R3 與 Ethereum 生態 • 看懂「hard-fork」與全球區塊鏈安全事件 • 認識社群-AltCoin、Colored Coin 與 LiteCoin • 交易安全性探討 (Transactions and Consensus) • 深入 Block Size 與 Fork 安全議題 第 7 課:上機實習討論與檢討 (1 Hour)檢討第 1 天的智能合約實習功課,並討論範例程式碼
8.DApp 與 ICO 智能合約開發 https://www.tibame.com/course/345
課程目標 1. 快速學會串接區塊鏈上智能合約的DApp程式開發。 2. 能夠 創建一個ERC20 token的智能合約。 3. 學會如何 撰寫網頁錢包串接自己發行的ERC20加密貨幣。 4. 擁有串接 博弈合約之高級DApp程式開發能力。 5. 能夠 創建帶有鎖倉功能、銷毀功能的發行ERC20加密貨幣合約。
課程大綱 1. 理論講解Dapp設計架構 1-0 本課程開課引言介紹:DApp為什麼重要?
試閱 06:12
1-1 Dapp與傳統的Client Server有何不同?
試閱 16:12
1-2-1 準備開發DApp的環境-DApp開發工具與套件環境
15:29
1-2-2 準備開發DApp的環境-nodejs的開發環境-web3的安裝
21:44
1-2-3 準備開發DApp的環境-補充重要觀念:同步與異步及阻塞與非阻塞
08:21
1-2-4 準備開發DApp的環境-在Nodejs下實作DEMO
14:37
1-2-5 準備開發DApp的環境-在Nodejs上發出能查詢票數及投票的DApp指令
13:08
1-2-6 準備開發DApp的環境-跳脫Nodejs回到前端Javascript開發DApp方式
08:50
1-3-1 最佳快速開發 Smart Contract工具介紹-Remix線上編譯環境、MetaMask、Ropsten測試網路、水龍頭網站的介紹與示範
14:53
1-3-2 最佳快速開發 Smart Contract工具介紹-智能合約的編譯與部署、ABI接口、如何在Remix下調用與測試智能合約
15:12
2. 實作如何設計串接區塊鏈上智能合約的DApp程式開發 2-1 講解一個去中心化投票的智能合約內容
33:51
2-2 使用html+javascript 完成去中心化投票網站的DApp設計與實作
13:55
2-3 將去中心化投票智能合約的DApp部署到有域名的伺服器上-以Github為例
11:57
3. 實作如何創建一個ERC20 token的智能合約 3-1 ERC20標準的介紹
06:59
3-2 符合ERC20標準的Token開發與實作
27:58
3-3-1 一份重新設計的進階版 ERC20 Token 的實作
17:12
3-3-2 多簽錢包地址的合約設計
17:22
3-3-3 多簽錢包的Dapp
13:07
3-3-4 ERC20-token + Multi-sig Wallet操作示範(無聲音錄製)
11:50
3-3-5 Multi-sig wallet +Dapp的示範(無聲音錄製)
05:30
4. 深入探究智能合約遊戲 -加密貓 CryptoKitties 4-1 Cryptokitties 遊戲特色與發展解說
28:08
4-2 詳解Cryptokitties的 遊戲框架與細部合約
43:48
5. 實作串接 博弈合約之高級DApp程式開發 5-1 講解一個去中心化博奕的智能合約內容
23:28
5-2 將去中心化博奕智能合約部署到以太坊的測試鏈上
10:04
5-3 使用html+javascript 完成去中心化博奕網站的DApp設計與實作
20:04
6. 實作創建帶有鎖倉功能、銷毀功能的發行ERC20加密貨幣合約 6-1 實作鎖倉功能的ERC20代幣的開發
36:25
6-2 實作銷毀功能的合約開發
12:50
6-3 實務操作一份發行ERC20代幣的合約部署與如何造幣、鎖倉及銷毀的實作
28:23
五、學習資源 1.
區塊鏈學習資源 PecuLab https://www.peculab.org/2019/06/19/%E5%8D%80%E5%A1%8A%E9%8F%88%E5%AD%B8%E7%BF%92%E8%B3%87%E6%BA%90/ 2. BLOCK TEMPO
文組也該知道的區塊鏈技術知識《2》:一次搞懂「以太坊智能合約」如何運作 https://www.blocktempo.com/understand-how-smart-contract-works/ 3. Blockchain Demo (17'49")by Anders Brownworth BTC: 1K3NvcuZzVTueHW1qhkG2Cm3viRkh2EXJp ETH: 0x84a90e21d9d02e30ddcea56d618aa75ba90331ff https://andersbrownworth.com/blockchain/ Blockchain Demo: Public/ Private Keys & Signing (08'53") https://andersbrownworth.com/blockchain/public-private-keys/ 4.
【程式課程】零基礎邁向區塊鏈工程師 - Solidity智能合約 (03'12") https://www.youtube.com/watch?v=GQx-MRszenA 5.
3分鐘了解什麼是智能合約與其運作方式 Ho, Jason (2020) https://blockbar.io/blockchain-breaknews/blockchain-applications/%E4%BB%80%E9%BA%BC%E6%98%AF%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-what-is-a-smart-contract/
現代社會藉由科技,自動化成為了一項趨勢,智能合約能確保自動化的過程安全可信任,智能合約是以區塊鏈為基礎運行的,建議讀者先速瞭解區塊鏈。 閱讀 : 五分鐘了解區塊鏈
讓我們先用一個例子了解智能合約。架設你要出售房屋,不論哪個國家過程大多相當複雜,需要大量的文書工作、與不同公司和人員溝通以及其他各種信任風險,因此大部分房屋銷售商直接找房地產經紀人接手,經紀人會負責所有文書工作、銷售財產並在談判開始時扮演中介人的角色,監督及促進交易直到交易完成。成功達成交易後,賣方和買方的代理商、中介人將分擔銷售價格%作為佣金。這對賣方而言是相當大的財務損失。
針對上述情形,智能合約將派上用場,可以讓冗長複雜的流程自動化,流程的進行資訊公開透明並且不會受到人為干預或竄改,能改變整個相關產業的效率,同時減輕流程成本負擔,最重要的是解決信任問題。智能合約遵循著「如果-則」(If-Then)的原則工作,例如 : (If)只有當議定的金額發送到系統後,(Then)房屋的所有權才會自動轉移給買家。
智能合約還能應用於託管服務,透過將金錢和物件所有權都將存儲在區塊鏈系統中,每筆交易都將經過數百人的見證和驗證,可以確保無誤交付。由於 區塊鏈的特性 ,雙方之間的信任不再是問題,所以不需中介機構。房地產經紀人的大部分作業都可以預先編程為智能合約,這將為買賣雙方節省大量資金。
以上房產只是用例之一,智能合約能夠促進貨幣、無形及有形資產和其他任何有價值標的的交易,確保完全透明,減少中間商的服務成本,並消除交易雙方的信任問題。特定智能合約的代碼包括各方約定的所有條款和條件、交易的信息記錄都記錄在區塊鏈中,即去中心化的分散式帳本。
智能合約是運行在區塊鏈上的執行協議,滿足預先定義的規則時,將自動執行該協議。智能合約提供了有效管理鏈上資產和使用權限的機制,透過區塊鏈透明的共享帳本,保護資訊免受刪除、篡改和修訂的風險。
智能合約用例可簡單可復雜。其經常用於簡單的經濟交易,例如從A到B匯款。智能合約還可用於註冊任何種類的所有權和知識產權,並設計使用授權機制,未來可能革新各產業的系統,例如銀行、保險、能源、政務、電信、音樂、藝術,汽車、教育等領域。
使用智能合約,每個協議、流程、任務和付款都可以建立數位記錄和簽名( 數位簽章 ),可以對其進行識別、驗證、存儲和共享。此外,智能合約還可用於商品或服務供應鏈中更複雜的協議,或在無傳統集中機構的情況下管理一群擁有相同利益和目標的人,分散式自治組織(DAO)就是這樣的一個例子,雖然複雜,但智能合約確實可以規範治理準則(組織的章程,治理法規,議事規則或組織章程),並用自我執行的代碼代替日常運營管理。
優勢 : 智能合約的自動化流程,可以消除人工參與,提高合約中規定業務之交易速度,同時以區塊鏈特性為基礎,消除了第三方參與的需求和信任風險。此外區塊鏈上的數據無法竄改或刪除,所以當一方未履行其義務時,另一方將受到智能合約的保護,該自動交易機制消除了潛在的人為錯誤率,確保了合約執行的準確性。
缺點 : 智能合約的技術目前發展仍未成熟,容易出現問題。例如構成合約的代碼必須完美無誤因為無法更動。這可能會導致運行錯誤,甚至有些騙子利用這些錯誤,ex :The DAO黑客一樣,透過存入錯誤代碼的智能帳戶盜取資金。 此外,針對這新穎技術,政府該如何監管?如何徵稅?如果合約內容有問題或發生其他意外情況,如何補救?傳統合約發生這些狀況時,可以在法庭上廢除、更動,但智能合約無法。期望隨著時代演進,該技術能得到完善應用,讓智能合約成為社會不可或缺的一部分。