日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用IBM Blockchain Platform extension开发你的第一个fabric智能合约

發(fā)布時(shí)間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 安裝IBM Blockchain Platform extension for VS Code
  • 創(chuàng)建一個(gè)智能合約項(xiàng)目
  • 理解智能合約
  • 打包智能合約
  • Local Fabric Ops
  • 安裝智能合約
  • 實(shí)例化智能合約
  • 提交和查詢事務(wù)

使用IBM Blockchain Platform extension開發(fā)你的第一個(gè)fabric智能合約

IBM Blockchain Platform extension是VSCode的一個(gè)插件,最新版本是v1.0.17。

該擴(kuò)展支持Hyperledger Fabric和IBM Blockchain Platform的完整開發(fā)工作流程:

  • 生成,編輯和打包智能合約
  • 使用簡(jiǎn)單的預(yù)先配置的本地結(jié)構(gòu)網(wǎng)絡(luò)在本地部署和調(diào)試合同
  • 連接到任何Fabric環(huán)境進(jìn)行部署,包括IBM Blockchain Platform服務(wù)(在IBM Cloud上)或軟件(本地和多云)
  • 提交和評(píng)估交易,并開發(fā)客戶應(yīng)用程序

這個(gè)可謂是開發(fā)Fabric智能合約的神器,比之前的本地的自己搭環(huán)境不知道好哪去了。

那么有些小伙伴要問(wèn)了,既然有這么好用的神器,有沒(méi)有簡(jiǎn)單的介紹教程呢?

別急,下面就是。

安裝IBM Blockchain Platform extension for VS Code

IBM Blockchain Platform extension是工作在VS Code上面的,VS Code是微軟開源的編輯工具,也是一個(gè)非常好用的開發(fā)工具。

如果你已經(jīng)有了VS Code,點(diǎn)擊屏幕左側(cè)邊欄中的擴(kuò)展程序。 在頂部,在擴(kuò)展市場(chǎng)中搜索IBM Blockchain Platform。 單擊安裝,然后單擊重新加載。那么就安裝好了。

注意事項(xiàng):

Fabric是在docker環(huán)境中運(yùn)行的,智能合約現(xiàn)在可以用JavaScript, TypeScript, Java, Go 這四種語(yǔ)言來(lái)編寫。所以你需要如下的環(huán)境:

VS Code version 1.32 or greater
Node v8.x or greater and npm v5.x or greater
Docker version v17.06.2-ce or greater
Docker Compose v1.14.0 or greater

創(chuàng)建一個(gè)智能合約項(xiàng)目

IBM Blockchain Platform extension可以使用你選擇的Hyperledger Fabric支持的編程語(yǔ)言生成智能合約框架。里面已經(jīng)包含了簡(jiǎn)單有用的智能合約。

在本例中,我們將使用TypeScript作為例子。

在左側(cè)邊欄中,單擊IBM Blockchain Platform圖標(biāo)(它看起來(lái)像一個(gè)正方形,如果這是你安裝的最新擴(kuò)展,則可能位于圖標(biāo)集的底部)。

將鼠標(biāo)懸停在SMART CONTRACT PACKAGES面板上,單擊“…”菜單,然后從下拉列表中選擇“創(chuàng)建智能合約項(xiàng)目”。

選擇一種智能合約語(yǔ)言。 JavaScript,TypeScript,Java和Go都可用。就本教程而言,請(qǐng)選擇TypeScript。

然后會(huì)詢問(wèn)你是否要在生成的合同中命名資產(chǎn)(默認(rèn)是“ MyAsset”),當(dāng)然你可以修改成自己想要的資產(chǎn)名字。

選擇一個(gè)位置來(lái)保存項(xiàng)目。單擊瀏覽,然后單擊新建文件夾,然后根據(jù)需要命名項(xiàng)目(例如,“ blockchainExtProject”)。

單擊創(chuàng)建,然后選擇剛創(chuàng)建的新文件夾,然后單擊保存。

最后,從選項(xiàng)列表中選擇“添加到工作區(qū)”。

該擴(kuò)展程序?qū)⒏鶕?jù)你選擇的語(yǔ)言和資產(chǎn)名稱生成一個(gè)框架合同。完成后,你可以導(dǎo)航到“資源管理器”視圖(最有可能在左側(cè)欄中的頂部圖標(biāo),看起來(lái)像“文檔”圖標(biāo))并打開src / my-asset-contract.ts文件以查看你的智能合約代碼腳手架。

生成的文件應(yīng)該如下圖所示:

接下來(lái),我們將看一下生成的智能合約到底是做什么的。

理解智能合約

