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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hyperledger Fabric 私有数据(2)操作流程

發布時間:2025/3/21 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hyperledger Fabric 私有数据(2)操作流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 私有數據資產轉移的案例

collections_config.json文件定義了3個私有數據集合定義:assetCollection、Org1MSPPrivateCollection和Org2MSPPrivateCollection。

eg. collections_config.json文件內容

[{"name": "assetCollection","policy": "OR('Org1MSP.member', 'Org2MSP.member')","requiredPeerCount": 1,"maxPeerCount": 1,"blockToLive":1000000,"memberOnlyRead": true,"memberOnlyWrite": true},{"name": "Org1MSPPrivateCollection","policy": "OR('Org1MSP.member')","requiredPeerCount": 0,"maxPeerCount": 1,"blockToLive":3,"memberOnlyRead": true,"memberOnlyWrite": false,"endorsementPolicy": {"signaturePolicy": "OR('Org1MSP.member')" }},{"name": "Org2MSPPrivateCollection","policy": "OR('Org2MSP.member')","requiredPeerCount": 0,"maxPeerCount": 1,"blockToLive":3,"memberOnlyRead": true,"memberOnlyWrite": false,"endorsementPolicy": {"signaturePolicy": "OR('Org2MSP.member')" }}]

2. 數據結構

2.1 chaincode內部結構體

2.2 物理存儲結構

3. 操作流程

3.1. 鏈碼流程

step1. base64格式化編碼私有數據參數

export private_create=$(echo -n “{“assetID”:“10004” , “objectType”:“1” , “color” : “red” , “appraisedValue” : 1000 , “size”:100 }” | base64 | tr -d \n)

step2. 安裝智能合約

peer lifecycle chaincode install /opt/gopath/src/github.com/chaincode/private.tar.gz

step3. 配置合約參數ID

export CC_PACKAGE_ID=private:939ab0bae5f72a707fffac97f38600db7d4fb116d3d7c45bc0be2082c58f33c0

step4. 導入私有參數的配置路徑

export CC_COLL_CONFIG=/opt/gopath/src/github.com/chaincode/collections_config.json

step5. 節點授權安裝合約

peer lifecycle chaincode approveformyorg --signature-policy “OR(‘Org1MSP.member’,‘Org2MSP.member’,‘Org3MSP.member’)” -o orderer.xxx.com:7050 --channelID mychannel --name private --version 1.0 --package-id $CC_PACKAGE_ID --sequence 10 --collections-config $CC_COLL_CONFIG --tls --cafile $ORDERER_TLSCA

step6. 提交合約

peer lifecycle chaincode commit --signature-policy “OR(‘Org1MSP.member’,‘Org2MSP.member’,‘Org3MSP.member’)” -o orderer.xxx.com:7050 --channelID mychannel --name private --version 1.0 --sequence 11 --tls --cafile $ORDERER_TLSCA --collections-config $CC_COLL_CONFIG --peerAddresses peer0.org1.xxx.com:7051 --tlsRootCertFiles ${PWD}/config/crypto-config/peerOrganizations/org1.xxx.com/peers/peer0.org1.xxx.com/tls/ca.crt --peerAddresses peer0.org2.xxx.com:7051 --tlsRootCertFiles ${PWD}/config/crypto-config/peerOrganizations/org2.xxx.com/peers/peer0.org2.xxx.com/tls/ca.crt --peerAddresses peer0.org3.xxx.com:7051 --tlsRootCertFiles ${PWD}/config/crypto-config/peerOrganizations/org3.xxx.com/peers/peer0.org3.xxx.com/tls/ca.crt

step7. 通過以上參數的設置好后,調用合約的命令就會非常簡潔

peer chaincode invoke -o orderer.xxx.com:7050 --tls --cafile KaTeX parse error: Can't use function '\"' in math mode at position 84: … --transient "{\?"?asset_propertie…private_create"}"

step8. 實例化chaincode時需要指定定義的json文件

注意–collections-config參數
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n marblesp -v 1.0 -c ‘{“Args”:[“init”]}’ -P “OR(‘Org1MSP.member’,‘Org2MSP.member’)” --collections-config $GOPATH/src/github.com/chaincode/marbles02_private/collections_config.json

3.2. 鏈碼相關操作

step1. 初始化私有數據,不是執行init而是執行invoke的initMarble

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marblesp -c ‘{“Args”:[“initMarble”,“marble1”,“blue”,“35”,“tom”,“99”]}’

step2.在org1上查詢私有數據

eg.
peer chaincode query -C mychannel -n marblesp -c ‘{“Args”:[“readMarble”,“marble1”]}’

結果
{“color”:“blue”,“docType”:“marble”,“name”:“marble1”,“owner”:“tom”,“size”:35}

eg2.
peer chaincode query -C mychannel -n marblesp -c ‘{“Args”:[“readMarblePrivateDetails”,“marble1”]}’
結果
{“docType”:“marblePrivateDetails”,“name”:“marble1”,“price”:99}

step3. 在org2上查詢私有數據

eg1.
peer chaincode query -C mychannel -n marblesp -c ‘{“Args”:[“readMarble”,“marble1”]}’

結果
{“docType”:“marble”,“name”:“marble1”,“color”:“blue”,“size”:35,“owner”:“tom”}

eg2.
peer chaincode query -C mychannel -n marblesp -c ‘{“Args”:[“readMarblePrivateDetails”,“marble1”]}’

{“Error”:“Failed to get private details for marble1: GET_STATE failed:
transaction ID: b04adebbf165ddc90b4ab897171e1daa7d360079ac18e65fa15d84ddfebfae90:
Private data matching public hash version is not available. Public hash
version = &version.Height{BlockNum:0x6, TxNum:0x0}, Private data version =
(*version.Height)(nil)”}"

step4. 刪除數據

私有數據可以復制到離線數據庫中,同時,可以通過blockToLive這個屬性指定產生幾個塊以后,刪除私有數據,在鏈上只保存hash值。當數據被刪除的時候,再查詢數據時,會發生下面的錯誤

Error: endorsement failure during query. response: status:500
message:"{“Error”:“Marble private details does not exist: marble1”}"

總結

以上是生活随笔為你收集整理的Hyperledger Fabric 私有数据(2)操作流程的全部內容,希望文章能夠幫你解決所遇到的問題。

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