如何編寫一個企業級區塊鏈Hyperledger Fabric開源框架

Convector(a.k.a Convector Smart Contracts)是爲企業區塊鏈框架構建的JavaScript開發框架。它增強了開發體驗,同時幫助開發人員創建更強大,更安全的智能合約系統。它通過鏈代碼和後端一直到前端,允許開發人員以庫的形式重用相同的代碼庫。它基於模型/控制器模式,支持Hyperledger Fabric,並沿着Fabric精心設計的模式本地運行。

這篇博客文章介紹了該項目的歷史,並重點介紹了沿途開發的挑戰和解決方案。

當我們開始研究Tellus時,一切都開始了,Tellus是一個無代碼交易設計師,用於在Hyperledger Fabric區塊鏈上運行。那時我們有一堆Golang智能合約。

我們對開發者體驗(DX)的第一印象並不是那麼好。有兩種方法:init和invoke,除了在invoke方法上放置if條件並使用其中一個參數指示調用的方法之外,沒有其他方法可以添加新方法。所有參數都是位置傳遞的字符串,需要手動解析複雜參數,並且無法在本地測試它。

在項目開始時,Fabric 1.1增加了對Javascript鏈代碼的支持。我們決定嘗試一下,希望改善開發人員的體驗。不幸的是,它遵循Golang鏈式代碼中的相同模式,你仍然需要在日常邏輯中做一些骯髒的工作。我們一直在尋找更好的解決方案,並發現了一篇關於TheLedger的庫的帖子,該文章在Typescript中製作Fabric鏈接代碼,它真正改善了原始Javascript的內容。

在我們的智能合約從Golang遷移到Javascript期間出現了一種模式。大多數時候函數按以下順序執行:

  • 1.解析參數。
  • 2.做一些斷言。
  • 3.執行更改。
  • 4.保存更改。

這導致了關於項目計劃的一個基本問題:智能合約是否應該快速遷移,或者應該花更多的時間來確定模式並使其足夠靈活以適應多個業務案例。這一切都始於項目的./src/utils/

/** @module @worldsibu/convector-examples-token */

import * as yup from ‘yup’;
import {
 ConvectorModel,
 ReadOnly,
 Required,
 Validate
} from ‘@worldsibu/convector-core-model’;

export class Token extends ConvectorModel {
 @ReadOnly()
 public readonly type = ‘io.worldsibu.examples.token’;

 @ReadOnly()
 @Required()
 @Validate(yup.object())
 public balances: { [key: string]: number };

 @ReadOnly()
 @Required()
 @Validate(yup.number().moreThan(0))
 public totalSupply: number;

 @ReadOnly()
 @Required()
 @Validate(yup.string())
 public name: string;

 @ReadOnly()
 @Required()
 @Validate(yup.string())
 public symbol: string;
}

對流模型

Fabric對區塊鏈中存儲的數據形狀沒有限制。你基本上有一個鍵值映射,其中兩個都是字符串,這意味着你可以序列化和存儲任何複雜的對象。我們拆開模型以在代碼中重用它們。我們剛剛通過了所有必要的參數。

@Invokable()
 public async transfer(
   @Param(yup.string())
   tokenId: string,
   @Param(yup.string())
   to: string,
   @Param(yup.number().moreThan(0))
   amount: number
 ) {
   const token = await Token.getOne(tokenId);

   if (token.balances[this.sender] < amount) {
     throw new Error(‘The sender does not have enough funds’);
   }

   token.balances[to] = token.balances[to] || 0;

   token.balances[to] += amount;
   token.balances[this.sender] -= amount;

   await token.save();
 }

Convector控制器

使用Fabric,你可以獲得函數的類型參數列表。我們不希望在所有函數中一直解析模型,因此我們添加了一些裝飾器來驗證是否成功滿足所有參數類型不變量。這些參數可能是原始的,複雜的甚至是模型。

現在,函數看起來更像是一個控制器。他們在模型描述數據時處理業務邏輯。

現在是時候將所有鏈代碼集成到我們的Nodejs REST API中。在這個過程中,我們意識到我們正在服務器上創建一個包裝器庫來使用fabric-client lib調用我的鏈代碼。這是一種非常常見的情況,因此我們尋找一種更好的自動化方法。

我想在服務器上使用相同的控制器和模型文件以及鏈代碼。這樣做意味着解耦模型和存儲層(Fabric)之間的關係以及控制器和執行操作。

這就是我們意識到Hyperledger Fabric只是Convector可以支持的多個區塊鏈之一。

適配器和存儲發揮作用。

適配器是控制器的底層。控制器定義方法,參數和業務邏輯,而適配器處理如何將調用路由到正確的位置。例如,在我們的API中,它使用適配器來調用結構,客戶端庫併發送交易。

存儲提供與模型交互的功能。無論你是要保存,刪除還是查詢某些內容,都可以與模型本身進行交互,並在後臺與指定的服務進行交互。在鏈代碼上,這是Fabric STUB對象。在Nodejs API中,它可能正在發送查詢交易或從CouchDB讀取。

專業提示:Convector可以與區塊鏈以外的東西一起使用。例如,配置適配器或模型以調用API或其他數據庫。

週末變成了創造工具和完善模式的一個月。以下是你今天可以利用的一些工具:

# Install the CLInpm i -g @worldsibu/convector-cli
# Create a new chaincodes projectconv new mychain -c token
cd mychainnpm i
# Install a dev environmentnpm run env:restart # Install the chaincodenpm run cc:start — token 1

Convector CLI

此外,Convector已經附帶了一個Fabric適配器,一個Fabric存儲,一個CouchDB存儲和一個模擬適配器(用於單元測試),你可以使用它來無縫地爲你的鏈碼創建代碼以及NodeJS後端,同時創建可以進行的測試包含在CI/CD管道中。這在任何現實生活中都至關重要。

可以輕鬆創建額外的適配器和存儲層,我們很高興看到社區圍繞這些工具構建的內容。在我們構建這個的同時,我們繼續致力於內部產品的遷移,這有助於在啓動之前在現實生活場景中測試框架。

我很高興我們沒有采取這種遷移的簡單方法。我們對結果非常滿意,發佈開源工具的過程令人驚歎。每天看到數百人使用它也是有益的。

Hyperledger Fabric是一個優秀的區塊鏈框架。它提供的基礎架構以安全可靠的方式涵蓋了大多數用例。這就是爲什麼我們認爲它也應該爲智能合約提供強大的界面,我們希望通過我們在使用它時創建的內部工具回饋社區。

因爲我們相信該項目對區塊鏈生態系統中的任何人都有用,所以Convector加入了Hyperledger Labs計劃。我們真的致力於圍繞Convector建立一個社區,該社區已經超過了27,000個下載,並歡迎Hyperledger社區的投入。如果你希望參與開源項目,請參閱GitHub

關於作者Diego Barahona是WorldSibu的首席技術官和架構師,該公司致力於爲非區塊鏈專家創建區塊鏈工具和平臺,並使該技術更易於解決業務挑戰。

======================================================================

分享一些比特幣、以太坊、EOS、Fabric等區塊鏈相關的交互式在線編程實戰教程:

  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • c#比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在C#代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
  • java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智能合約開發交互,進行賬號創建、交易、轉賬、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發爲主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約代碼庫二次開發,實戰項目採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
  • EOS入門教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • 深入淺出玩轉EOS錢包開發,本課程以手機EOS錢包的完整開發過程爲主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智能合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中集成對EOS區塊鏈的支持。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
  • Hyperledger Fabric 區塊鏈開發詳解,本課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、權限策略、信道配置與啓動、鏈碼通信接口等核心概念,也包含Fabric網絡設計、nodejs鏈碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。
  • Hyperledger Fabric java 區塊鏈開發詳解,課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、權限策略、信道配置與啓動、鏈碼通信接口等核心概念,也包含Fabric網絡設計、java鏈碼與應用開發的操作實踐,是java工程師學習Fabric區塊鏈開發的最佳選擇。
  • tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操代碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。

匯智網原創翻譯,轉載請標明出處。這裏是如何編寫一個企業級Hyperledger Fabric開源框架

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章