生成的智能合約代碼支架提供了一些常見(jiàn)的操作示例,可用于與區(qū)塊鏈分類賬上的數(shù)據(jù)進(jìn)行交互。 其中my-asset-contract.ts就是生成的智能合約代碼。

/** SPDX-License-Identifier: Apache-2.0*/import { Context, Contract, Info, Returns, Transaction } from 'fabric-contract-api'; import { MyAsset } from './my-asset';@Info({title: 'MyAssetContract', description: 'My Smart Contract' }) export class MyAssetContract extends Contract {@Transaction(false)@Returns('boolean')public async myAssetExists(ctx: Context, myAssetId: string): Promise<boolean> {const buffer = await ctx.stub.getState(myAssetId);return (!!buffer && buffer.length > 0);}@Transaction()public async createMyAsset(ctx: Context, myAssetId: string, value: string): Promise<void> {const exists = await this.myAssetExists(ctx, myAssetId);if (exists) {throw new Error(`The my asset ${myAssetId} already exists`);}const myAsset = new MyAsset();myAsset.value = value;const buffer = Buffer.from(JSON.stringify(myAsset));await ctx.stub.putState(myAssetId, buffer);}@Transaction(false)@Returns('MyAsset')public async readMyAsset(ctx: Context, myAssetId: string): Promise<MyAsset> {const exists = await this.myAssetExists(ctx, myAssetId);if (!exists) {throw new Error(`The my asset ${myAssetId} does not exist`);}const buffer = await ctx.stub.getState(myAssetId);const myAsset = JSON.parse(buffer.toString()) as MyAsset;return myAsset;}@Transaction()public async updateMyAsset(ctx: Context, myAssetId: string, newValue: string): Promise<void> {const exists = await this.myAssetExists(ctx, myAssetId);if (!exists) {throw new Error(`The my asset ${myAssetId} does not exist`);}const myAsset = new MyAsset();myAsset.value = newValue;const buffer = Buffer.from(JSON.stringify(myAsset));await ctx.stub.putState(myAssetId, buffer);}@Transaction()public async deleteMyAsset(ctx: Context, myAssetId: string): Promise<void> {const exists = await this.myAssetExists(ctx, myAssetId);if (!exists) {throw new Error(`The my asset ${myAssetId} does not exist`);}await ctx.stub.deleteState(myAssetId);}}

請(qǐng)注意以@Transaction開頭的行:這些是定義合同交易的函數(shù)-這些東西使你可以與分類賬進(jìn)行交互。

我們先看看createMyAsset函數(shù):

@Transaction()public async createMyAsset(ctx: Context, myAssetId: string, value: string): Promise<void> {const exists = await this.myAssetExists(ctx, myAssetId);if (exists) {throw new Error(`The my asset ${myAssetId} already exists`);}const myAsset = new MyAsset();myAsset.value = value;const buffer = Buffer.from(JSON.stringify(myAsset));await ctx.stub.putState(myAssetId, buffer);}

@Transaction()中的括號(hào)告訴你此函數(shù)會(huì)修改分類帳的內(nèi)容。

該函數(shù)稱為createMyAsset,它接受myAssetId和一個(gè)值,兩者均為字符串。 提交此事務(wù)后,將使用關(guān)鍵字myAssetId和值創(chuàng)建一個(gè)新資產(chǎn)。 例如,假設(shè)你要?jiǎng)?chuàng)建“ 001”,“my first asset”; 然后稍后,當(dāng)你讀取鍵001的值時(shí),你會(huì)知道該特定狀態(tài)的值是“my first asset”。

現(xiàn)在,看看下一個(gè)事務(wù):

@Transaction(false)@Returns('MyAsset')public async readMyAsset(ctx: Context, myAssetId: string): Promise<MyAsset> {const exists = await this.myAssetExists(ctx, myAssetId);if (!exists) {throw new Error(`The my asset ${myAssetId} does not exist`);}const buffer = await ctx.stub.getState(myAssetId);const myAsset = JSON.parse(buffer.toString()) as MyAsset;return myAsset;}

這個(gè)以@Transaction(false)開頭-“ false”表示此函數(shù)通常不打算更改分類帳的內(nèi)容。 這樣的事務(wù),稱為“查詢”。如你所見(jiàn),此函數(shù)僅采用myAssetId并返回鍵所指向的任何狀態(tài)的值。

可以詳細(xì)看下合同中的其他交易。 然后,你可以繼續(xù)打包和部署該合同,從而來(lái)使用它。

打包智能合約

現(xiàn)在,你已經(jīng)創(chuàng)建了智能合約并了解其中的交易,是時(shí)候打包了。智能合約項(xiàng)目打包成.CDS文件,這是一種特殊類型的文件,可以安裝在Hyperledger Fabric節(jié)點(diǎn)上。

