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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fabric--node测试

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fabric--node测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

node測試

關閉網絡

$ sudo ./byfn.sh -m down

進入到fabric-samples/fabcar目錄中

$ cd ../fabcar/ $ ls

如果是完整的環境,目錄中應該包含如下文件:

enrollAdmin.js invoke.js package.json query.js registerUser.js startFabric.sh

移除所有處于活動中的Docker容器

$ sudo docker rm -f $(docker ps -aq)

docker rm : 刪除當前指定的Docker容器

? docker rm -f $(docker ps -aq)

? -f: 強制刪除

查看Docker

$ sudo docker ps

清除所有的網絡緩存:

$ sudo docker network prune

刪除鏈碼圖像(鏈碼鏡像)

刪除fabcar智能合約的底層鏈碼圖像。如果您是第一次運行此項目可以不執行(系統上不會有此鏈接代碼圖像)

$ sudo docker rmi dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba

刪除指定的Docker鏡像文件

? docker rmi image_id

安裝客戶端

安裝應用程序的Fabric依賴關系

$ npm install

下載最好使用穩定的VPN

npm install: 根據 package.json 讀取依賴的信息并安裝

如果未安裝Node則先按如下步驟安裝Node及npm

安裝nvm

$ sudo apt update $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.10/install.sh | bash$ export NVM_DIR="$HOME/.nvm" $ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

安裝Node

$ nvm install v8.11.1

檢查Node版本

$ node -v

輸出: v8.11.1

檢查npm版本

$ npm -v

輸出: 5.6.0

啟動網絡

$ sudo ./startFabric.sh

該命令將啟動各種Fabric實體,并啟動用Golang編寫的鏈式代碼的智能合約容器


如出現以下錯誤

ERROR: manifest for hyperledger/fabric-ca:latest not found

則說明環境中缺少 fabric-ca 鏡像

下載鏡像 $ sudo docker pull hyperledger/fabric-ca:x86_64-1.1.0-preview將其標記為最新 $ sudo docker tag hyperledger/fabric-ca:x86_64-1.1.0-preview hyperledger/fabric-ca:latest檢查 $ sudo docker images重新啟動 $ sudo ./startFabric.sh

可選執行(流式處理CA日志, 打開新的終端并執行如下命令)

$ sudo docker logs -f ca.example.com

注冊管理員用戶

$ node enrollAdmin.js

命令執行后輸出如下內容:

Successfully enrolled admin user "admin" Assigned the admin user to the fabric client ::{"name":"admin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"dc412dcc161b5732737e98e77fda03433b55408d79b10195f0ff150fc995924a","identity":{"certificate":"-----BEGIN CERTIFICATE-----\nMIICATCCAaigAwIBAgIUMjxyVKytJHiYigb+usxuVlmeI8kwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgwNDI2MDcyNzAwWhcNMTkwNDI2MDcz\nMjAwWjAhMQ8wDQYDVQQLEwZjbGllbnQxDjAMBgNVBAMTBWFkbWluMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEszinoLQrvnKVYl9FUT8ebxT2jIz5lKCk5olL1cox\n/JchmLPG8Ew1roM2TgG64rvT1nrl1EvMwmD8oEOMgmGqwKNsMGowDgYDVR0PAQH/\nBAQDAgeAMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNG9kJBZBDSOwFxVHTDByNOl\nMvDSMCsGA1UdIwQkMCKAIEI5qg3NdtruuLoM2nAYUdFFBNMarRst3dusalc2Xkl8\nMAoGCCqGSM49BAMCA0cAMEQCIA1Ugh8NW3tS0GkuUrURdwQrSnFkdWTQhJ1/GvRd\nJbeTAiBGdDpHu/6mZG8dpguA0EaqSHrWJBQra4Vj1Fm9F1+zNg==\n-----END CERTIFICATE-----\n"}}}

成功執行后會調用證書簽名請求(CSR),并最終將eCert和密鑰材料輸出到此文件夾中./hfc-key-store, 應用程序將在創建用戶或加載身份對象時查找此位置

注冊 user1用戶

$ node registerUser.js

user1

該命令執行后調用CSR并將密鑰和eCert輸出到./hfc-key-store子目錄中

執行命令后輸出如下:

Successfully loaded admin from persistence Successfully registered user1 - secret:mrOjTeyeUmWY Successfully enrolled member user "user1" User1 was successfully registered and enrolled and is ready to intreact with the fabric network

查詢分類帳

$ node query.js

命令執行后輸出如下

Successfully loaded user1 from persistence Query has completed, checking results Response is [{"Key":"CAR0", "Record"{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}}, {"Key":"CAR1", "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6", "Record": {"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]

由Adriana擁有的黑色特斯拉Model S,由Brad擁有的紅色Ford Mustang,由Pari擁有的紫色Fiat Punto等等。

分類賬是基于K-V的,在上面的信息中,Key為CAR0至CAR9

打開query.js

$ cat query.js

發現應用程序的初始部分定義了某些變量,例如通道名稱,證書存儲位置和網絡端點

var channel = fabric_client.newChannel('mychannel'); var peer = fabric_client.newPeer('grpc://localhost:7051'); channel.addPeer(peer);var member_user = null; var store_path = path.join(__dirname, 'hfc-key-store'); console.log('Store path:'+store_path); var tx_id = null;

query.js文件有如下代碼使用第二個身份user1作為此應用程序的簽署實體。指定user1為簽名者

fabric_client.getUserContext('user1', true);

這是實現查詢功能的語句塊:

// queryCar chaincode function - requires 1 argument, ex: args: ['CAR4'], // queryAllCars chaincode function - requires no arguments , ex: args: [''], const request = {//targets : --- letting this default to the peers assigned to the channelchaincodeId: 'fabcar',fcn: 'queryAllCars',args: [''] };調用鏈碼命令:chaincode query -n 鏈碼名稱 -C 通道名稱 -c 調用鏈碼時所需要傳遞的參數-c '{"Args":["FunctionName", "查詢Key"]}'

當應用程序運行時,它會調用對等fabcar體上的鏈式代碼,運行其中的queryAllCars函數,且不傳遞任何參數.

使用編輯器打開query.js

$ vim query.js

修改其查詢塊內容,更改queryAllCars為queryCar并將CAR4作為特定Key為參數傳遞來執行此操作

const request = {//targets : --- letting this default to the peers assigned to the channelchaincodeId: 'fabcar',fcn: 'queryCar',args: ['CAR4'] };

保存退出后運行:

$ node query.js

執行后返回如下

Successfully loaded user1 from persistence Query has completed, checking results Response is {"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}

使用該queryCar功能,我們可以查詢任何關鍵字(例如CAR0)并獲取與該車相對應的任何品牌,型號,顏色和所有者

更新分類帳

修改 invoke.js, 找到var request中的fcn與args, 添加一條新的數據

$ vim invoke.js var request = {//targets: let default to the peer assigned to the clientchaincodeId: 'fabcar',fcn: 'createCar',args: ['CAR10','Chevy','Volt','Red','Nick'],chainId: 'mychannel',txId: tx_id};

保存退出后執行

$ node invoke.js

執行成功,輸出如下

Successfully loaded user1 from persistence Assigning transaction_id: 801d0636b9aa94cc7782af21ec2a10ebb12f929bd722afcee1f2b7b923485c82 Transaction proposal was good Successfully sent Proposal and received ProposalResponse: Status - 200, message - "OK" The transaction has been committed on peer localhost:7053 Send transaction promise and event listener promise have completed Successfully sent transaction to the orderer. Successfully committed the change to the ledger by the peer

返回query.js并將參數由CAR4更改為CAR10

$ vim query.js const request = {//targets : --- letting this default to the peers assigned to the channelchaincodeId: 'fabcar',fcn: 'queryCar',args: ['CAR10'] };

查詢:

node query.js

輸出內容如下:

Successfully loaded user1 from persistence Query has completed, checking results Response is {"colour":"Red","make":"Chevy","model":"Volt","owner":"Nick"}

修改 invoke.js, 修改CAR10的擁有者為 Dave

$ vim invoke.js var request = {//targets: let default to the peer assigned to the clientchaincodeId: 'fabcar',fcn: 'changeCarOwner',args: ['CAR10','Dave'],chainId: 'mychannel',txId: tx_id };

保存退出并執行

$ node invoke.js $ node query.js

運行輸出結果:

Successfully loaded user1 from persistence Query has completed, checking results Response is {"colour":"Red","make":"Chevy","model":"Volt","owner":"Dave"}

問題:

在執行 node invoke.js 命令后出現如下錯誤

Store path:$HOME/hyfa/fabric-samples/fabcar/hfc-key-store Successfully loaded user1 from persistence Assigning transaction_id: f80947242014765a46a17d797b45c8ed9a5db5cc936a57c731219d9e25646051 Transaction proposal was good Successfully sent Proposal and received ProposalResponse: Status - 200, message - "OK" Failed to invoke successfully :: TypeError: Cannot read property 'getConnectivityState' of undefined $HOME/hyfa/fabric-samples/fabcar/node_modules/fabric-client/lib/EventHub.js:308if(self._stream) state = self._stream.call.channel_.getConnectivityState();^TypeError: Cannot read property 'getConnectivityState' of undefinedat ClientDuplexStream.<anonymous> ($HOME/hyfa/fabric-samples/fabcar/node_modules/fabric-client/lib/EventHub.js:308:56)at emitOne (events.js:116:13)at ClientDuplexStream.emit (events.js:211:7)at addChunk (_stream_readable.js:263:12)at readableAddChunk (_stream_readable.js:250:11)at ClientDuplexStream.Readable.push (_stream_readable.js:208:10)at Object.onReceiveMessage ($HOME/hyfa/fabric-samples/fabcar/node_modules/grpc/src/client_interceptors.js:1302:19)at InterceptingListener.recvMessageWithContext ($HOME/hyfa/fabric-samples/fabcar/node_modules/grpc/src/client_interceptors.js:629:19)at $HOME/hyfa/fabric-samples/fabcar/node_modules/grpc/src/client_interceptors.js:728:14

此問題可以無視, 不會影響到后繼查詢命令 node query.js 的執行

總結

以上是生活随笔為你收集整理的Fabric--node测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爱av导航| 国产第一页在线 | 亚洲一区 视频 | 久99久视频 | 亚洲综合不卡 | 激情网页| 日本不卡视频一区二区三区 | 蜜桃视频一区二区三区在线观看 | 天天操精品 | 日本青青草视频 | 黑人爱爱视频 | 久久久久久久久久久99 | 国产suv精品一区二区6 | 国产又粗又黄又爽视频 | 99这里| 成人黄色a级片 | 免费黄色在线网站 | 国产视频一区在线 | 国产伦精品一区二区三区精品 | 在线观看日批 | 二区三区av | 美女综合网 | 7788色淫网站小说 | 综合激情久久 | 亚日韩欧美 | 欧美成免费 | 男人舔女人下部高潮全视频 | 一本色道久久综合亚洲精品按摩 | 欧美福利视频一区 | 少女视频的播放方法 | 国产91国语对白在线 | 爱情岛亚洲论坛入口 | 日本一区二区不卡在线观看 | 影音先锋在线视频观看 | 国产999精品视频 | 农村村妇真实偷人视频 | 六月久久 | 男女啪啪免费 | 色戒在线免费 | 久久久久无码国产精品 | 欧美 日韩 国产 成人 在线 91 | 欧美色图网址 | 欧美一级日韩一级 | 国产有码视频 | 中文字幕免费观看 | 人人射人人爱 | 国产天堂资源 | 成人av一区二区在线观看 | 色偷偷在线观看 | www.伊人网| 国产精品91在线观看 | 亚洲一区二区精华 | 国模一区二区三区 | 国产一区二区三区影视 | 国产精品成人av性教育 | 97精品在线视频 | 国产午夜福利视频在线观看 | 中文高清av | 五月婷婷丁香久久 | 久久免费少妇高潮99精品 | av女大全列表 | 成人在线观看免费高清 | 国产一区精品在线 | 91直接进入 | www.色香蕉| 三级不卡| 久久夜色精品 | 久久国产香蕉 | 国产免费成人在线视频 | 青青草av在线播放 | 一区二区国产视频 | 99精品综合| 亚洲黄色在线免费观看 | 麻豆av一区 | 91ts人妖另类精品系列 | 伊人影院在线观看 | 亚洲蜜臀av | 国产美女又黄又爽又色视频免费 | 黄色在线观看www | 亚洲区欧美 | 中文字幕在线观看网站 | 国产在线观看成人 | 假日游船法国满天星 | av在线播放地址 | 黑人巨大精品欧美黑寡妇 | 激情视频国产 | 北条麻妃在线一区 | 婷婷视频在线观看 | 亚洲AV无码成人精品一区 | 老女人丨91丨九色 | 在线色网址 | 国产成人精品久久二区二区91 | 久久久国产精华液 | 一二三区免费 | 黄色一及片 | 久久久久人妻一区精品色 | 豆花在线观看 | 风流少妇一区二区三区91 | 超碰首页|