溫馨提示×

溫馨提示×

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

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

Hyperledger 中怎么利用Fabric和Composer實現(xiàn)區(qū)塊鏈

發(fā)布時間:2021-08-10 13:47:50 來源:億速云 閱讀:139 作者:Leah 欄目:互聯(lián)網(wǎng)科技

本篇文章給大家分享的是有關(guān)Hyperledger 中怎么利用Fabric和Composer實現(xiàn)區(qū)塊鏈,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

關(guān)于項目Hyperledger

Hyperledger是一個umbrella項目的名稱,在該項目下開源區(qū)塊鏈方法和工具是協(xié)同開發(fā)的。它由Linux基金會于2015年推出,并享有IBM,英特爾和富士通等軟件巨頭以及大型社區(qū)的熱烈參與。Hyperledger的GitHub存儲庫目前比以往更加活躍。任何人都可以參與開發(fā)。

在Hyperledger中,不僅開發(fā)了單個區(qū)塊鏈框架(或平臺)。相反,重點是并行采用多種方法,創(chuàng)造協(xié)同效應(yīng),可重復(fù)使用的組件和靈活性。從Hyperledger概念的角度來看,區(qū)塊鏈網(wǎng)絡(luò)與比特幣或以太網(wǎng)等加密貨幣的代表無法比較。相反,Hyperledger網(wǎng)絡(luò)的節(jié)點分布在參與組織中,這使得私有,許可或聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò)特別有趣。首先,我們可以忘記公共區(qū)塊鏈的工作證明,股權(quán)證明和其他共識機制。所涉及的組織從應(yīng)用程序業(yè)務(wù)價值和所涉及的信任中作為聯(lián)合體驗證彼此的交易和利益。這也很大程度上解決了可擴展性問題(我們從比特幣網(wǎng)絡(luò)中了解到)并且可以實現(xiàn)高交易吞吐量。

Hyperledger 中怎么利用Fabric和Composer實現(xiàn)區(qū)塊鏈

項目Hyperledger的不同區(qū)塊鏈方法是Fabric,Burrow,Iroha,Indy和Sawtooth。私有,許可和聯(lián)合區(qū)塊鏈可以與所有這些區(qū)塊鏈一起開發(fā),但每種實現(xiàn)都遵循不同的方法。

我們將在本文中詳細(xì)介紹Fabric,因為它擁有最活躍的社區(qū),并且是最靈活的變體。由于其強大的模塊化,fabric是普遍可用的。 “你可以將Hyperledger Fabric視為類似于Apache Web Server”,Linux基金會Hyperledger執(zhí)行董事Brian Behlendorf說。其他方法更多用于在有限的環(huán)境中實施特殊情況。

Hyperledger Fabric ——靈活的區(qū)塊鏈應(yīng)用平臺

使用Fabric作為平臺,可以開發(fā)完全獨立的分布式分類帳解決方案。Fabric包含可以盡可能自由實現(xiàn)的概念。區(qū)塊鏈網(wǎng)絡(luò)的基礎(chǔ)是對所需組織結(jié)構(gòu)的建模。每個參與者都有固定的身份,可以通過頒發(fā)的證書來識別自己。除了身份驗證之外,還包括授權(quán)。使用這種基于角色的系統(tǒng),可以獲得許可區(qū)塊鏈中隱私和機密性的靈活方面。對于證書和參與者的管理,可以使用結(jié)構(gòu)證書頒發(fā)機構(gòu)(1.0版之前的成員服務(wù)提供者)。

資產(chǎn)的定義(要在區(qū)塊鏈上管理的項目)完全取決于區(qū)塊鏈應(yīng)用程序。這些資產(chǎn),例如來自汽車行業(yè)的引擎塊由JSON和/或二進(jìn)制格式的鍵值對模型定義。

鏈代碼的概念旨在基于資產(chǎn)及其所有者實現(xiàn)業(yè)務(wù)邏輯。這可用于實現(xiàn)Go,Java或Node.js等語言中的規(guī)則,這些規(guī)則定義讀取權(quán)限或資產(chǎn)修改。執(zhí)行鏈代碼功能可以讀取和返回資產(chǎn)和/或創(chuàng)建和修改資產(chǎn)并將它們存儲在本地分類帳數(shù)據(jù)庫中。在節(jié)點上的本地持久性更改之后,將更改提交給網(wǎng)絡(luò)(“認(rèn)可”)并在其他組織接受后插入到區(qū)塊鏈中。在以太坊或其他公共區(qū)塊鏈平臺的背景下,可以將鏈碼與智能合約進(jìn)行比較。

