91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-28 04:14:47 來源:網絡 閱讀:335 作者:小智123 欄目:軟件技術

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或其他數據庫。

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

  • @worldsibu/convector-common-fabric-helper:使用一些快捷方法(如發送交易或安裝鏈代碼)為fabric-client包裝Nodejs庫。
  • @worldsibu/convector-tool-chaincode-manager:CLI和Nodejs庫,用于在區塊鏈上打包和安裝對流鏈代碼。這是關鍵,因為使用Convector構建較小的代碼片段,此工具將捆綁你的代碼。
  • @worldsibu/hurley:建立Fabric區塊鏈網絡的開發環境。在這里閱讀更多。
  • @worldsibu/convector-cli:新的convector項目的快速啟動。這是你開始使用新項目的最簡單,最快捷的方式。在這里閱讀更多。
# 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開源框架

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

两当县| 金溪县| 揭西县| 大连市| 屏南县| 嘉定区| 客服| 手游| 兴安县| 宁城县| 余庆县| 霞浦县| 武穴市| 历史| 花垣县| 巴楚县| 兰溪市| 泸水县| 崇文区| 望奎县| 仪征市| 正阳县| 南丹县| 贵港市| 高州市| 遂溪县| 济阳县| 开原市| 开鲁县| 太白县| 陆河县| 庐江县| 壶关县| 霍城县| 洞口县| 邓州市| 晋中市| 琼海市| 临西县| 尉氏县| 贺兰县|