在左側(cè)邊欄中,單擊IBM Blockchain Platform圖標(biāo)。

將鼠標(biāo)懸停在SMART CONTRACT PACKAGES面板上,單擊“…”菜單,然后從下拉列表中選擇“打包智能合約項(xiàng)目”。

如果一切順利,你應(yīng)該在列表中看到一個(gè)新程序包blockchainExtProject@0.0.1。

你剛創(chuàng)建的程序包可以安裝到任何Hyperledger Fabric peer上(以正確的版本運(yùn)行)。例如,你可以右鍵單擊并選擇“導(dǎo)出包”,然后使用IBM Blockchain Platform操作工具控制臺(tái)將其部署到云環(huán)境中。現(xiàn)在,你將在VS Code擴(kuò)展程序預(yù)配置的運(yùn)行時(shí)本地部署程序包,因此現(xiàn)在無(wú)需導(dǎo)出程序包!

Local Fabric Ops

名為L(zhǎng)OCAL FABRIC OPS的面板(在IBM Blockchain Platform視圖中)使你可以在本地計(jì)算機(jī)上使用Docker操作簡(jiǎn)單的Hyperledger Fabric runtime。 最開始的時(shí)候Fabric應(yīng)該是停止的:

Local Fabric runtime is stopped. Click to start.

單擊該消息,擴(kuò)展將開始為你擴(kuò)展Docker容器。然后,你應(yīng)該會(huì)看到消息“ Local Fabric運(yùn)行時(shí)正在開始……”,當(dāng)任務(wù)完成時(shí),你將看到一組可擴(kuò)展/可折疊部分,分別標(biāo)記為“智能合約”,“通道”,“節(jié)點(diǎn)”和“組織。”

下面是他們的簡(jiǎn)單描述:

  • “智能合約”部分向你顯示此網(wǎng)絡(luò)上的實(shí)例化和已安裝合約。本教程的接下來(lái)的兩個(gè)步驟將向你展示如何安裝并實(shí)例化打包的智能合約。
  • 在通道下有一個(gè)稱為“ mychannel”的通道。為了使用智能合約,必須在一個(gè)通道上實(shí)例化它。
  • “節(jié)點(diǎn)”部分包含一個(gè)對(duì)等節(jié)點(diǎn)(peer0.org1.example.com)。命名遵循Hyperledger Fabric約定,你可以從“ org1”部分看到此peer歸Org1所有。
  • 還有一個(gè)證書頒發(fā)機(jī)構(gòu)(CA)ca.org1.example.com和一個(gè)order節(jié)點(diǎn)orderer.example.com。
  • 在這個(gè)簡(jiǎn)單的區(qū)塊鏈網(wǎng)絡(luò)中只有一個(gè)組織稱為“ Org1”。只有一個(gè)組織的網(wǎng)絡(luò)在現(xiàn)實(shí)世界中使用并不是很現(xiàn)實(shí),因?yàn)橹攸c(diǎn)是要在多個(gè)組織之間共享一個(gè)分類帳,但對(duì)于本地開發(fā)目的來(lái)說(shuō)已經(jīng)足夠了。在“組織”下,你將看到Org1MSP:這是Org1的MSP ID。

現(xiàn)在,你已經(jīng)啟動(dòng)了本地Fabric運(yùn)行時(shí),現(xiàn)在該安裝并實(shí)例化智能合約了……

安裝智能合約

在真實(shí)的網(wǎng)絡(luò)中,每個(gè)將支持交易的組織都將在其peer節(jié)點(diǎn)上安裝智能合約,然后在通道上實(shí)例化該合約。 現(xiàn)在本地Fabric運(yùn)行時(shí)只有一個(gè)組織(Org1),一個(gè)同級(jí)(peer0.org1.example.com)和一個(gè)通道(mychannel)。

因此,你只需要在該單個(gè)peer上安裝合同,然后便可以在mychannel中實(shí)例化該合同。 方法如下:

  • 在“本地FABRIC OPS”面板中,找到“ +安裝”(在“智能合約”>“已安裝”下),然后單擊它。

  • 系統(tǒng)會(huì)要求你選擇一個(gè)節(jié)點(diǎn)。 選擇唯一的選項(xiàng)peer0.org1.example.com。

  • 然后,系統(tǒng)會(huì)要求你選擇要安裝的軟件包。 blockchainExtProject@0.0.1。

  • 你應(yīng)該看到blockchainExtProject@0.0.1出現(xiàn)在智能合約>已安裝列表下。

    接下來(lái),你將實(shí)例化智能合約…

    實(shí)例化智能合約

    在“本地FABRIC OPS”面板中,查找+實(shí)例化(在“智能合約”>“實(shí)例化”下),然后單擊它。

    系統(tǒng)會(huì)要求你選擇一個(gè)channel。選擇唯一的選項(xiàng),mychannel。

    然后,系統(tǒng)會(huì)要求你選擇一個(gè)智能合約進(jìn)行實(shí)例化。選擇blockchainExtProject@0.0.1。

    然后,系統(tǒng)將詢問(wèn)你要調(diào)用的函數(shù)。如果要在實(shí)例化過(guò)程中使用特定功能,則可以在此處輸入內(nèi)容。現(xiàn)在只需按Enter即可跳過(guò)此步驟。

    然后,系統(tǒng)會(huì)詢問(wèn)你是否要提供私有數(shù)據(jù)配置文件。對(duì)于本教程,只需單擊“否”.

    實(shí)例化可能比安裝花費(fèi)更長(zhǎng)的時(shí)間-請(qǐng)注意成功消息,并在“智能合約”>“實(shí)例化”列表中顯示blockchainExtProject@0.0.1,以確認(rèn)它是否有效!

    現(xiàn)在你的界面應(yīng)該是這樣的:

    提交和查詢事務(wù)

    Fabric網(wǎng)關(guān)和Hyperledger Fabric網(wǎng)絡(luò)的peer進(jìn)行連接,客戶端應(yīng)用程序可以使用該網(wǎng)關(guān)提交事務(wù)。當(dāng)你在LOCAL FABRIC OPS中啟動(dòng)本地實(shí)例時(shí),也會(huì)自動(dòng)為你創(chuàng)建一個(gè)網(wǎng)關(guān)。你可以在FABRIC GATEWAYS下找到它,它稱為“ local_fabric”。

    要使用網(wǎng)關(guān),你還需要用于在該網(wǎng)絡(luò)上進(jìn)行交易的身份。同樣,對(duì)于本地Fabric運(yùn)行時(shí),已經(jīng)為你設(shè)置了此時(shí)間。請(qǐng)注意,在FABRIC WALLETS下有一個(gè)名為local_fabric_wallet的錢包,其中包含一個(gè)名為admin的ID。如果將鼠標(biāo)懸停在“ FABRIC GATEWAYS”面板中的“ local_fabric”上,你會(huì)看到它告訴你“關(guān)聯(lián)的錢包:local_fabric_wallet”。

    因此,你已經(jīng)有了一個(gè)網(wǎng)關(guān)和一個(gè)帶有單個(gè)身份的關(guān)聯(lián)錢包,這意味著該網(wǎng)關(guān)可以使用了。

    單擊local_fabric(在FABRIC GATEWAYS下)以通過(guò)此網(wǎng)關(guān)連接。

    展開channel,然后展開mychannel和blockchainExtProject@0.0.1。你將看到智能合約中定義的所有交易的列表。

    現(xiàn)在你需要?jiǎng)?chuàng)建資產(chǎn)。右鍵單擊createMyAsset,然后選擇Submit Transaction。系統(tǒng)將要求你提供交易參數(shù):嘗試[“ 001”,“my asset one”](或你喜歡的任何鍵和值,但請(qǐng)確保記住使用的鍵!)。

    參數(shù)以JSON格式提交,因此請(qǐng)確保你完全按照顯示的方式輸入輸入內(nèi)容,以便你根據(jù)此交易要求提交由2個(gè)字符串組成的數(shù)組。

    接下來(lái),以類似方式提交updateMyAsset。這次,為參數(shù)提供相同的鍵和不同的值,例如[“ 001”,“my asset two”]。因此,現(xiàn)在分類帳中的鍵001的值應(yīng)該是“my asset two”。讓我們來(lái)檢查一下……

    readMyAsset用于讀取而不是寫入分類帳,因此這次選擇查詢交易。輸入[“ 001”](或任何你設(shè)置的鍵)作為參數(shù)。你應(yīng)該在輸出控制臺(tái)中看到以下內(nèi)容:

    [SUCCESS] Returned value from readMyAsset: {"value":"my asset two"}

    恭喜你,你已經(jīng)完成了第一個(gè)智能合約!

    更多精彩內(nèi)容且看:

    • 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學(xué),超級(jí)賬本,以太坊,Libra,比特幣等持續(xù)更新
    • Spring Boot 2.X系列教程:七天從無(wú)到有掌握Spring Boot-持續(xù)更新
    • Spring 5.X系列教程:滿足你對(duì)Spring5的一切想象-持續(xù)更新
    • java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細(xì)文章教程

    更多教程請(qǐng)參考 flydean的博客

    總結(jié)

    以上是生活随笔為你收集整理的使用IBM Blockchain Platform extension开发你的第一个fabric智能合约的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。