Hyperledger 中怎么利用Fabric和Composer實現(xiàn)區(qū)塊鏈

通道用于實現(xiàn)隱私領(lǐng)域。在最簡單的場景中,整個鏈代碼部署在所有參與者加入的單個通道上。但是,為了創(chuàng)建封裝區(qū)域并僅允許選定的參與者在其中進(jìn)行通信,可以配置具有受限參與者組的通道。每個通道可以部署不同的鏈代碼,從而可以實現(xiàn)功能隔離。此外,可以使用AES部分或完全加密通道中的通信。

結(jié)果,在每個通道中維護(hù)一個分布式分類帳,這可以被想象為鏈接交易的現(xiàn)金簿。每個參與者為他們所屬的每個通道保留一份分類帳副本。這為網(wǎng)絡(luò)中的每個現(xiàn)有信道創(chuàng)建了區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)。與區(qū)塊鏈一樣,交易存儲在塊中,這些塊在單個連接列表中成為加密鏈。

但是,為了向客戶端應(yīng)用程序提供分類帳數(shù)據(jù)的單獨視圖,甚至可以執(zhí)行針對網(wǎng)絡(luò)的復(fù)雜讀取請求。由于使用了像CouchDB這樣的面向文檔的數(shù)據(jù)庫,這是可能的。這為連接到Fabric網(wǎng)絡(luò)的客戶端提供了靈活的數(shù)據(jù)訪問。

使用Composer添加更簡單的概念

Hyperledger-Composer是Hyperledger生態(tài)系統(tǒng)中的工具之一。你可以將其視為Fabric的框架。如果你想開發(fā),構(gòu)建和管理Fabric網(wǎng)絡(luò),那么即使不是強制性的,也是實用的。它引入了基于Fabric的進(jìn)一步概念,以提供精美的抽象概念。

除資產(chǎn)外,還可以在Composer建模語言中定義網(wǎng)絡(luò)參與者,交易和事件的方案。每種交易類型的流都通過JavaScript代碼在簡單的API上實現(xiàn)。訪問控制文件可用于限制參與者對某些資源的訪問權(quán)限??梢栽贑omposer Query Language中定義對分類帳中數(shù)據(jù)的常用查詢,這是一種類似SQL的語言。

然后,必須將所有必需文件打包到.bna文件中的BND(業(yè)務(wù)網(wǎng)絡(luò)定義)。然后,可以將此存檔安裝在現(xiàn)有Fabric網(wǎng)絡(luò)上。BND的源代碼當(dāng)然可以在我們首選的編輯器中進(jìn)行本地開發(fā)和測試,因此可以通過Git進(jìn)行版本控制。對于原型設(shè)計和演示目的,有Composer Playground。這提供了一個現(xiàn)代,清晰且直觀可用的Web界面,可訪問Composer CLI的本地配置。使用Playground,你可以輕松創(chuàng)建,安裝,測試,編輯,導(dǎo)入和導(dǎo)出BND。

Hyperledger 中怎么利用Fabric和Composer實現(xiàn)區(qū)塊鏈

在Composer Playground中,你可以以用戶友好的方式安裝,修改和測試新的業(yè)務(wù)網(wǎng)絡(luò),而無需先前的樣本區(qū)塊鏈應(yīng)用知識(例如車輛生命周期,汽車拍賣或農(nóng)場動物跟蹤)。在設(shè)置工具之后,可以在本地完成相同的操作,這樣我們就可以在短時間玩游戲后離開托管游樂場。這個游樂場非常適合使用原型驗證想法并了解底層的Composer和Fabric模型。

使用案例:引擎塊的供應(yīng)鏈跟蹤

