4.3 Hyperledger Fabric - 應用程序開發 - 流程和數據設計

應用程序開發 - 流程和數據設計

本主題向你展示如何在 PaperNet 中設計商業票據流程及其相關的數據結構。我們的分析強調,使用狀態和交易對 PaperNet 進行建模可以提供一種精確的方式來了解正在發生的事情。現在,我們將詳細說明這兩個緊密相關的概念,以幫助我們隨后設計 PaperNet 的智能合約和應用程序。

1. 生命周期

如我們所見,在處理商業票據時,有兩個重要的概念與我們有關。狀態和交易。確實,對于所有區塊鏈用例都是如此。有一些以狀態為模型的值概念對象,其生命周期轉換由交易描述。對狀態和交易進行有效分析是成功實現的重要起點。

我們可以使用狀態轉換圖來表示商業票據的生命周期:

image

商業票據的狀態轉換圖。商業票據通過發行,購買和贖回交易在發行,交易和贖回狀態之間轉換。

查看狀態圖如何描述商業票據如何隨時間變化,以及特定交易如何控制生命周期轉換。在 Hyperledger Fabric 中,智能合約實現了交易邏輯,可以在不同狀態之間轉換商業票據。商業票據狀態實際上是在帳本世界狀態中保存的;因此,讓我們仔細看看它們。

2. 賬本狀態

回憶一下商業票據的結構:

image

商業票據可以表示為一組屬性,每個屬性都有一個值。通常,這些屬性的某種組合將為每張票據提供唯一的鍵。

查看商業票據 Paper 屬性的值是 00001,Face value 屬性的值是 5M USD。最重要的是,當前狀態屬性指示商業票據是已發行,交易還是已贖回。結合起來,全套屬性構成了商業票據的狀態。而且,這些單獨的商業票據狀態的整個集合構成了帳本 世界狀態

所有帳本都共享此形式;每個都有一組屬性,每個屬性都有不同的值。狀態的這種多屬性方面是一個強大的功能 – 它使我們可以將 Fabric 狀態視為向量而不是簡單的標量。然后,我們將有關整個對象的事實表示為單獨的狀態,隨后這些狀態會受到交易邏輯控制的轉換。Fabric 狀態被實現為鍵/值對,其中值以捕獲對象的多個屬性 (通常為 JSON) 的格式對對象屬性進行編碼。帳本數據庫 可以支持針對這些屬性的高級查詢操作,這對于復雜的對象檢索非常有幫助。

查看 MagnetoCorp 的票據 00001 如何表示為狀態向量,該狀態向量會根據不同的交易驅動而轉變:

image

商業票據狀態由于不同的交易而存在并轉變。Hyperledger Fabric 狀態具有多個屬性,使其成為向量而不是標量。

請注意,每張票據都是從空狀態開始的,從技術上講,它是零狀態,因為它不存在!了解發行交易如何使票據 00001 產生,以及隨后由于購買和贖回交易而對其進行更新。

注意每個狀態如何自我描述;每個屬性都有一個名稱和一個值。盡管目前我們所有的商業票據都具有相同的屬性,但并非總是如此,因為 Hyperledger Fabric 支持具有不同屬性的不同狀態。這允許同一帳本世界狀態包含同一資產的不同形式以及不同類型的資產。它還可以更新狀態的結構;想象一個需要附加數據字段的新規則。靈活的狀態屬性支持隨時間推移數據演變的基本要求。

3. 狀態鍵

在大多數實際應用中,狀態將具有屬性的組合,這些屬性可以在給定的上下文中唯一地標識它 - 這是關鍵。 PaperNet 商業票據的鍵是由 Issuerpaper 屬性的串聯形成的。因此對于 MagnetoCorp 的第一份票據,是 MagnetoCorp00001。

狀態鍵使我們能夠唯一地識別票據。它是通過發行交易創建的,隨后通過購買和贖回進行更新。 Hyperledger Fabric 要求賬本中的每個狀態都有唯一的鍵。

如果在可用屬性集中沒有唯一鍵,則將應用程序確定的唯一鍵指定為創建狀態的交易的輸入。此唯一鍵通常帶有某種形式的 UUID,盡管可讀性較差,但它是標準做法。重要的是,帳本中的每個狀態對象都必須具有唯一的鍵。

注意:應避免在鍵中使用 U+0000 (無字節)。

4. 多狀態

如我們所見,PaperNet 中的商業票據作為狀態向量存儲在帳本中。能夠從賬本查詢不同的商業票據是一項合理的要求;例如:查找由 MagnetoCorp 發布的所有票據,或:查找處于贖回狀態的 MagnetoCorp 發布的所有票據。

為了使這些搜索任務成為可能,將所有相關票據歸為一個邏輯列表會很有幫助。PaperNet 的設計結合了商業票據清單的概念 – 一個邏輯容器,每當發行商業票據或進行其他更改時,邏輯容器都會更新。

4.1 邏輯表示

將所有 PaperNet 商業票據都放在一個商業票據列表中會很有幫助:

image

MagnetoCorp 新創建的商業票據 00004 已添加到現有商業票據列表中。

發行交易可以將新票據添加到列表中,并且可以使用購買或贖回交易來更新列表中已有的票據。查看列表如何使用描述性名稱:org.papernet.papers;使用這種 DNS 名稱是一個非常好的主意,因為精心選擇的名稱將使你的區塊鏈設計對其他人來說很直觀。這個想法同樣適用于 智能合約名稱。

4.2 物理表示

雖然在 PaperNet 中只考慮一個文件列表是 org.papernet.papers 是正確的,但最好將列表實現為一組單獨的 Fabric 狀態,其組合鍵將狀態與其列表相關聯。這樣,每個狀態的組合鍵都是唯一的,并支持有效的列表查詢。

將 PaperNet 商業票據的列表表示為一組不同的 Hyperledger Fabric 狀態。

請注意,列表中的每篇票據如何用向量狀態表示,并具有由 org.papernet.paperIssuerPaper 屬性串聯而成的唯一復合鍵。此結構很有用,其原因有兩個:

  • 它使我們能夠檢查帳本中的任何狀態向量,從而確定其在哪個列表中,而無需參考單獨的列表。這類似于看一組體育迷,然后根據所穿襯衫的顏色來確定他們支持的球隊。體育迷們自稱忠誠。我們不需要粉絲列表。
  • Hyperlegder Fabric 在內部使用 并發控制機制 來更新帳本,這樣將票據保持在單獨的狀態向量中就大大減少了共享狀態沖突的機會。這樣的沖突需要重新提交交易,使應用程序設計復雜化,并降低性能。

第二點實際上是 Hyperledger Fabric 的關鍵要素。狀態向量的物理設計對于優化性能和行為非常重要。讓你的狀態分開!

5. 信任關系

我們已經討論了網絡中的不同角色 (例如發行人,交易者或評估機構) 以及不同的商業利益如何決定誰需要簽署交易。在 Fabric 中,這些規則由所謂的 背書策略 捕獲。可以在鏈碼粒度以及各個狀態鍵上設置規則。

這意味著在 PaperNet 中,我們可以為整個命名空間設置一個規則,該規則確定哪些組織可以發布新票據。之后,可以為各個票據設置和更新規則,以捕獲購買和贖回交易的信任關系。

在下一個主題中,我們將向你展示如何結合這些設計概念來實現 PaperNet 商業票據智能合約,然后在其中進行應用!

Reference

項目源代碼

項目源代碼會逐步上傳到 Github,地址為 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容