日韩性视频-久久久蜜桃-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测试的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费黄色视屏 | 国产精品一区二区三区在线免费观看 | 免费看91视频 | 97香蕉碰碰人妻国产欧美 | 一个色亚洲 | 青青操在线视频 | 婷婷一区二区三区四区 | 亚洲中文字幕无码av永久 | 国产精品久久久久久久久久小说 | 亚洲天堂网在线视频 | 亚洲码国产精品高潮在线 | 国产性按摩 | 日韩欧美成 | 国产福利在线观看视频 | 无码无遮挡又大又爽又黄的视频 | 97人人精品 | 欧美在线激情 | 欧美不卡一二三 | 91成人亚洲| 久色精品 | 亚洲无吗在线观看 | 老司机在线永久免费观看 | 爱爱视频欧美 | 国产成人欧美一区二区三区的 | 欧美一区二区三区电影 | 亚洲另类在线观看 | 久久久久免费观看 | 91久久中文字幕 | 国产免费黄色片 | 天天操天天摸天天干 | 国产极品免费 | 91福利一区 | 日韩亚洲欧美在线观看 | 日本精品免费在线观看 | 乌克兰做爰xxxⅹ性视频 | 国产精品yy| 天天操天天操天天干 | 波多野结衣av在线观看 | 日日操网站 | 91精品国产综合久久福利 | 91重口味 | 午夜精| 手机看片欧美 | 国产亚洲精品女人久久久久久 | 黑料av在线 | 国产一区在线看 | 最新91在线| 色av吧 | 久久九九色 | 91宅男| 亚洲伦理网 | 噼里啪啦国语电影 | 亚洲免费观看高清 | 欧美三根一起进三p | 免费精品无码AV片在线观看黄 | 免费又黄又爽又色的视频 | 在线免费观看a级片 | 亲子乱一区二区三区 | 教练含着她的乳奶揉搓揉捏动态图 | 师生出轨h灌满了1v1 | 97超碰在线资源 | 蜜桃视频一区二区三区在线观看 | 国产精品色片 | 亚洲小说在线 | 在线免费观看 | 久久9999久久免费精品国产 | 毛片网站免费 | 欧美黄色免费大片 | 桃花久久| 日韩一区二区三区中文字幕 | 痴汉电车在线观看 | 麻豆精品在线视频 | 国产精品男女视频 | 欧美色图激情小说 | 尹人av| 久草视频免费在线观看 | 久久国产精| 涩久久 | 国产专区一 | 91在线精品观看 | 国产视频精选 | 好看的av在线 | 永久精品 | 操丝袜美女视频 | 91av一区二区三区 | 成人va在线观看 | caoporn成人 | 国产精品 欧美激情 | 精品久久久久久久久久久aⅴ | 精品福利一区二区三区 | 色播五月激情 | 巨物撞击尤物少妇呻吟 | 爽爽窝窝午夜精品一区二区 | 一区亚洲| 少妇在军营h文高辣 | 激情久久视频 | 中日韩免费毛片 | 啊灬啊灬啊灬秀婷 | 天天色综合天天 |