為了使用Hyperledger-Fabric和Composer實現(xiàn)私有區(qū)塊鏈網(wǎng)絡(luò),以汽車行業(yè)的發(fā)動機組跟蹤為例。在這種情況下,有制造商和經(jīng)銷商作為網(wǎng)絡(luò)參與者。發(fā)動機及其安裝的車輛顯示為資產(chǎn)。制造商和經(jīng)銷商的公司被引入并被識別為網(wǎng)絡(luò)中的組織。

Fabric鏈代碼應(yīng)提供以下功能:

  • 1.生產(chǎn)具有唯一序列號的發(fā)動機缸體。

  • 2.生產(chǎn)后將發(fā)動機缸體傳送給經(jīng)銷商。

  • 3.跟蹤車輛的序列號。

  • 4.將發(fā)動機缸體安裝到注冊車輛中。

下一步是安裝所需的工具和設(shè)置項目。

開發(fā)環(huán)境設(shè)置和項目創(chuàng)建

首先,需要安裝文檔中列出的Fabric的所有要求。然后我們安裝Composer和Composer及其相關(guān)工具本身的要求。

然后,最好讓自己熟悉新環(huán)境。如果我們完全按照上一個鏈接的說明操作,則fabric-tools現(xiàn)在位于我們的主目錄中。通過描述的腳本,我們可以在Docker-Compose中啟動一個簡單的Fabric網(wǎng)絡(luò),獲得對等管理員訪問權(quán)限并停止并再次刪除它。首先,我們下載1.1版的Docker鏡像并啟動網(wǎng)絡(luò):

export FABRIC_VERSION=hlfv11 && ./downloadFabric.sh && ./startFabric.sh

在網(wǎng)絡(luò)運行時,composer-playground web-UI可以通過composer-playground啟動。它使用composer-cli的所有托管配置并訪問正在運行的Fabric網(wǎng)絡(luò)。從現(xiàn)在開始,我們將Fabric視為可配置的平臺/基礎(chǔ)架構(gòu),其狀態(tài)通過合適的工具進(jìn)行更改。我們不直接使用Fabric概念開發(fā)鏈代碼,權(quán)限或任何模型,因為Composer提供了更多優(yōu)勢。

實施功能

現(xiàn)在我們在我們選擇的目錄中創(chuàng)建我們的BND項目。對于Yeoman(使用模板設(shè)置項目的代碼生成器,如Maven Archtypes),有一個模板(hyperledger-composer:businessnetwork。但是,我已經(jīng)準(zhǔn)備了一個存儲庫,我們現(xiàn)在也可以使用JavaScript ES6和一些很好的工具。我們應(yīng)該從開始分支“初始”開始。master分支具有最終版本和工作版本。我們首先克隆存儲庫的初始分支。

git clone -b initial git@github.com:jverhoelen/fabric-composer-engine-supplychain.git

現(xiàn)在我們在我們選擇的編輯器中打開文件夾。Visual Studio Code非常適合Composer,因為它具有可安裝的語法高亮擴展。稍作修改后你會發(fā)現(xiàn)它是一個NPM項目,所以我們從npm install開始安裝所有依賴項。使用npm test我們可以運行單元測試,使用npm run lint我們可以測試代碼樣式,并且使用npm run createArchive我們可以創(chuàng)建the.bna文件,我們以打包格式完成業(yè)務(wù)網(wǎng)絡(luò)定義。讓我們馬上試試看是否一切正常。

然后我們熟悉項目結(jié)構(gòu)。lib文件夾包含實現(xiàn)交易處理器功能的JS文件。當(dāng)然,我們想測試這個業(yè)務(wù)邏輯并將我們的單元測試存儲在test/文件夾中。模型定義(參與者,資產(chǎn),交易等)在models/中。

我們想首先為所需的區(qū)塊鏈網(wǎng)絡(luò)建模。為此,我們刪除模型文件的內(nèi)容,并在第一行為其指定一個新的命名空間:

namespace org.acme.enginesupplychain

我們?yōu)閰⑴c者制造商和經(jīng)銷商建模,并使用Composer建模語言的繼承。我們還希望每個參與者除了姓名外還有一個可選地址。我們將這些屬性放入一個概念中:

participant Member identified by memberId {
    o String memberId
    o String name
    o Address address optional
}
 
participant Manufacturer extends Member {
}
 
participant Merchant extends Member {
}
 
