# 筆記-章節 6,7,8,9 ###### tags: `區塊鏈讀書會` 翻譯會很怪,請見諒 # 賬本 賬本的功用是持有一門生意的整個運行狀態與最新狀況,也可以當作用來存放一門生意所有交易內容的足跡。 A ledger contains the current state or totaling of a business as a journal of transactions. 以一個簡單的範例而言,你可以把你的郵局存簿當作一個 Hyperledger Fabric 的賬本。存簿(賬本)存放着你的交易訊息(Transaction Log),以及歷史的交易記錄(History)與最新的接結存(Current State)。  只不過存簿只針對金錢做記錄,而 Ledger 實際上是可以存放與記錄多種資料。 ## 賬本架構  賬本的架構: 上圖所示,一個賬本由一個 World State (W) 資料庫與 一 Blockchain (B) 區塊鏈所組成,而 World State 的內容取決與 Blockchain 的內容。 ### World State  存放賬本 Current State 的一個資料庫,以存簿範例來說,資料庫 Current State 就是你目前的結存 `{ "balance": "1000000 NTD"}`。那麼上一筆資料呢?在你還進行最新一筆交易之前,你的上一筆交易後的結存是你的存簿的 Current State,而它在新的一筆交易進來後,它就會從 World State 裏頭被新的接村給替代,舊的存放在區塊連上,變成了歷史交易資訊。 **特徵:** - 存放 Key-Value Pairs - `{ "the_key": "the_value" },` - 允許複合式的資料形態 - JSON Object - ``` { "properties": { "street_address": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" } } } ``` - 像是一個快取記憶體(Cache) - 可以存放多個 Pairs - 新的網路創建後,World State 會是空的 - 可以從區塊鏈重新取得 World State (Current) **好處 (用途):** - 可以對資料庫做 Querying 再舉一個例子,在存簿的範例來說,資產只有錢這麼一個,但如果現在玩法是資產變成了你的車子、房子、地等等,那麼在你賬本內的資訊可能就像是 ``` "cars": "5-supercars", "houses": "3-story-bangalore", "lands": "100000 square feet" ``` ### Blockchain 區塊鏈  存放歷史交易內容的區塊連,以存簿範例來說,像是你前三個月的薪水與花費,或到更早以前你開戶的那個時間點的,存簿的每一個交易內容都不斷的因爲時間的演進而慢慢增加與修改,這些交易資訊,就會保存在區塊鏈的鏈上。 **特徵:** - 循序性 Sequential - 保留歷史資訊 - 一個接着一個 - 決定 World State - 不可篡改 - 它是一個檔案 - 新的交易造就了區塊鏈的成長 - 我們不斷的透過交易(存款提款),歷史資訊會慢慢成長,而新的狀態會一個一個被刷新。 ## Transaction 交易 ### 一個 Block 有什麼  Block 是在賬本區塊鏈內的其中一個區塊 **擁有:** - Block Header (H) - 記錄: - 目前這個區塊的號碼 - 目前這個區塊的 Transaction Hash - 目前這個區塊的前一個區塊的 Transaction Hash -  - Block Data (D) - **記錄交易資料** - 區塊可擁有多筆交易 - 有排序 - Block Metadata (M) - 記錄: - 時間戳記 - 區塊寫入者 - 公鑰 - 證書 - 交易驗證的 Flags - `Metadata: 表示資料的資料` ### 一個交易內容有什麼  - Header (H) 標頭 - 用 Metadata 來記錄交易資訊,其中包含是那一個 Chaincode 被呼叫,以及 Chaincode 的版本等資訊。 - Signature (S) 簽章 - 客戶端製造的數位簽章 - Proposal ( P ) 提案 - 將客戶傳進來的輸入參數作編碼,以進入 Chaincode 執行,合約在被執行之前呼叫者需要這個步驟擬好自己輸入參數,記錄在交易內容內。由於在此階段還未代表合約會被執行,所以稱之爲提案。 - Response ( R ) 反應 - 表達在交易進行前後 World State 的改變。比如在 World State, 車子一臺經過交易後變兩臺。 - Endorsement (E) 簽署 - 一個經過簽章後的反應清單(List of Signed Transaction Responses),經過 Validator 的驗證已達成簽署的資料。 ### Channel 通道 一個賬本基於一個通道,使用通道能讓兩個或以上的網絡成員能通過一個溝通的專屬頻道進行私下有目的性的交易。 - 一個通道一個賬本 - Own World State and Own Blockchain - 一個交易被執行在網路是基於一個通道所達成的(交易所屬某通道的概念),而參與者需要被驗證與賦予權限才能在該通道底下發起交易。 - 但一個 Peer (Party/參與者/Client/User) 可以是多個通道底下的成員,所以他將會有這些通道的賬本們(只要該 Peer 有被多個通道授權與受驗證,則有多個通道的可能性)。 **範例:** 可以用醫院的部門做範例(各部門各通道),各科主治醫生可能互相交換病人資料(Assets),則部門間的權限將會授權給醫生們,而但各部門的護士只需照顧好該部門的病人,則只能查看該部門病人的資料。 # 節點 Peers (Nodes) ## 什麼是節點? - 一個區塊鏈網絡在運行時需要一些電腦機器做運行,它們持有一個或多個賬本的副本與相對應的智能合約,而這些提供區塊鏈網絡運行的電腦則稱作**節點**。 - 在 Hyperledger Fabric 上,節點可以被: - 創建 - 開起 - 停止 - 修改 - 刪除 節點也提供了可以讓管理者或者應用程式向智能合約或賬本互動的 API 做溝通 - 節點在 Hyperledger Fabric 能持有不知一個賬本與智能合約,這個印證了 Fabric 的彈性系統設計與它的模組化模式的特性。  ## 節點的種類 ### Committing Peer 負責管理整個區塊鏈網絡上的賬本,包含與該節點有聯繫的相關賬本的當前狀態與智能合約,但不能觸發合約。 ### Endorsing Peer (背書) 包含智能合約,目的是接收交易提案,然後將提案在隔離的環境下執行並且模擬交易。模擬交易結束後,經過簽署與驗證的背書交易就會送到 Ordering Node 處理交易。 ### Ordering Node 負責接收背書節點的交易內容然後將交易分成區塊。Orderers 的任務是確保在有共識下將這些區塊分配給 Committing Peers,讓 Committing 去驗證交易內容,最終有效的交易才會被記錄在節點上。 # 私有資料 Private Data After 1.2 照目前所學的內容,要在參與者直接傳送私人資料的實踐方式是透過創建一個新的通道,讓特定的某一些參與者才能看到私有的資料,不過這個方式會產生管理通道的 Overhead。所以在 1.2 版本之後,有了 Private Data Collection 這樣的一個服務。而這個服務簡單來說就是一個組織的子集,能在不用再創建一個新通道,即可使用交易背書,Commit,與 Query 資料。 ## 兩個元素 - 私有資料是經過 Gossip Protocal 向有認證的組織以 P2P 的方式進行傳輸。資料存在賬本的狀態資料庫內,僅可以在有權限的請況下,利用只能合約去拜訪私有資料,而 Orderin Service 也沒辦法查看資料。 - 只有資料的哈希值才會經過 Endorse, Commit and Order。這個哈希值可以作爲交易的狀態參考與證據。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up