• 沒有找到結果。

基於Fabric區塊鏈的程式市集平台 - 政大學術集成

N/A
N/A
Protected

Academic year: 2021

Share "基於Fabric區塊鏈的程式市集平台 - 政大學術集成"

Copied!
94
0
0

加載中.... (立即查看全文)

全文

(1)國立政治大學資訊管理學系. 碩士學位論文 指導教授 : 劉文卿 博士. 立. 政 治 大. ‧ 國. 學. 基於 Fabric 區塊鏈的程式市集平台. ‧. y. Nat. Program Market Platform. n. sit. er. io. Based On Fabric’s Blockchain al v i n Ch engchi U. 研究生:謝孟剛 中華民國一百零七年七月 DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(2) 摘要 隨著資訊時代的快速發展,越來越多的服務在網路上完成,資訊的安全 性也顯得更加的重要。本研究針對程式市集及程式研發的資訊,以 Hyperledger Fabric 的區塊鏈作為框架,提出一套完整的解決方案。. 本研究架設 Hyperledger Fabric Network,並設計 Smart Contract (Chaincode),所提供的服務全面的解決了金融交易以及程式研發中的資訊的. 政 治 大. 安全性,每次的研發、交易紀錄會上傳至 Fabric 區塊鏈網絡上,提供不可竄. 立. 改的紀錄以及資料使用權限設定,使用 Fabric 區塊鏈保存程式上傳的運算結. ‧ 國. 學. 果,保障購買程式者資訊的安全性及透明性。. ‧. 此外,並以 Nodejs 作為網頁框架,區分成研發環境與交易市集,研發. sit. y. Nat. 環境利用 JupyterHub 進行管理與配置,能夠同時提供多個用戶存取平台,. al. er. io. 交易市集提供程式的購買、販售,且用戶研發程式測試所需的資料可以經由. v. n. 交易市集查詢及購買,每次的研發會有日誌紀錄,每次的 AI 程式參數調整. Ch. engchi. i n U. 會有實驗記錄,並且在研發完成後可以上架至交易市集銷售使用權。. 關鍵字 : 程式市集、區塊鏈、Hyperledger、Fabric、Composer、Smart Contract、Chaincode、Channel、Docker. i. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(3) 目錄 摘要................................................................................................................................. i 目錄................................................................................................................................ii 表次............................................................................................................................... iv 圖次................................................................................................................................ v 第一章 緒論............................................................................................................ 1 第一節 研究動機與目的................................................................................ 1 第二節 研究流程............................................................................................ 2 第二章 文獻探討.................................................................................................... 3 第一節 區塊鏈................................................................................................ 3 一、 起源................................................................................................ 3. 區塊鏈的發展................................................................................ 6 智能合約........................................................................................ 7 實名、私有化................................................................................ 7. ‧. ‧ 國. 學. 二、 三、 四、 五、 六、. 政 治 大 區塊鏈技術概述............................................................................ 3 立 區塊鏈技術演進............................................................................ 5. n. al. er. io. sit. y. Nat. 七、 區塊鏈特色比較............................................................................ 7 第二節 Hyperledger........................................................................................ 9 一、 項目背景........................................................................................ 9 二、 頂級項目介紹................................................................................ 9 三、 Fabric ........................................................................................... 11 四、 Hyperledger Composer ................................................................ 18 第三節 Docker .............................................................................................. 23 一、 Docker Container 跟虛擬機的比較 ........................................... 23 二、 Docker Swarm ............................................................................. 24 第三章 系統架構.................................................................................................. 25 第一節 一、 第二節 一、 二、 三、 四、 五、 六、. Ch. engchi. i n U. v. 系統架構說明.................................................................................. 25 三層式架構(3-Layer Architecture) ............................................. 25 Fabric 區塊鏈網絡 .......................................................................... 33 Fabric 區塊鏈網絡架設 .............................................................. 33 Fabric 區塊鏈安裝流程-以 basic-network 單台主機環境為例 33 Fabric 區塊鏈身分、組織及通道管理配置 .............................. 42 透過 Nodejs SDK 與 Fabric 網絡溝通 ....................................... 50 實名制會員與 Channel 管理機制 .............................................. 51 AI 模組開發專案流程 ................................................................ 54 ii. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(4) 第三節 Composer 網絡部署 ........................................................................ 56 一、 創建 Composer business network – 以基本網絡為例 .............. 56 二、 部署 Composer network 到單一節點的 Fabric 網絡 ................. 58 三、 產生 REST API server ................................................................. 60 四、 建立應用程式.............................................................................. 61 第四章 系統實作.................................................................................................. 62 第一節 Golang 實作串接 Fabric sdk go ...................................................... 62 一、 簡介.............................................................................................. 62 二、 Fabric sdk go 測試 ....................................................................... 62 第二節 Nodejs 實作串接 Fabric sdk node ................................................... 65 一、 第三節 一、 二、. Fabric sdk node 測試 ................................................................... 65 Nodejs Chaincode 實作程式市集平台 ........................................... 66 程式市集 Chaincode 範例 – 以 Nodejs 為例 ........................... 66 程式市集平台.............................................................................. 69. 三、 第四節 一、 二、 三、. 程式市集平台.............................................................................. 78 注册、配置 OAuth ..................................................................... 80 多用戶認證機制.......................................................................... 81. 政 治 大 研發履歷與 AI 實驗設計 ........................................................... 72 立 Hyperledger Composer 實作程式市集平台 ................................... 78 ‧. ‧ 國. 學. n. al. er. io. sit. y. Nat. 第五章 結論.......................................................................................................... 84 第一節 本研究的貢獻.................................................................................. 84 第二節 未來展望.......................................................................................... 85 參考文獻...................................................................................................................... 86. Ch. engchi. i n U. v. iii. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(5) 表次. 表 1 區塊鏈特色比較表............................................................................... 8. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. iv. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(6) 圖次 圖 圖 圖 圖 圖 圖. 1 研究流程圖........................................................................................... 2 2 POW 示意圖......................................................................................... 4 3 Hyperledger 項目快速成長................................................................ 10 4 PKI、PKC 比較示意圖 ..................................................................... 12 5 Channel 示意圖 .................................................................................. 13 6 Fabric 架構圖 ..................................................................................... 14. 圖 圖 圖 圖. 7 Fabric 交易流程 ................................................................................. 15 8 Kafka 共識機制 .................................................................................. 17 9 共識結塊機制..................................................................................... 18 10 Hyperledger Composer 網絡圖 ........................................................ 19. 政 治 大 圖 11 Hyperledger Composer 解決方案架構 ............................................ 21 立 圖 12 虛擬機跟 Docker 比較圖 ................................................................. 23 ‧. ‧ 國. 學. 圖 13 三層式架構....................................................................................... 26 圖 14 程式市集平台三層式架構總圖....................................................... 27 圖 15 應用程式層....................................................................................... 29 16 服務層............................................................................................... 31 17 資料存取層....................................................................................... 32 18 Fabric 區塊鏈網絡 ........................................................................... 33 19 Fabric 網絡安裝步驟圖 ................................................................... 38 20 Fabric 網絡安裝步驟圖 – 第 0 步 ................................................. 39 21 Fabric 網絡安裝步驟圖 – 第 1 步 ................................................. 40 22 Fabric 區塊鏈網絡架構 ................................................................... 51 23 PKI 加解密示意圖 ........................................................................... 52 24 用戶於平台註冊會員流程圖........................................................... 52 25 研發履歷專案示意圖....................................................................... 53. 圖 圖 圖 圖 圖 圖 圖 圖. 26 AI 模組開發專案流程圖.................................................................. 55 27 model 檔案範例: org.example.mynetwork.cto ................................ 56 28 logic.js 檔案範例: logic.js ................................................................ 57 29 permissions.acl 檔案範例: permissions.acl ...................................... 57 30 REST API 畫面 ................................................................................. 60 31 定義 struct 儲存相關設定 ................................................................ 63 32 運用 Fabric sdk go 完成 create channel 以及 join channel ........... 63 33 運用 Fabric sdk go 完成 Chaincode install 以及 Chaincode. n. al. er. io. sit. y. Nat. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. Ch. engchi. i n U. v. instantiate ............................................................................................. 64 v. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(7) 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 34 Fabric sdk node 程式運作流程圖 .................................................... 65 35 程式市集平台 – 商品陳列畫面..................................................... 70 36 程式市集平台 - 程式商品詳情畫面 ............................................. 71 37 程式市集平台 – 會員已購買商品列表畫面................................. 72 38 專案列表畫面(會員只會看到自己有參與的專案) ........................ 73 39 專案成員進入專案觀看歷史日誌................................................... 74 40 Jypyter Notebook 線上開發並即時呈現運算結果 ......................... 74 41 Eclipse che 線上開發環境畫面 ....................................................... 75 42 Eclipse che 可直接跟 gihub 連通,引入及導出程式 .................... 76 43 AI 實驗設計輸入實驗參數及結果畫面.......................................... 77. 圖 圖 圖 圖. 44 REST API 圖 ..................................................................................... 78 45 Hyperledger Composer 程式市集平台網站圖 ............................... 79 46 Hyperledger Composer 程式市集平台網站 - 新增程式畫面 ...... 79 47 Hyperledger Composer 程式市集平台網站 - 程式資訊畫面 ...... 80. 政 治 大 圖 48 Github OAuth 註冊成功畫面........................................................... 81 立 圖 49 多用戶認證機制圖.......................................................................... 83 ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. vi. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(8) 第一章. 第一節. 緒論. 研究動機與目的. 在全球化資訊社會中,由於網際網路的盛行,以及硬體設備的蓬勃發 展,越來越多的服務在網路上進行,數不清的資訊在網路上傳遞,大眾逐漸 意識到資訊的價值,也更加重視資訊的隱私;各國政府、企業及組織順應時. 政 治 大 訊化作業,不乏重要的文件儲存在網路上,且近來民主時代的發展及食安問 立 代潮流,減少人力、物力的成本以及追求快速、便利,無不相繼推動電腦資. ‧ 國. 學. 題層出不全,更加提倡資訊的透明化,政府機關的開會決策紀錄、公益組織 的捐款流向以及食品履歷,民眾希望能夠看到完整的紀錄,如何兼顧資訊安. Nat. y. ‧. 全以及資訊透明化已經成為全世界探討之重要議題。. er. io. sit. 而所謂的區塊鏈即是透過加密技術以及分散式節點等技術,達到資訊不 可竄改的特性,且能夠看到所有的資訊紀錄,不可竄改加上資訊透明的特. al. n. v i n 性,達到了區塊鏈上資訊的公正性,使得區塊鏈在資訊安全及透明化當中扮 Ch engchi U 演的角色日益重要。. 而本研究中的交易市集平台提供用戶交易程式及資料的使用權,且提供 用戶程式開發、測試環境,所有交易、開發流程都在網路上進行,更加需要 資訊安全的保護,所以採用區塊鏈的機制,讓用戶可以看到程式回測績效及 完整的程式開發履歷也確保資產的所有權歸屬以及資訊的安全性,為了讓公 開的區塊鏈保有隱私性,採用 Fabric 區塊鏈網絡,運用 Channel 機制讓用戶 可以選擇不讓他人看到自己的程式交易紀錄,另外開發團隊也能保有程式開 發履歷、實驗設計的隱私權。 1. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(9) 第二節. 研究流程. 基於研究動機與目的所述,本研究流程圖如下,分為五個階段:. 定義問題. 文獻探討. 立. 政 治 大. 基於 Fabric 區塊鏈的程式市集平台架構設計. ‧. ‧ 國. 學. 基於 Fabric 區塊鏈的程式市集平台架構實作. n. 結論與未來展望. Ch. engchi. er. io. sit. y. Nat. al. i n U. v. 圖 1 研究流程圖. 2. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(10) 第二章. 第一節. 一、. 文獻探討. 區塊鏈. 起源. 區塊鏈的概念首次在 2008 年末由中本聰(Satoshi Nakamoto)發表在比特. 政 治 大. 幣論壇中的論文《Bitcoin: A Peer-to-Peer Electronic Cash system》[1]提出。. 立. 論文中區塊鏈技術是建構比特幣數據結構與交易信息加密傳輸的基礎技. ‧ 國. 學. 術,該技術實現了比特幣的挖礦與交易,不過比特幣區塊鏈並非一項全新的 技術,而是將跨領域過去數十年所累積的技術基礎結合。比特幣起初因為其. ‧. 高度的隱蔽性和不可追蹤性受到了網路匿名用戶的青睞,雖然博得了眼球,. y. Nat. sit. 但比特幣至今仍沒有成為一種主流貨幣,過高的波動性和各國監管層對其複. n. al. er. io. 雜的態度抑制了比特幣的發展。但其背後的數據結構-區塊鏈卻得到了快速 的發展。. 二、. Ch. engchi. i n U. v. 區塊鏈技術概述. 比特幣區塊鏈的技術大致上是由以下四種技術構成:. (一) Public Key Cryptography(PKC)(公開金鑰加密機制). (二) Difficulty 加上 Hashing 的條件式雜湊函數機制. (三) Chain(鏈) 3. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(11) (四) Proof Of Work(POW 共識演算法). 透過 PKC 技術讓交易雙方可以對資產所有權支配權的確認,且是採用 可驗證的匿名制,可以知道資產是不是對方的,但不會知道對方是誰。. 區塊鏈將大量交易透過條件式 Hash 機制封裝成區塊(Block),並將前一 個區塊的 Hash 值放入後一個區塊當中形成鏈,形成紀錄的不可竄改性。. 全球節點同步進行運算中的交易資料不同步問題,則透過 POW 共識演. 政 治 大. 算法解決,篩選工作量(運算量)比較大的分支區塊鏈接到主要區塊鏈上,建 構資料同步機制。. 立. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 2 POW 示意圖 (資料來源:杜宏毅 Blockchain 的前世今生與未來). 4. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(12) 區塊鏈技術演進. 區塊鏈在現今看起來應用不只於金融業,像是食品履歷、透明政府、產 品履歷、醫療資訊、透明獎助學金等等,需要安全、信任及透明化都是可以 應用的範圍,大眾對區塊鏈的感受僅來自於產品及應用使用上,對於深入了 解其背後的邏輯和技術則相對困難,區塊鏈這項技術並不是憑空出現的,而 是站立於眾多巨人的肩膀上而提出的。. 政 治 大 統,所有交易紀錄存放在多個節點,去中心化的資料留存方式讓買賣雙方得 立 比特幣區塊鏈所實現的基於零信任基礎、且真正去中心化的分散式系. 學. 以隨時追溯交易歷史,提升資訊透明度,因此在區塊鏈的環境下,交易一旦. ‧ 國. 驗證確認完成後,數據篡改的難度和代價將會相對龐大,資料更動的權限也. ‧. 不受單一組織控制,提升交易資料的可信任度,而其去中心化的分散式系統. sit. y. Nat. 解決一個由 Leslie Lamport 等人所提出的拜占庭將軍問題[2]。1982 年 Leslie. io. Lamport 把軍中各地軍隊彼此取得共識、決定是否出兵的過程,延伸至運算. al. er. 三、. v. n. 領域,設法建立具容錯性的分散式系統,即使部分節點失效仍可確保系統正. Ch. engchi. i n U. 常運行,可讓多個基於零信任基礎的節點達成共識,並確保資訊傳遞的一致 性,而 2008 年出現的比特幣區塊鏈便解決了此問題。而共識演算法的突破 讓區塊鏈被稱為"Trust Machine",由多台分散節點經過共識形成最後的決定 確保了交易的安全性及容錯性。. 而比特幣區塊鏈中最關鍵的工作量證明機制,則是採用由 Adam Back 在 1997 年所發明 Hashcash(雜湊現金)[3],為一種工作量證明演算法(POW), 透過此演算法讓區塊鏈網絡中的節點對交易達到共識,此演算法仰賴成本函 數的不可逆特性,達到容易被驗證,但很難被破解的特性。. 5. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(13) 在隱私安全方面的技術,可回溯到 1982 年 David Chaum 提出注重隱私 的密碼學網路支付系統[4],具有不可追蹤的特性,成為比特幣區塊鏈在隱 私安全面上的雛形。. 在區塊鏈中每筆交易,採用橢圓曲線數位簽章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA),可追溯回 1985 年 Neal Koblitz 和 Victor Miller 分別提出橢圓曲線密碼學(Elliptic curve cryptography,ECC)[5][6],首 次將橢圓曲線用於密碼學,建立公開金鑰加密的演算法。相較於 RSA 演算 法,採用 ECC 好處在於可以較短的金鑰,達到相同的安全強度。到了 1992. 政 治 大. 年,由 Scott Vanstone 等人提出 ECDSA[7]。. 學. 區塊鏈的發展. ‧. y. Nat. 區塊鏈仍在持續發展,為了有更廣泛的應用,以及應用在商業、金融等. io. n. al. sit. 嚴謹的領域當中,區塊鏈有了更進一步的發展。. er. 四、. ‧ 國. 立. i n U. v. 現在新的區塊鏈平臺大多采用了新的共識演算法(POS、DPOS、PBFT),. Ch. engchi. 共識演算法的改進,不再需要消耗大量算力來達成共識了。峰值一般能到達 3000TPS(Transactions Per Second),比特幣的處理能力 7TPS,這個已經有大 大的提高了。對比 VISA 的平均處理值為 2000TPS、峰值 56000TPS,雖然 達不到尖峰時段的業務處理量,還是可以滿足一般金融類業務。. 區塊鏈 2.0 的概念也隨之產生,其核心理念是把區塊鏈作為一個可編程 分布式信用基礎設施,支撐智能合約應用,已與過去比特幣作為一個虛擬貨 幣支撐平台區別開來,還沒有特定的定義,最具代表性的是以太坊平台以及 Hyperledger(超級帳本)專案。 6. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(14) 五、. 智能合約. 智能合約(smart contract)這個術語至少可以追溯到 1995 年,由跨領域法 律學者 Nick Szabo 提出[8],他在自己的網站發表的幾篇文章中提到了智能 合約的理念。他的定義是「一個智能合約是一套以數字形式定義的承諾 (promises),包括合約參與方可以在上面執行這些承諾的協議」。. 雖然在法律範疇上,智能合約是否是一個真正意義上的合約還有待研究. 政 治 大 署就能實現自我執行和自我驗證,而且不再需要人為的干預。 立. 確認,但在計算機科學領域,智能合約是指一種計算機協議,一旦制定和部. ‧ 國. 學. 六、. 實名、私有化. ‧ y. Nat. sit. 比特幣區塊鏈是具匿名性且公開的分散式帳本,每個節點都可以看到區. n. al. er. io. 塊鏈網絡上的交易資訊,但此不滿足於其他領域的應用,漸漸有了實名制以. i n U. v. 及私有化等等呼聲,包括允許制(permissioned)區塊鏈、公有鏈、私有鏈、聯. Ch. engchi. 盟鏈的產生,而允許制區塊鏈以 Fabric 最具代表性。. 七、. 區塊鏈特色比較. 以現今較為大眾所知的區塊鏈來做比較,比特幣及以太坊,都有發行虛 擬貨幣,而 Fabric 則是以商業發展的角度去思考,開發出獨特的允許制區塊 鏈以及可以隔離訊息的 Channel 機制。另外智能合約在以太坊發展迅速, Fabric 也延續智能合約的概念開發出 Chaincode(鏈碼)機制。. 7. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(15) 比特幣. 以太坊. Fabric. 虛擬貨幣. YES. YES. NO. 允許制. NO. NO. YES. 匿名制. YES. NO. NO. 不可竄改帳本. YES. POW、POS. Solo、Kafka. YES. y. NO. er. io. sit. NO. YES. ‧. POW. Nat. Channel 機制. YES. ‧ 國. 共識演算法. NO. YES. 學. 智能合約. 立. 治 政 YES 大. n. a l 表 1 區塊鏈特色比較表 i v n Ch U engchi. 8. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(16) 第二節. Hyperledger. 以比特幣為代表的加密貨幣獲得成功,用戶數量和交易量逐年增長。人 們漸漸意識到區塊鏈技術的潛在價值,不僅可以作為比特幣的底層技術,還 能夠應用到更多的場景中。但比特幣區塊鏈無法克服自身的一些問題,例如 大約 7TPS 的處理速度;另外交易的確定性(finality)也無法保證,每個區塊 都是沒有最終確定的。為了克服上述不足,迫切需要設計適合商用的區塊鏈 平台。. 項目背景. 立. 學. ‧ 國. 一、. 政 治 大. ‧. Linux 基金會於 2015 年 12 月啟動了 Hyperledger 的開源項目[9],推動. y. Nat. 各方共同打造基於區塊鏈的企業級分布式帳本底層技術,為透明、公開、去. n. al. er. io. sit. 中心化的企業級分布式帳本技術提供開源參考實現。. i n U. v. 參與 Hyperledger 項目的公司,不僅有 IBM、Intel、Cisco 等科技巨頭,. Ch. engchi. 還有摩根大通、荷蘭銀行等金融銀行,以及 R3、ConsenSys 等區塊鏈公司。 目前全球已經有超過 200 家全球知名企業及機構宣布加入 Hyperledger 項 目,不管是從程式數量還是從社區參與度來看,Hyperledger 都是最大的區 塊鏈開源項目。. 二、. 頂級項目介紹. 作為一個聯合項目, Hyperledger 由面向不同目的和場景的子項目構 成。目前包括 Fabric、Sawtooth、Iroha、Blockchain Explorer、Cello、Indy、 9. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(17) Composer、Burrow 等 8 大頂級項目,所有項目都遵守 Apache v2 許可[10], 並約定共同遵守重視模組化設計、重視程式可讀性以及可持續的演化路線的 基本原則。[11]. 立. 政 治 大. ‧. ‧ 國. 學 er. io. sit. y. Nat. 圖 3 Hyperledger 項目快速成長. n. a l (資料來源:區塊鏈技術指南)i v n Ch U engchi. (一) Fabric:包括 Fabric、Fabric CA 和 Fabric SDK 等,目標是區塊鏈的基礎 核心平台,支持 Kafka 等共識機制,支持權限管理,基於 Go 語言實現。. (二) Sawtooth:包括 arcade、core、dev-tools、validator、mktplace 等。支持基 於硬件芯片的共識機制 Proof of Elapsed Time(PoET)。. (三) Iroha:帳本平台項目,基於 C++實現,具有面向 Web 和 Mobile 的特性。. (四) Blockchain Explorer:提供 Web 操作介面,通過介面快速查看綁定區塊鏈 10. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(18) 的狀態訊息。. (五) Cello:提供區塊鏈平台的部署和運行時管理功能。使用 Cello,管理員可 以輕鬆部署和管理多條區塊鏈。. (六) Indy:提供基於分布式帳本技術的身分管理機制。. (七) Composer:提供面向 Chaincode 開發的高級語言支持,自動生成 Chaincode 等。. 政 治 大. (八) Burrow: 提供以太坊虛擬機的支持,實現支持高效交易的帶權限區塊鏈. 立. 平台。. ‧ 國. 學. Fabric. ‧. 三、. y. Nat. er. io. al. sit. (一) Fabric 項目簡介. v. n. Fabric 是最早加入到 Hyperledger 項目中的頂級項目,Fabric 由 IBM、. Ch. engchi. i n U. DAH 等企業於 2015 年底提交到社區。Github 連結為 https://github.com/hyperledger/fabric。. Fabric 基於 Go 語言實現,處於活躍狀態,2017 年 07 月已發布 1.0 正式 版本;2018 年 03 月 20 日發布 1.1 正式版本;2018 年 07 月 03 日發布 1.2 正式版本,同時包括 Fabric CA、Fabric SDK 等多個子項目。. (二) Fabric 核心特性. Fabric 將排序功能獨立成單獨的節點,降低 Peer 節點的負擔,消除了網 11. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(19) 絡處理瓶頸,提高可擴展性,並將 Peer 節點功能分化成 Endorser 及 Committer,可以根據電腦效能、負載進行靈活部署。. 加強了身分認證管理服務,單獨的 Fabric CA 項目,提供實名制的 PKI(Public Key Infrastructure)認證,負責 Fabric 網絡內所有實體的身分及證 書管理,用戶通過 Client 端從 Fabric CA Server 端獲取合法的證書文件後, 即可參與到網絡中發起交易。. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. v i n C 4hPKI、PKC 比較示意圖 圖 engchi U. (資料來源:杜宏毅 Blockchain 的前世今生與未來) 實現 multiple Channel 機制,不同 Channel 之間的資訊彼此隔離,用戶 只能看到自己有參與的交易的資訊,達成商業化的需求。. 支持可插拔(pluggable)的架構,包括共識、權限管理、加解密等模組。. 12. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(20) 立. 政 治 大 圖 5 Channel 示意圖. ‧ 國. 學. (資料來源:本研究繪製,參考:. ‧. http://www.gooread.com/article/20120676648/). sit. y. Nat. io. er. Chaincode,是 Fabric 中十分關鍵的概念,區分為 Application Chaincode 及 System Chaincode,Application Chaincode 運行在單獨的容器中,用戶通. al. n. v i n C h Ledger 中的狀態進行操作;System 過編寫 Application Chaincode,對 engchi U Chaincode 嵌入在系統內,提供對系統進行配置、管理。. 13. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(21) (三) Fabric 架構. 學. 圖 6 Fabric 架構圖. (資料來源:本研究繪製,參考:. ‧. ‧ 國. 立. 政 治 大. https://read01.com/zh-tw/AJxmMKm.html#.WrCcC-huZPb). sit. y. Nat. al. er. io. Fabric 為應用提供了 gRPC API,以及封裝 API 的 SDK 供調用。應用可. v. n. 以通過 SDK 訪問 Fabric 網絡中的多種資源,包括 Ledger、Transaction(交易)、. Ch. engchi. i n U. Chaincode、Event(事件)、CA(權限管理)等。其中,Ledger 是最核心的結構, 記錄應用訊息,應用則通過發起交易來向 Ledger 中記錄數據。交易執行的 邏輯通過 Chaincode 來實現。整個網絡運行中發生的事件可以被應用訪問, 以觸發外部流程甚至其他系統。權限管理則負責整個過程中的訪問控制。 Ledger 和 Transaction 進一步地依賴核心的區塊鏈結構、資料庫、共識機制 等技術;Chaincode 則依賴 Container(容器)、World State(狀態機)等技術; CA(權限管理)利用了已有的 PKI 體系、數字證書、加解密算法等諸多安全 技術。底層由多個節點組成 P2P 網絡,通過 gRPC 通道進行交互,利用 Gossip 協議進行同步。 14. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(22) (四) 交易流程. 立. 政 治 大. er. io. sit. y. ‧. ‧ 國. 學. Nat. 圖 7 Fabric 交易流程. n. a(資料來源:本研究繪製,參考: iv l C https://read01.com/zh-tw/AJxmMKm.html#.WrCcC-huZPb) n hengchi U Fabric 根據交易過程中不同環節的功能,在邏輯上將節點角色解耦為 Endorser 和 Committer,讓不同類型節點可以關注處理不同類型的工作負載。. 客戶端應用(App)使用 SDK 跟 Fabric 網絡溝通,首先(第 0 步)客戶端從 CA 獲取合法的身分證書來加入網絡的應用通道,(第 1 步)發送交易提案 (Transaction proposal)給 Endorser 進行背書,(第二步)Endorser 進行合法性和 ACL(Access Control List)權限檢查,檢查通過後則模擬進行交易,對交易導 致的狀態變化以讀寫集型式紀錄,進行背書並返回結果給客戶端,(第 3 步) 15. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(23) 客戶端收集到足夠的背書支持後才是合法的交易請求,在通過後將讀寫集發 給 Orders,(第 4 步)Orders 透過交易 Timestamp 對合法交易進行全局排序, 並將一批排序後的交易組合生成 Block 結構。(第 5 步)Orders 將生成的 Block 交給 Committer,Committer 進行最終檢查(簽名完整性、是否重複、讀寫集 版本是否匹配等),檢查通過後執行合法的交易,將結果寫進 Ledger,並同 步到其他 Peer 上。. (五) Fabric 共識機制. 政 治 大 序、合法性以及它們對帳本狀態的更新結果達成一致的觀點。滿足共識則意 立 在 Fabric 中,共識過程意味著多個 Peer 節點對於某一批交易的發生順. ‧ 國. 學. 味著多個節點可以始終保證相同的狀態,對於以同樣順序到達的交易可以進 行一致的處理。. ‧. y. Nat. Fabric 的共識機制包括了上述交易流程中很多步驟從 Endorsement(背. n. al. er. io. sit. 書)、Ordering(排序)及 Validation(驗證)都屬於共識機制的一環。. i n U. v. 背書是指背書節點對收到來自客戶端的請求(proposal)按照 endorsement. Ch. engchi. policy 進行檢查,以決策是否通過、添加數字簽章,endorsement policy 通常 是指 proposal 需要獲得一定條件的背書才被認為是合法的,例如某些特定身 分成員的同意;某個組織中超過一定數目的成員支持。. 排序是對一段時間內的一批交易達成一個網絡內全局一致的排序。採用 可插拔的架構目前有測試用的 solo 模式以及 Kafka 模式。. 驗證是對排序後的一批交易進行提交到帳本之前最終檢查的過程。包括 檢查交易結構完整性、背書簽名是否符合 endorsement policy 等。. 16. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(24) 接下來說明 Kafka 在 Fabric 網絡當中的運行模式:. Kafka 是一個分布是高可用消息佇列,可以有序的管理訊息並在多個副本間 保證數據一致性。Kafka 集群的狀態由 zookeeper(ZK)管理,選舉 leader 節點。[12]. 一個共識集群由多個 Orderer 節點(OSN)和一個 Kafka 集群組成,Orderer 之 間不直接通訊,他們僅僅和 Kafka 集群通訊,在 Orderer 的實現裡,Channel 在 Kafka 是以 topic 的形式隔離,Orderer 服務從 kafka 集群裡獲取相對應 topic(kafka 的分區,用於在佇列裡隔離出多個數據域)的數據,以保證交易數據有序。每個. 政 治 大 者,生產者將 Orderer 節點收到的交易發送到 Kafka 集群進行排序,在生產的同 立 Orderer 內部,針對每個通道都會建立與 Kafka 集群對應 topic 的生產者與消費. ‧. ‧ 國. 學. 時,消費者也同步消費排序後的交易,如下圖:. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 8 Kafka 共識機制 (資料來源: https://www.jianshu.com/p/f1a671be69a4) 如何劃定哪個交易屬於哪個區塊呢?Fabric 經由兩個條件決定,區塊交 易量和區塊時間間隔,當配置達到域值時,無論是否達到時間間隔,都會觸 17. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(25) 發節塊操作;另一方面,如果觸發了配置的時間間隔域值時,只要有交易就 會觸發節塊操作,也就是說 Fabric 中不會有空區塊。結塊操作是由 Orderer 節點中的 Kafka 生產者發送一條 TTC-X(Time to cut block x)消息到 Kafka 集 群,當任意 Orderer 節點的 Kafka 消費者接收到任意節點發出的 TTC-X 消息 時,都會將之前收到的交易打包節塊,保存到 Orderer 本地,之後再發送到 各 Peer 節點,如下圖:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 9 共識結塊機制 (資料來源: https://www.jianshu.com/p/f1a671be69a4). 四、. Hyperledger Composer. (一) 簡介. 18. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(26) Hyperledger Composer 是一個廣泛、開源的開發工具和框架[13],使開 發區塊鏈應用程式更容易,並使區塊鏈應用程序與現有業務系統的集成變得 更加容易。可以使用 Composer 快速開發用例,Composer 允許你對業務網絡 進行建模,並將現有系統和數據與區塊鏈應用程序集成。. 政 治 大. 立. sit. y. ‧. ‧ 國. 學. Nat. 圖 10 Hyperledger Composer 網絡圖. n. al. er. io. (資料來源:本研究繪製;參考:Hyperledger Composer 官網) (二) Composer 網絡中基本屬性. Ch. engchi. i n U. v. 業務網絡模型,包含你現在的資產和與之相關的交易;資產是有形的或 無形的商品、服務或財產。作為業務網絡模型的一部份,你可以定義與資產 交互得交易。業務網絡還包括與他們交互的參與者。. 舉一個業務網絡的例子,關於程式市集平台的業務網絡模型:.  資產(asset): 程式、資料.  參與者(participant): 買方、賣方、平台管理者 19. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(27)  交易(transaction): 購買或出售程式、資料,創建和關閉程式、資料來源. 參與者可以根據其腳色(作為買方、賣方或平台管理者)來限制對交易的 訪問。然後,平台管理者可以創建一個應用程序,通過一個簡單的用戶介面 來顯示買方和賣方,查看公開列表、提供報價、程式績效。 (三) 典型的 Hyperledger Composer 解決方案架構. Hyperledger Composer 可以快速建立全端網絡,即業務邏輯在區塊鏈上 運行,提供與業務邏輯溝通的 REST API 給應用程式或網頁,以及將區塊鏈. 政 治 大. 與現有企業系統集成在一起。. 立. ‧ 國. 學. Hyperledger Composer 由以下組件組成:. ‧. 連接配置文件(JSON 格式): Hyperledger Composer 使用連接配置文件,確定 如何連接到 Fabric 或是 Playground 上。. sit. y. Nat. n. al. er. io. JavaScript SDK: 是一組 Nodejs API,使開發人員能夠創建應用程式來管理和. i n U. v. 與已部署業務網絡溝通。包括兩個 npm 模組,composer-client 用於向業務網. Ch. engchi. 絡提交交易或對資產和參與者執行創建、讀取、更新和刪除。composer-admin 用於管理業務網絡(部署、取消部署)。. 20. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(28) 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 11 Hyperledger Composer 解決方案架構 (資料來源:本研究繪製;參考:Hyperledger Composer 官網). 21. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(29) REST 服務器: 可以自動為業務網絡生成 Open REST API。REST 服務器將業 務網絡的 Composer 模型轉換為 Open API 定義。. LoopBack 連接器: 由 Composer REST 服務器使用,但也可以由本機支持 LoopBack 的集成工具單獨使用。或者,可以與 LoopBack 工具一起使用,已 創建更複雜的 REST API 定義。. Playground Web 用戶介面: Hyperledger Composer Playground 是定義和測試 網絡的 Web 用戶介面。它允許業務分析師快速導入在 Web 或 Hyperledger. 政 治 大. Fabric 運行時執行的範例和原型業務邏輯。. 立. Yeoman 程式生成器: Hyperledger Composer 使用 Open Source Yeoman 程式生. ‧ 國. 學. 成器框架來快速創建框架項目,Angular Web 應用程式、Nodejs 應用程式以. ‧. 及基本業務網絡。. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 22. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(30) 第三節. Docker Docker 是一個開源專案,實現輕量級的虛擬化技術,快速建置執行環 境,其 Container 技術直接將一個應用程式所需的相關程式碼、函式庫、環 境配置檔都打包起來建立沙盒執行環境,為了和傳統虛擬化技術產生的虛擬 機器(Virtual Machine)區分,Container 技術產生的環境就稱為 Container。. Docker Container 跟虛擬機的比較. 政 治 大 虛擬機需要安裝作業系統(安裝 Guest OS)才能執行應用程式,而 立. 學. Container 不需要安裝作業系統就能執行應用程式。Container 技術不是在 OS. ‧ 國. 外來建立虛擬環境,而是在 OS 內的核心系統層來打造虛擬執行環境,透過. ‧. 共用 Host OS 的作法,取代一個一個 Guest OS 的功用,啟動一個 Container. y. sit. io. 擬化技術。. Nat. 所耗費的資源相對於虛擬機少非常多。Container 也因此被稱為是 OS 層的虛. n. al. er. 一、. Ch. engchi. i n U. v. 圖 12 虛擬機跟 Docker 比較圖 (資料來源: Docker —— 從入門到實踐) 23. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(31) Docker Swarm. Docker Swarm 專門應付 Docker Cluster 部署架構,可以集中透過 Docker Cluster Manager 分派與啟動 Container 在不同的機器節點(Node)上,方便調 度資源、監控、部署與管理 Container。. Docker Swarm 可以透過 Docker Compose File 直接部署大量 Container, Container 會直接在一群 Node 中自動啟動與執行,Cluster 主要由 Manager. 政 治 大 與協調 Container 的部署工作,Worker Node 顧名思義負責執行 Container, 立. Node 與 Worker Node 兩種角色所組成。Manager Node 負責管理 Worker Node. 學. 實際應用上 Manager Node 也可以同時擔任 Worker 的角色,幫忙執行. ‧ 國. Container。. ‧. io. sit. y. Nat. n. al. er. 二、. Ch. engchi. i n U. v. 24. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(32) 第三章. 系統架構. 大眾面對資訊化時代大量的資訊,且時常充斥著不真實的資訊,常常會 不知道資訊是否是正確的,本研究建置 Hyperledger Fabric 區塊鏈架構,讓 用戶可以在區塊鏈網絡上看到真實、公開的資訊,並以程式市集平台為例, 使用 Chaincode 實現資料、程式使用權的買賣,並建置交易紀錄及研發履歷。. 第一節. 系統架構說明. 學. 三層式架構(3-Layer Architecture). ‧. y. Nat. 本研究採用三層式架構實作基於 Fabric 區塊鏈的程式市集平台,透過分. io. sit. 層架構可以更清楚每層 Layer 之間如何溝通,也更容易設計統一的輸出輸入. er. 一、. ‧ 國. 立. 政 治 大. 端口。三層式架構分別為應用程式層(Application Layer)、服務層(Service. al. n. v i n Layer)及資料存取層(DataC Access Layer),以 Docker Container 微服務架構開 hengchi U. 發,讓每個層級都能達到輕量化的部署與維護。本研究提出之三層式架構是 以功能面為發想,應用程式層處理畫面及串接、服務層提供多種服務、資料 存取層提供資料存取服務,另外,分開服務層與資料存取層使得用戶無法直 接存取資料庫,也為整體系統的安全性提升不少。. 25. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(33) Application Layer. Service Layer. Data Access Layer. 政 治 大. 圖 13 三層式架構. 立. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 26. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(34) 本研究以功能性質區分為三層式架構,設計不同的 Docker Container 微 服務,詳細組成架構如下圖:. Program Market. NodeJS CMS. 立. ‧ 國. Development Unit. Python. Pay ment. executors. Unit. Container. CouchDB. Numpy Numba. Container. sit. io. n. al. Ch. engchi. i n U. v. Lib. ‧. tools. Orders. API. Nat. Service Layer. Peer. ZMQ Computation Unit. 學. Chaincode CA Blockchain Unit(Fabric). 政 治 大. y. Fabric sdk node. Jupyter. er. Application Layer. Eclipse che. Community. Docker Spawner. tensorf. low. Data Access Layer. Mongo DB. 圖 14 程式市集平台三層式架構總圖. 27. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(35) 以下針對各層做進一步說明: (一). 應用程式層. 使用者介面層由 Nodejs 為主要架構,透過 Nodejs express 套件清晰的達 成 MVC 架構,介面的轉換也更加清楚,提供使用者三大功能,分別是程式 市集(Program Market)、社群(Community)、AI 模組開發平台(Jupyter 及 Eclipse che)。. 1.. 程式市集. 政 治 大 程式市集透過 Nodejs 立 架設,使用者可以在市集觀看想購買使用權的程. ‧ 國. 學. 式資訊,包括適用金融商品、程式履歷、效益等等,也可以在市集購買想要 的金融商品資料使用權,並可以選擇想要的資料區段,也提供訂閱金融資訊. ‧. 的功能,擁有使用權的使用者可以在網站上運作程式,程式會透過 ZMQ(Zero. y. sit. n. al. er. io. 效率。. Nat. Message Queue)傳送給 Python executors 執行,透過 Python 達到快速的運算. 2.. 社群. Ch. engchi. i n U. v. 建立討論區、聊天、群組、部落格等社群功能,讓使用者可以有更佳的 學習環境。. 3.. AI 模組開發平台. 隨著 AI 產業的迅速發展,相關技術也愈近成熟越來越多人欲投入 AI 開發之領域,AI 開發平台可以提供使用者更加方便的開發環境,但本研究 不限制在 AI 開發環境,這個環境是可以通用不同程式開發的,讓使用者可 以在網頁上開發程式,可以擁有獨立的空間存放,並且不用設定程式執行環 28. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(36) 境,良好的硬體運行程式。本研究並提供程式開發履歷,紀錄程式的預測績 效、issue、版本等資訊,並為 AI 開發需要大量實驗記錄,提供實驗設計功 能。開發介面為 Jupyter Notebook 以及 Eclipse che,兩者都能提供線上開發 功能,即時呈現結果在網頁上,但擁有不同的特色及不同支持的程式語言。. Application Layer. Eclipse che. Community. Program Market. NodeJS CMS. 立. 政 治 大 圖 15 應用程式層. ‧ 國. 學. (二). Jupyter. 服務層. ‧. 此層提供主要的服務,分為 Computation Unit、Certification Unit、Payment. y. Nat. n. al. er. io. 1.. sit. Unit 和 Development Unit,各自運作在獨立的 Docker Container 容器上。. Computation Unit. Ch. engchi. i n U. v. 由 ZMQ 跟網頁進行溝通,使用者從程式市集傳送運算需求到 ZMQ, Computation Unit 監聽 ZMQ 上的 Topic,分送運算需求到 Python executor 中 的運算單元,運算的資料由 Mongo DB 以及資料供應廠商提供,運算結果可 能是年收益率、預測金融商品漲跌等結果同時回傳給 Mongo DB 以及程式市 集監聽的 Topic,程式市集再藉由 Fabric 的 Nodejs SDK 與 Chaincode 溝通記 錄到區塊鏈上。. 2.. Blockchain Unit. 29. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(37) Blockchain Unit 基於 Fabric 區塊鏈架設,運用 Docker 及 Docker Swarm 技術,將 Fabric 部署到多台主機的環境,利用 Fabric 區塊鏈獨特的允許制 以及 Channel 特性,打造商業化的區塊鏈,使用者進入網頁申請會員,同步 為使用者建置 CA 實名制認證,認證過的使用者才能進入 Fabric 區塊鏈網絡 中,並且設定讓 AI 模組開發團隊可以讓研發中的程式履歷、實驗設計只有 專案成員看得到,程式市集則是可以達到只有自己看得到自己的交易紀錄等 功能。因為區塊鏈的不可竄改的特性,讓使用者在市集上看到的程式資訊都 是經過運算完後直接記錄到區塊鏈中,使用者可以安心所看到的資訊是真實. 政 治 大 如程式市集中的資料使用權,在使用權期限到期後,自動將使用權解除, 立. 的,並且使用 Chaincode 的特性,達到根據條件判斷,執行特定的程序,例. Chaincode 設定好後,就不需要人工的介入了。. ‧ 國. 學. 3.. Payment Unit. ‧ sit. y. Nat. 與第三方支付廠商合作,把服務整合撰寫提供 API 並包成 Docker. n. al. er. io. Container 微服務,提供使用者支付購買商品。. Ch. engchi. i n U. v. 30. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(38) 4.. Development Unit. 使用者在平台建立帳號後,經由 JupyterHub 的 Docker Spawner 技術啟 動獨立的 notebook server 在 Docker Container 上,並提供在 Python 運行環境 的函式庫,如 Numpy、Numba、Pandas、Cuda、MatPlotLib 以及 Tensorflow 等,希望能讓使用者能夠快速上手程式及 AI 模組的開發,也提供 GPU 運算, 提高 AI 的效率。使用者也可以線上使用本研究架設的 Eclipse che,提供不 同特色、不同支持程式語言的開發環境。. 立. ‧ 國. Development Unit. Pay ment. Container. Unit. Numba. sit. n. er. io. al. Numpy. Container. CouchDB. Ch. engchi. i n U. v. Lib. ‧. tools. Orders. Python executors. API. Nat. Service Layer. Peer. ZMQ Computation Unit. 學. Chaincode CA Blockchain Unit(Fabric). 政 治 大. y. Fabric sdk node. Docker Spawner. tensorf. low. 圖 16 服務層. 31. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(39) (三). 資料存取層. 由 Mongo DB 建置而成,供服務層對資料庫進行存取,包括各金融商品資料 以及程式。 Data Access Layer. 學. ‧ 國. 立. 治DB 政 Mongo 大 圖 17 資料存取層. ‧. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 32. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(40) 第二節 一、. Fabric 區塊鏈網絡 Fabric 區塊鏈網絡架設. 本研究透過 Docker Swarm 架設 Fabric 區塊鏈環境至多台電腦上,讓位 於不同台電腦的 Docker Container 可以互相溝通,讓組織身分設定可以設定 到多台環境上。. 政 治 大. Docker Swarm. 立. Host. Host Docker. Docker. Docker. Docker. n. Ch. engchi. er. io. al. 圖 18 Fabric 區塊鏈網絡. sit. y. Nat. 二、. Docker. ‧. Docker. 學. ‧ 國. Host. i n U. v. Fabric 區塊鏈安裝流程-以 basic-network 單台主機環境為例. Fabric 的安裝細節相當複雜,因此本研究歸納一份 Fabric 在 Ubuntu 的 basic-network 單台主機環境安裝流程以利於 Fabric 的上手。整體流程分為安 裝前置環境作業及 Fabric 網絡安裝。 (一) 安裝前置環境作業: Fabric 網絡的前置環境包括 docker、Python、golang、nodejs、npm、 Hyperledger images、curl,對於沒有指令基礎的初學者來說較為複雜,因此 33. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(41) 本研究整理整體的安裝流程,讓開發者對於 Fabric 開發可以更順利。 Docker 為 Fabric 網絡的運行環境,Fabric 的 Peer、Orderer、CA 等都是 利用 docker image 安裝,運行在 docker container 上;而 Python 及 golang 為 我們本機上運行 Fabric 網絡所需要的運作環境;nodejs 為運作 Fabric node sdk 及 Fabric node Chaincode 所需的環境,而 npm 為管理 nodejs 套件的工具;curl 為有助於我們安裝的工具,可以使用網路上的指令檔。. $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install curl. 立. 政 治 大. 安裝 docker: $ curl -fsSL https://get.docker.com/ | sh. ‧ 國. 學. 讓 user 可以有 docker 指令權限: $ sudo usermod -aG docker yourusername 重啟 docker 環境: $ sudo service docker restart. ‧. 安裝 docker-compose: $ sudo curl -L. y. Nat. io. n. al. er. name -s`-`uname -m` -o /usr/local/bin/docker-compose. sit. https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`u. i n U. v. 增加執行權限:$ sudo chmod +x /usr/local/bin/docker-compose. Ch. engchi. 檢查版本(是否安裝成功): $ docker-compose -version. 安裝 Python: $ sudo apt-get install python-pip. 安裝 golang 環境: $ sudo apt-get install -y cpp gccgo "build-essential" libsnappy-dev zlib1g-dev libbz2-dev $ wget https://storage.googleapis.com/golang/go1.9.1.linux-amd64.tar.gz $ tar zxvf go1.9.1.linux-amd64.tar.gz 34. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(42) $ sudo mv go /usr/lib/go-1.9.1/. 安裝 nodejs 和 npm,使用 nvm 安裝利於切換版本,(原本版本需要 V6 LTS 版本,但 Nodejs Chaincode api 撰寫需使用 V8.10): $ sudo apt-get install build-essential libssl-dev $ curl https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash $ source ~/.profile $ nvm install v6.9.5 $ nvm install v8.10 $ npm install npm@latest -g. 立. $ nvm use v8.10. ‧. ‧ 國. 學. $ node –v. 政 治 大. y. Nat. 下載 hyperledger images:. er. io. sit. Fabric 當中有 peer、ca、orderer、tools、couchdb、kafka、zookeeper、javaenv、 ccenv 等 image,本研究撰寫期間,hpyerledger docker hub 上選用 1.1.0 版本. n. al. 安裝。. 可以使用以下指令安裝:. Ch. engchi. i n U. v. $ docker pull hyperledger/fabric-peer:x86_64-1.1.0 $ docker pull hyperledger/fabric-ca:x86_64-1.1.0 $ docker pull hyperledger/fabric-orderer:x86_64-1.1.0 $ docker pull hyperledger/fabric-tools:x86_64-1.1.0 $ docker pull hyperledger/fabric-couchdb:latest $ docker pull hyperledger/fabric-kafka:latest $ docker pull hyperledger/fabric-zookeeper:latest $ docker pull hyperledger/fabric-javaenv:x86_64-1.1.0 35. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(43) $ docker pull hyperledger/fabric-ccenv:x86_64-1.1.0 $ docker pull hyperledger/fabric-baseimage:x86_64-0.4.7 $ docker pull hyperledger/fabric-baseos:x86_64-0.4.7 並將 image 標籤為 latest 版本: $ docker tag hyperledger/fabric-ca:x86_64-1.1.0 hyperledger/fabric-ca:latest $ docker tag hyperledger/fabric-tools:x86_64-1.1.0 hyperledger/fabric-tools:latest $ docker tag hyperledger/fabric-couchdb:x86_64-1.1.0. 政 治 大 $ docker tag hyperledger/fabric-kafka:x86_64-1.1.0 立 hyperledger/fabric-couchdb:latest. hyperledger/fabric-kafka:latest. ‧ 國. 學. $ docker tag hyperledger/fabric-zookeeper:x86_64-1.1.0. ‧. hyperledger/fabric-zookeeper:latest. sit. y. Nat. $ docker tag hyperledger/fabric-orderer:x86_64-1.1.0. io. er. hyperledger/fabric-orderer:latest. $ docker tag hyperledger/fabric-peer:x86_64-1.1.0 hyperledger/fabric-peer:latest. n. al. i n Ch $ docker tag hyperledger/fabric-javaenv:x86_64-1.1.0 engchi U. v. hyperledger/fabric-javaenv:latest. $ docker tag hyperledger/fabric-ccenv:x86_64-1.1.0 hyperledger/fabric-ccenv:latest 可以將這些 docker 指令寫進 script 檔中,只要執行 script 檔,便會全部執行 完畢。. 利用 curl 建立 fabric 的 binary 工具(也可利用 curl 下載 docker image,我選擇 用上述的方式自行操作 version 以及 Tag): $ mkdir /home/your user name/fabric_binary 36. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(44) $ cd /home/your user name/fabric_binary $ curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0 $ ls bin ~/.bashrc (最下面加入 5 行(最下面應會看到有 nvm path 的設定,要在. $ vi. 那之下),每次登入進來方便 go 及 nodejs 環境設定) export PATH=/usr/lib/go-1.9.1/bin:$PATH export GOPATH=/opt/gopath/ export GOROOT=/usr/lib/go-1. 9.1/. 政 治 大. export PATH=/home/your user name/fabric_binary/bin:$PATH nvm use v8.10. 立. $ source ~/.bashrc. ‧ 國. 學 ‧. (二) Fabric 網絡的安裝步驟:. y. Nat. 接下來進入 Fabric 網絡的安裝步驟,可以使用官方的 basic-network 或. er. io. sit. 是本研究使用的包含 Nodejs Chaincode api 的 basic-nerwotk。整體安裝步驟 包括第 0 步,配置 crypto-config.yaml、生成公私鑰和證書、配置. al. n. v i n configtx.yaml、生成創世區塊和 1 步,配置 C h Channel 配置,第 engchi U. docker-compose.yml 以啟動 Fabric 網絡、create channel、join channel、install chaincode 及 instantiate chaincode。 其中 crypto-config.yaml 及 configtx.yaml 會在本節第三點中進行詳細說 明。. 37. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(45) 政 治 大 圖 19 Fabric 網絡安裝步驟圖 立. ‧ 國. 學. 首先下載範例檔:git clone. https://github.com/wearetheledger/fabric-network-boilerplate.git,這邊採用. ‧. wearetheledger 的 github 檔,是為了方便以後使用 wearetheledger 提供的. y. Nat. n. al. er. io. 的。. sit. Nodejs Chaincode api 撰寫 Nodejs Chaincode,但 basic-network 的範例是相同. Ch. engchi. i n U. v. 38. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(46) 立. 政 治 大. ‧. ‧ 國. 學. 圖 20 Fabric 網絡安裝步驟圖 – 第 0 步. io. sit. y. Nat. n. al. er. 在官方的 basic-network 中已經幫我們產生好第 0 步,如需要更改內容,可. Ch. i n U. v. 以更改第 0 步的配置檔,然後使用 generate.sh 重新部署環境。. engchi. 0.1:生成公私鑰和證書(Peer 及 Orderer 的設定) 0.1.1:配置 crypto-config.yaml:裡面需要設定組織的名字和域名,還有需要幾 套公私鑰和證書。 0.1 跟 0.1.1 都使用 0.1.2 來執行。 0.1.2:$ cryptogen generate –config=./crypto-config.yaml. 0.2:生成創世區塊和 Channel 配置 0.2.1:配置 configtx.yaml:Orderer 可以設定共識的演算法、共識區塊大小、切 割時間等,而 Peer 的配置包含了 MSP 的配置、Anchor Peer 的配置等,如需 39. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(47) 要設置更多 Organization 及 Channel 需要對此作修改。 0.2 跟 0.2.1 的指令用 0.2.2、0.2.3 跟 0.2.4 指令執行。 0.2.2:生成創世區塊(產生 Orderer 需要):$ configtxgen –profile OneOrgOrdererGenesis –outputBlock ./config/genesis.block 0.2.3:生成 Channel 配置(application channel):$ configtxgen -profile OneOrgChannel -outputCreateChannelTx ./config/channel.tx -channelID $CHANNEL_NAME 0.2.4:配置 Anchor Peer:$ configtxgen -profile OneOrgChannel. 政 治 大 $CHANNEL_NAME -asOrg Org1MSP 立. -outputAnchorPeersUpdate ./config/Org1MSPanchors.tx -channelID. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. 圖 21. Ch. engchi. i n U. v. Fabric 網絡安裝步驟圖 – 第 1 步. 1:雖然接下來只要啟動範例中寫好的 startFabric.sh 的 script 檔即完成安 裝,安裝完可以用 docker ps 查看現有的 container,以下將說明 script 檔中的 40. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(48) 主要內容為何: 1.1:startFabric.sh 會呼叫 basic-network 目錄中的 start.sh 檔。 1.2:start.sh 會啟用 docker-compose.yml 檔,也就是 Fabric network 的生成檔, 裡面會設定網絡中的 ca、orderer、peer、couchdb 及 cli 的 image file、環境、 掛載目錄等等,掛載也包括會把之前產生的 msp、genesis.block 等檔案掛載 到 docker 的目錄裡。 執行指令啟動 yml 檔:$ docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb. 政 治 大 docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e 立. 1.3:以組織中的成員身分進入並執行 peer channel create 指令:$. "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.e. ‧ 國. 學. xample.com/msp" peer0.org1.example.com peer channel create -o. ‧. orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx. sit. y. Nat. 以組織中的成員身分進入並執行 peer channel join 指令:$. io. er. docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e. "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.e. al. n. v i n Ch xample.com/msp" peer0.org1.example.com peer channel join -b engchi U mychannel.block. 1.4:使用 docker-compose.yml 生成 cli docker container:$ docker-compose -f ./docker-compose.yml up -d cli 1.4.1:install chaincode fabcar 到 peer 上: docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fa bric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.exam ple.com/msp" cli peer chaincode install -n fabcar -v 1.0 -p "$CC_SRC_PATH" -l "$LANGUAGE" 41. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(49) 1.4.2:在 mychannel 這個 channel 中初始 chaincode 並生成對應 Channel 的 docker container: docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fa bric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.exam ple.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -l "$LANGUAGE" -v 1.0 -c '{"function":"init","Args":["v0"]} ' -P "OR ('Org1MSP.member','Org2MSP.member')". 政 治 大 "CORE_PEER_LOCALMSPID=Org1MSP" -e 立 1.4.3:測試是否安裝成功:$ docker exec -e. "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fa. ‧ 國. 學. bric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.exam. ‧. ple.com/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C. er. io. sit. y. Nat. mychannel -n fabcar -c '{"function":"initLedger","Args":[""]}'. a. n. 三、. (一). v. l C Fabric 區塊鏈身分、組織及通道管理配置 ni. hengchi U. YAML 基礎知識. YAML 是一個可讀性高,用來表達資料序列的格式,參考了其他多種語 言。語法和其他高階語言類似,並且可以簡單表達清單、純量等資料型態。 使用空白符號縮排和大量依賴外觀的特色,特別適合用來表達或編輯資料結 構、各種設定檔、檔案大綱。[14]. (1) 大小寫敏感。. 42. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(50) (2) 使用縮排表示層級關係。. (3) 縮排時不允許使用 Tab 鍵,只允許使用空格。. (4) 縮排的空格數目不重要,只要相同層級的元素左側對齊即可. (5) # 表示註解. (二). 生成組織身分配置. 政 治 大 行證書生成和配置操作。Fabric 立 提供了 cryptogen (crypto Generator)工具,可以根 在 Fabric 網絡中,需要通過證書和私鑰來管理和鑑別成員身分,經常需要進. ‧ 國. 學. 據配置自動批量生成所需要的證書和私鑰文件。cryptogen 工具支持從配置文件 (通常命名為 crypto-config.yaml)中讀入 YAML 格式的配置模板訊息。. ‧ y. Nat. crypto-config.yaml 配置文件範例如下:[15]. sit. al. er. io. # "OrdererOrgs" - Definition of organizations managing orderer nodes OrdererOrgs:. n. - Name: Orderer Domain: example.com #一個節點包括 Hostname、CommonName、SANS 等域,可以用 Specs 指定 一組節點,或著用 Template 指定自動生成節點的個數。默認通用名為主機 名.組織域,例如域 org1.example.com 中 Peer 節點的名稱可能為 peer0.org1.example.com、peer1.org1.example.com 等。. Ch. engchi. i n U. v. Specs: - Hostname: orderer CommonName: order.example.com SANS: #除了主機名、通用名外的主題別名 - "orderer.{{.Domain}}" - "orderer_service.{{Domain}}" # "PeerOrgs" – Definition of organizations managing peer nodes PeerOrgs: 43. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(51) - Name: org1 Domain: org1.example.com CA: Hostname: ca # ca.org1.example.com Template: Count: 2 # Users: 自動生成除 admin 外的用戶個數 Users: Count: 1 - Name: org2 Domain: org2.example.com EnableNodeOUs: true Template:. 立. ‧ 國. 學. Count: 2 Users: Count: 1. 政 治 大. ‧. 上述的例子中 Orderer 組織通過 Specs 指定一個主機 order.example.com,而. y. Nat. 兩個 Peer 組織則採用 Template 自動生成了 Count 個數的主機。Users 的 Count. n. er. io. al. sit. 值則會生成指定個數的普通用戶。. i n U. v. 我們配置好 crypto-config.yaml 文件後,就可以用 cryptogen 去讀取該文件,. Ch. 並生成對應的公私鑰和證書了:. engchi. cryptogen generate –config=./crypto-config.yaml. 生成的文件都保存到 crypto-config 資料夾,可以查看資料夾中生成了哪些文件:. tree crypto-config. (三). 生成通道配置. configtxgen(Configuration Transaction Generator)工具是一個輔助工具,可以 44. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(52) 配合 cryptogen 生成的組織結構身分文件使用,離線生成跟通道有關的配置信 息。configtxgen 工具支持從配置文件(通常命名為 configtx.yaml)中讀入 YAML 格 式的配置模板訊息。. 主要功能有:. 1.. 生成創世區塊. 2.. 生成 Channel 配置區塊. 3.. Anchor(錨) Peer 的配置. 立. 政 治 大. ‧ 國. 學. configtx.yaml 配置文件範例如下: [16]. ‧. # profile # - Different configuration profiles may be encoded here to be specified as parameters to the configtxgen tool. y. Nat. sit. n. al. er. io. Profiles: TwoOrgsOrdererGenesis: # Orderer system channel configuration Capabilities: <<: *ChannelCapabilities Orderer: <<: *OrdererDefaults Organizations: # the org of Orderer. Ch. engchi. i n U. v. - *OrdererOrg Capabilities: <<: *OrdererCapabilities Consortiums: SampleConsortium: # Consortium of application channel Organizations: - *Org1 - *Org2 TwoOrgsChannel: # Application channel configuration Consortium: SampleConsortium 45. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(53) Application: <<: *ApplicationDefaults Organizations: # org of application channel in the beginning - *Org1 - *Org2 Capabilities: <<: *ApplicationCapabilities # Section: Organizations # - This section defines the different organizationl identities which will be referenced later in the configuration including orderer and peer organizations. Organizations:. 立. 學. ‧ 國. - &OrdererOrg Name: OrdererOrg. 政 治 大. ‧. # ID to load the MSP definition as ID: OrdererMSP. al. n. - &Org1 Name: Org1MSP. er. io. sit. y. Nat. # MSPDir is the filesystem path which contains the MSP configuration MSPDir: crypto-config/ordererOrganizations/example.com/msp. Ch. engchi. i n U. v. # ID to load the MSP definition as ID: Org1MSP MSPDir: crypto-config/peerOrganizations/org1.example.com/msp AnchorPeers: # AnchorPeers defines the location of peers which can be used # for cross org gossip communication. Note, this value is only # encoded in the genesis block in the Application section context - Host: peer0.org1.example.com Port: 7051. 46. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(54) - &Org2 Name: Org2MSP # ID to load the MSP definition as ID: Org2MSP MSPDir: crypto-config/peerOrganizations/org2.example.com/msp AnchorPeers: - Host: peer0.org2.example.com Port: 7051 # SECTION: Orderer # - Configuration of Orderer. 包括共識類型、Address、Batch、Channel 數量等,. 立. 學. ‧ 國. 被 Profiles 部分引用。. 政 治 大. Orderer: &OrdererDefaults. ‧. # Orderer Type: The orderer implementation to start # Available types are "solo(單點)" and "kafka". sit. y. Nat. OrdererType: kafka. n. al. er. io. Addresses: - orderer.example.com:7050. Ch. engchi. i n U. v. # Batch Timeout: The amount of time to wait before creating a batch, 一批交易 可以建構一個區塊 BatchTimeout: 2s # Batch Size: Controls the number of messages batched into a block BatchSize: # Max Message Count: The maximum number of messages to permit in a batch MaxMessageCount: 10 # Absolute Max Bytes: The absolute maximum number of bytes allowed for # the serialized messages in a batch. (batch 最大 bytes 數) 47. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(55) AbsoluteMaxBytes: 98 MB # Preferred Max Bytes: The preferred maximum number of bytes allowed for (batch 建議 bytes 數) # the serialized messages in a batch. A message larger than the preferred # max bytes will result in a batch larger than preferred max bytes. PreferredMaxBytes: 512 KB # ordering 服務最大支持的 application cahnnel 數量,默認為 0,表示無 限制 MaxChannels: 0 Kafka: # Brokers: A list of Kafka brokers to which the orderer connects. Edit. 政 治 大 # this list to identify the brokers of the ordering service. 立 # NOTE: Use IP:port notation.. ‧ 國. 學 ‧. Brokers: - kafka0:9092 - kafka1:9092. sit. y. Nat. - kafka2:9092 - kafka3:9092. n. al. er. io. # Organizations is the list of orgs which are defined as participants on # the orderer side of the network Organizations:. Ch. engchi. i n U. v. # SECTION: Application # - Configuration of Application Channels Application: &ApplicationDefaults Organizations: #加入到通道中的組織的訊息 # SECTION: Capabilities # - This section defines the capabilities of fabric network. This is a new # concept as of v1.1.0 and should not be utilized in mixed networks with # v1.0.x peers and orderers. # For instance, if a new MSP type is added, newer binaries # might recognize and validate the signatures from this type, while older 48. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(56) # binaries without this support would be unable to validate those # transactions. This could lead to different versions of the fabric binaries # having different world states. Capabilities: # Channel capabilities apply to both the orderers and the peers and must be # supported by both. Set the value of the capability to true to require it. Global: &ChannelCapabilities V1_1: true # Orderer capabilities apply only to the orderers, and may be safely # manipulated without concern for upgrading peers. Set the value of the # capability to true to require it. Orderer: &OrdererCapabilities V1_1: true. 立. 政 治 大. ‧. ‧ 國. 學. # Application capabilities apply only to the peer network, and may be safely # manipulated without concern for upgrading orderers. Set the value of the # capability to true to require it. Application: &ApplicationCapabilities V1_1: true. y. Nat. n. al. er. io 生成創世區塊. sit. 配置修改好後,利用 configtxgen 工具:. Ch. engchi. i n U. v. configtxgen –profile TwoOrgsOrdererGenesis –outputBlock genesis.block. 生成 Channel 配置區塊. configtxgen –profile TwoOrgsChannel –outputCreateChannelTx channel.tx –channelID mychannel. Anchor Peer 設定. configtxgen –profile TwoOrgsChannel –outputAnchorPeersUpdate 49. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(57) Org1MSPanchors.tx –channelID mychannel –asOrg Org1MSP. configtxgen –profile TwoOrgsChannel –outputAnchorPeersUpdate Org2MsPanchors.tx –channelID mychannel –asOrg Org2MSP. 完成後可以看到 4 個文件: channel.tx、genesis.block、Org1MSPanchors.tx 和 Org2MSPanchors.tx。. 四、. 透過 Nodejs SDK 與 Fabric 網絡溝通. 政 治 大 Hyperledger Fabric 目前提供 Nodejs, Java 及 Go 的 SDK 可以跟 Fabric 上 立. 的 Chaincode 溝通,本研究選擇使用大眾較普及的 Nodejs 進行開發,而. ‧ 國. 學. Chaincode 也採用 Fabric 1.1 版推出的 Nodejs Chaincode,開發資料及程式使. ‧. 用權的時限及區段判斷,以及交易紀錄和研發履歷的存取。. y. Nat. sit. Fabric 上還有其他 Docker Container,CA 負責實名制身分認證;Peer 負. n. al. er. io. 責背書及提交區塊;Ledger 位於 Peer 上,因為 Chaincode 會 install 在 Peer. i n U. v. 上,透過 Peer 使用 Chaincode 跟 Ledger 溝通;Orderers 負責對 transaction. Ch. engchi. 進行全局排序;tools 是對 Fabric 下指令的 CLI 介面;CouchDB 是 Fabric 上 的資料庫,以 key、value 方式儲存資料。. 50. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(58) 程式市集平台 Nodejs SDK. F a b r i c 網絡. CA. Chaincode Chaincode Chaincode. tools. Peer Peer Peer Ledger Ledger Ledger. CouchDB. 政 治 大. 立. ‧ 國. 圖 22 Fabric 區塊鏈網絡架構. 學. 實名制會員與 Channel 管理機制. ‧. 五、. Orders Orders Orders. sit. y. Nat. al. er. io. 在 Fabric 中最獨特的特色是 CA 身分認證以及 Channel 訊息管理機制,. v. n. 而本研究特別針對這兩點才選擇 Fabric 區塊鏈作為開發工具,以下即針對本. Ch. engchi. 研究中如何運用 CA 及 Channel 做詳細說明:. (一). i n U. CA 身分認證機制. 在本研究中的程式市集平台創建會員,需要提供足以證明身分的資訊, 姓名、手機、E-mail、身分證等,因為會員資料會同時在 Fabric 網絡中的 CA 做實名制認證以及儲存在 Mongo DB 內,經過實名制認證得到數位簽 章,擁有自己的 Private Key 同時將 Public Key 傳到 Fabric 網絡中,如此一 來在 Fabric 網絡中,A 用戶將自己的程式開發履歷利用 A 的 Private Key 加 密上傳,其他用戶可以利用 A 的 Public Key 將其解密,解密後可以看到 A 51. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(59) 的數位憑證,藉以向他人確認 A 的身分。數位憑證通常包含有持有者的公 開金鑰、持有者的電子郵件地址、憑證發行單位、憑證有效期限…等等,證 明是 A 的程式開發履歷。. 使用 A的. 程式開發履歷 身分證明文件 用 A 的 Private Key 加密上傳. 程式開發履歷 身分證明文件. Public Key 解密. 政 治 大 立圖 23 PKI 加解密示意圖. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 簽章和 key. 圖 24 用戶於平台註冊會員流程圖 52. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(60) (二). Channel 管理機制 本研究的平台中,Channel 的管理分成程式市集及 AI 模組開發,由於. 現今支援的 Channel 創立機制以及組織成員新增機制,需手動在主機的配置 文件檔中修改,所以暫時不提供用戶創建 Channel 的機制。. 程式市集中,因為隱私權的考量,每個用戶只能看到自己的購買及銷售 商品紀錄,看不到其他用戶的交易紀錄。而平台管理員可以查詢每個交易紀 錄,在不侵犯隱私權的前提下,在網站上統計程式商品人氣、金融商品分類. 政 治 大. 及 AI 模型分類等客製化應用。. 立. AI 模組開發專案中,用戶創立一個開發專案,邀請成員進入專案中,. ‧ 國. 學. 專案採用管理員制,創造專案者是預設管理員,可以允許加入專案,參與專 案人員可以紀錄研發履歷,紀錄詳細 Debug、版本、Commit 次數、Issue 資. ‧. 訊上傳至 Fabric,而程式檔利用資料夾位址的方式記錄至 Mongo DB,每個. y. Nat. sit. 專案成員只可以看到自己專案中的內容,由於是同個 Channel 當中,資料存. n. al. er. io. 儲方式會自動為用戶加入專案 ID 以及 User ID 在檔名後,避免檔案重複的. i n U. v. 狀況。以下以老師與學生開發專案為例,A、B 老師各開啟一個專案,邀請. Ch. engchi. 老師或學生進入專案開發,老師及學生們都可以參與到這個專案中並看到研 發狀況,而老師跟學生們也可以參與其他專案。. A 專案. B 專案. A 老師. A 學生. B 老師. A 老師. B 學生. C 學生. A 學生. C 學生. 圖 25 研發履歷專案示意圖 53. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(61) (三). CA 及 Channel 機制的內部實現. Fabric CA 的機制是為 Fabric 行使證書機構的功能,首先透過 yaml 配置 文件及 script file 部署 CA Server 及 CA Client,並利用 CA Client 與 CA Server 溝通,以達到市集平台中的使用者註冊 CA 功能。. Channel 的機制需透過編寫好 configtx.yaml 配置文件,並利用 Fabric 提 供的 configtxgen 工具來生成,如要進行修改則利用 configtxlator 工具手動編 輯配置文件,加入新的組織及成員,在本研究撰寫期間,尚未支持使用 SDK 動態更新配置文件。. 立. ‧ 國. 學. AI 模組開發專案流程. ‧. io. sit. y. Nat. n. al. er. 六、. 政 治 大. Ch. engchi. i n U. v. 54. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(62) 在開發專案中,總共有新增專案、參與專案、新增履歷紀錄、查詢履歷 紀錄、修改履歷紀錄、刪除履歷紀錄的動作,這些動作會經由 Nodejs SDK 呼叫 Peer 與 Application Chaincode 溝通,並將結果紀錄在 Channel 上,而刪 除跟修改的動作需先經過查詢才能進行,以下同樣以老師跟學生開發專案的 例子來說明:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 26 AI 模組開發專案流程圖. 55. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(63) 第三節. Composer 網絡部署. 一、. 創建 Composer business network – 以基本網絡為例. Hyperledger Composer 的關鍵概念是 business network definition(BND), 定義了資料模型(model.cto)、交易邏輯(logic.js)以及權限控制規則 (permissions.acl)。. 政 治 大 control(permissions.acl)定義存取權限。script(logic.js)包含交易運算邏輯。 立 model(.cto)裡面包括了 assets、participants 以及 transaction。Access. ‧. ‧ 國. 學. package.json 包含網絡的 metadata。以下為各個檔案的程式範例:. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 27 model 檔案範例: org.example.mynetwork.cto (資料來源: Hyperledger Composer 官網) 56. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

(64) 圖 28 logic.js 檔案範例: logic.js (資料來源: Hyperledger Composer 官網). 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 29 permissions.acl 檔案範例: permissions.acl (資料來源: Hyperledger Composer 官網). 具備以上檔案後,使用 composer archive create –t dir –n . 指令產生 business network archive(.bna)檔,這是之後用來部署到 Fabric 或 playground 上的網絡檔。. 57. DOI:10.6814/THE.NCCU.MIS.017.2018.A05.

參考文獻

相關文件

z 可規劃邏輯區塊 (programmable logic blocks) z 可規劃內部連接

台中地區 (山海屯) 台中市大里區崇光國小 台中市大里區大元國小 台中市大里區大里國小 台中市大里區立新國小 台中市大里區草湖國小 台中市大里區永隆國小

對任意連續函數,每個小區間上的取樣點 x 都選擇在函數最 大值與最小值發生的點。如下圖,淺色方塊的高度都挑選小

Shift +a 新增方塊物件→使用 Scale 來調整物 件的大小→Translate 來調整方塊的位置→排 列成樓梯的形狀.. 使用 import 匯入躺椅的

Ctrl+N 建立一個新的 VI Ctrl+B 將程式方塊圖中所有壞線移除 Ctrl+R 執行目前的的 VI Ctrl+T 將人機介面與程式方塊圖左右並列 Ctrl+W 關閉目前的的 VI Ctrl+E

屏東科技大學森林系陳美惠教授帶領的社區林業研究團隊長期深 耕,陪伴墾丁國家公園(台 26 線)及屏北原鄉部落(台 24 線),建立森 林與部落的生態旅遊推動模式,研究成果於 2008

木工程/都市設計與規劃/建築設備) 全日制,兼讀制 先進科技及管理學理學碩士 全日制,兼讀制 金融與精算數學理學碩士 全日制,兼讀制

看臺灣的攝影機就有四百多部(其中二百 多部是落於臺北市區),而這個網站甚至