concept Address {
    o String country
    o String city
    o String street
    o String streetNo
}

然后我們介紹我們網(wǎng)絡(luò)的資產(chǎn):引擎塊和稍后安裝引擎的汽車。在這里,我們了解資產(chǎn)和參與者可以互相參考。引用始終指向任何類型的現(xiàn)有資源。我們以小“o”開頭的屬性總是存在于資源本身中。

asset Engine identified by engineId {
    o String engineId
    o EngineProperties data
 
    --> Manufacturer manufacturer
    --> Car currentCar optional
    --> Merchant merchant optional
}
 
asset Car identified by carId {
    o String carId
    o String legalDocumentId
}
 
concept EngineProperties {
    o String brand
    o String model
    o Double horsePower
    o Double cubicCapacity
    o Integer cylindersAmount
}

在對系統(tǒng)建模之后,我們定義了可以在現(xiàn)有資產(chǎn)和參與者之上執(zhí)行的所有可用操作。這些是交易資源。之后,我們?yōu)橐韵旅總€交易模型測試并實現(xiàn)基礎(chǔ)交易邏輯。

transaction EngineMerchantTransfer {
    --> Engine engine
    --> Merchant merchant
}
 
transaction EngineCarInstallation {
    --> Engine engine
    --> Car car
}
 
transaction EngineCreation {
    --> Manufacturer manufacturer
    o EngineProperties data
}
 
transaction CarCreation {
    o String legalIdDocument
}

現(xiàn)在我們已經(jīng)定義了可能發(fā)生的事情,我們可以在提交交易時開始實現(xiàn)它如何影響分類帳狀態(tài)。首先,我們致力于創(chuàng)建引擎資產(chǎn)。引擎應(yīng)該以UUID格式獲得隨機生成的ID,并且應(yīng)該從一開始就始終屬于制造商。所以我們清空logic.js文件并從頭開始。我們定義常量modelsNamespace和函數(shù)uuid,因為我們將更頻繁地需要它們。接下來是createEngineAsset函數(shù)。函數(shù)上方的文檔塊非常重要,以便Composer可以識別打包代碼時實現(xiàn)的交易類型。

/* global getAssetRegistry getFactory */
 
const modelsNamespace = 'org.acme.enginesupplychain'
function uuid() {
    const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1)
    return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`
}
 
/**
* Creation of a Engine asset triggered by physical production.
* @param {org.acme.enginesupplychain.EngineCreation} tx - the transaction to create an engine
* @transaction
*/
async function createEngineAsset(tx) { // eslint-disable-line no-unused-vars
    const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine')
    const engine = getFactory().newResource(modelsNamespace, 'Engine', uuid())
    const engineData = getFactory().newConcept(modelsNamespace, 'EngineProperties')
 
    engine.data = Object.assign(engineData, tx.data)
    engine.manufacturer = tx.manufacturer
 
    await engineRegistry.add(engine)
}

通過這種方式,我們還實現(xiàn)了其他交易類型EngineMerchantTransferEngineCarInstallationCarCreation。

/**
* An engine is transfered to a merchant.
* @param {org.acme.enginesupplychain.EngineMerchantTransfer} tx - the engine transfer transaction
* @transaction
*/
async function transferEngineToMerchant(tx) { // eslint-disable-line no-unused-vars
    const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine')
    tx.engine.merchant = tx.merchant
 
    await engineRegistry.update(tx.engine)
}
 
/**
* An engine is installed in a car.
* @param {org.acme.enginesupplychain.EngineCarInstallation} tx - the engine into car installation transaction
* @transaction
*/
async function installEngineToCar(tx) { // eslint-disable-line no-unused-vars
    const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine')
    if (tx.car) {
        tx.engine.currentCar = tx.car
        await engineRegistry.update(tx.engine)
    } else {
        return Promise.reject('No target car was set on the transaction!')
    }
}
 
/**
* A car is created.
* @param {org.acme.enginesupplychain.CarCreation} tx - transaction to create a new car
* @transaction
*/
async function createCar(tx) { // eslint-disable-line no-unused-vars
    const carRegistry = await getAssetRegistry(modelsNamespace + '.Car')
    const factory = getFactory()
    const carId = uuid()
    const car = factory.newResource(modelsNamespace, 'Car', carId)
    car.legalDocumentId = tx.legalIdDocument
 
    await carRegistry.add(car)
}

功能本身的單元測試相對簡單,如果我們有經(jīng)驗,我們不需要了解更多。只有對此所需的對象的boostrapping仍然有點超載樣板代碼。測試首先啟動內(nèi)存中的Fabric網(wǎng)絡(luò),在其上安裝業(yè)務(wù)網(wǎng)絡(luò),然后以默認(rèn)管理員身份對其進(jìn)行身份驗證。因為這個Composer提供了庫composer-admin,composer-clientcomposer-commoncomposer-connector-embedded。在測試設(shè)置之后,我們現(xiàn)在可以針對嵌入式網(wǎng)絡(luò)編寫測試用例。由于其長度,設(shè)置代碼未包含在列表中,但可以在test/EngineSupplychainSpec.js中的主分支上查看和測試。

用于測試交易類型的單元測試用例通常具有類似的模式。他們使用其屬性和關(guān)系重新創(chuàng)建交易,針對網(wǎng)絡(luò)執(zhí)行交易,然后檢查所涉及的資產(chǎn)和參與者的數(shù)據(jù)狀態(tài)。我們來看看createEngineAsset的現(xiàn)有測試用例。

describe(‘EngineSupplychainSpec’, () => {
 
   // setup is done in the before and beforeEach hook
   // results are the bnc (BusinessNetworkConnection), target namespace
   // as well as test assets, participants and required registries
   describe('createEngineAsset', () => {
       it('should create an Engine by submitting a valid EngineCreation transaction', async () => {
           const factory = bnc.getBusinessNetwork().getFactory()
 
           const engineCreationTrans = factory.newTransaction(namespace, 'EngineCreation')
           engineCreationTrans.data = factory.newConcept(namespace, 'EngineProperties')
           engineCreationTrans.data.brand = 'Audi'
           engineCreationTrans.data.model = 'Fancy engine model'
           engineCreationTrans.data.horsePower = 400
           engineCreationTrans.data.cubicCapacity = 4000
           engineCreationTrans.data.cylindersAmount = 10
 
           const manufacturerRegistry = await bnc.getParticipantRegistry(namespace + '.Manufacturer')
           await manufacturerRegistry.addAll([])
           engineCreationTrans.manufacturer = factory.newRelationship(namespace, 'Manufacturer', testManufacturer.$identifier)
 
           await bnc.submitTransaction(engineCreationTrans)
 
           const allEngines = await engineRegistry.getAll()
           allEngines.length.should.equal(2)
       })
   })
})

在Hyperledger Composer中實現(xiàn)業(yè)務(wù)網(wǎng)絡(luò)定義的方法應(yīng)該通過這些見解變得清晰。此外,BND可以為我們定義更多的東西。在permissions.acl中,你可以使用訪問控制語言為給定簡單條件的參與者定義訪問限制。對于許多應(yīng)用程序,事件和查詢功能也非常有用和有趣。

最后,我們來看看主分支上的解決方案。所有這些要求都已在其中實施和測試。我們現(xiàn)在用npm run createArchive生成完成的.bna文件,然后在dist/文件夾中。我們現(xiàn)在可以將它導(dǎo)入到我們在控制臺中啟動的Composer Playground中,以便在我們的本地Fabric網(wǎng)絡(luò)上進(jìn)行嘗試。通過Web UI的方式應(yīng)該是不言自明的,但它也是正式記錄的。

總結(jié)和展望

我們已經(jīng)了解了Hyperledger項目的重要部分。具體來說,我們現(xiàn)在知道Fabric作為具有基本概念的區(qū)塊鏈平臺。Composer添加了許多重要概念,使開發(fā)人員可以非常方便地實施和管理區(qū)塊鏈網(wǎng)絡(luò)。通過實施的關(guān)于發(fā)動機缸體生產(chǎn)和跟蹤的區(qū)塊鏈應(yīng)用案例,我們了解了一個簡單但功能強大的私人/聯(lián)盟區(qū)塊鏈用例。

最終的區(qū)塊鏈網(wǎng)絡(luò)最初只在本地執(zhí)行。我們還沒有擴展同行組織和訂購服務(wù)的配置。但我們可以輕松添加更多組織并通過多個主機分發(fā)對等節(jié)點。對于由真正的組織聯(lián)盟跨越的區(qū)塊鏈網(wǎng)絡(luò),我們?nèi)匀挥幸恍﹩栴}需要解決:

我們?nèi)绾喂芾斫M織和對等節(jié)點?組織如何自動將新的對等節(jié)點添加到網(wǎng)絡(luò)中?我們?nèi)绾潍@得一個可以抵御失敗的公平和同質(zhì)的網(wǎng)絡(luò)?客戶如何與網(wǎng)絡(luò)通信?

這個仍然年輕的平臺已經(jīng)提供了很多功能和舒適性。但是,仍有許多任務(wù)需要完成。從開發(fā)人員的角度來看,單元測試代碼看起來仍然非常臃腫。很快就會出現(xiàn)庫,通過它可以更容易地實現(xiàn)通常的測試模式。我們迫切希望看到Hyperledger等項目將如何繼續(xù)推動業(yè)務(wù)中分布式賬本技術(shù)的適應(yīng)性。

故障排除

確保所有工具都與Fabric 1.1兼容。這意味著必須下載此版本的所有docker鏡像。應(yīng)安裝最新版本的Composer和Composer Playground。目前是v0.19.1。本文中Fabric和Composer文檔的所有鏈接都是故意修復(fù)到Fabric 1.1和最新的Composer版本。

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

分享一些Hyperledger fabric、以太坊、比特幣、EOS、Tendermint等區(qū)塊鏈相關(guān)的交互式在線編程實戰(zhàn)教程:

  • Hyperledger Fabric 區(qū)塊鏈開發(fā)詳解,本課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書與MSP服務(wù)、權(quán)限策略、信道配置與啟動、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計、nodejs鏈碼與應(yīng)用開發(fā)的操作實踐,是Nodejs工程師學(xué)習(xí)Fabric區(qū)塊鏈開發(fā)的最佳選擇。

  • Hyperledger Fabric java 區(qū)塊鏈開發(fā)詳解,課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書與MSP服務(wù)、權(quán)限策略、信道配置與啟動、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計、java鏈碼與應(yīng)用開發(fā)的操作實踐,是java工程師學(xué)習(xí)Fabric區(qū)塊鏈開發(fā)的最佳選擇。

  • java以太坊開發(fā)教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解。

  • python以太坊,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。

  • php以太坊,主要是介紹使用php進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建、交易、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和交易等內(nèi)容。

  • 以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。

  • 以太坊開發(fā)進(jìn)階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實現(xiàn)去中心化電商DApp實戰(zhàn),適合進(jìn)階。

  • ERC721以太坊通證實戰(zhàn),課程以一個數(shù)字藝術(shù)品創(chuàng)作與分享DApp的實戰(zhàn)開發(fā)為主線,深入講解以太坊非同質(zhì)化通證的概念、標(biāo)準(zhǔn)與開發(fā)方案。內(nèi)容包含ERC-721標(biāo)準(zhǔn)的自主實現(xiàn),講解OpenZeppelin合約代碼庫二次開發(fā),實戰(zhàn)項目采用Truffle,IPFS,實現(xiàn)了通證以及去中心化的通證交易所。

  • C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。

  • java比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。

  • php比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。

  • c#比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在C#代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是C#工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。

  • EOS入門教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發(fā)。

  • 深入淺出玩轉(zhuǎn)EOS錢包開發(fā),本課程以手機EOS錢包的完整開發(fā)過程為主線,深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開發(fā),課程內(nèi)容即涵蓋賬戶、計算資源、智能合約、動作與交易等EOS區(qū)塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發(fā)包訪問EOS區(qū)塊鏈,以及如何在React前端應(yīng)用中集成對EOS區(qū)塊鏈的支持。課程內(nèi)容深入淺出,非常適合前端工程師深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開發(fā)。

  • tendermint區(qū)塊鏈開發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態(tài)庫等,也包括代幣發(fā)行等豐富的實操代碼,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇。

以上就是Hyperledger 中怎么利用Fabric和Composer實現(xiàn)區(qū)塊鏈,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI