hyperledger fabric private data

Fabric-02Peer、Orderer以及CA 五、Peer 5.1Fabric Peer 特点 联盟链中,peer节点代表各个企业和组织。 区块链网络主要是由一系列peer节点组成,peer节点是整个区块链网络的基础,因为它是账本和智能合约的载体,通过智能合约,账本以不可篡改的方式记录了交易的全过程; 每个节点可以加入一个或多个channel; 每个channel维护自己的一个或多个账本,账本之间是隔离的; 每个peer可以安装不同的智能合约; 交易完成后,peer会发送event事件给client端; 每个channel都有local MSP,提 阅读详情

关于

简要记录hyperledger fabric私有数据的实验,参照官方文档https://hyperledger-fabric.readthedocs.io完成。

实验环境

  • Ubuntu18.04
  • fabric版本:1.2.0
  • docker版本:18.06
  • docker-compose版本:1.23.0
  • go版本:1.10.3

实现

tonasy@tonasy-Inspiron-3542:~/hyperledger-fabric/fabric-samples/first-network$ docker exec -it cli bash

安装链码,当前是默认的peer0.org1

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
2019-01-07 02:22:24.260 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-01-07 02:22:24.260 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-01-07 02:22:24.568 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

peer1.org1安装链码

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_ADDRESS=peer1.org1.example.com:7051

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
2019-01-07 02:28:36.952 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-01-07 02:28:36.952 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-01-07 02:28:37.100 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

peer0.org2安装链码

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_LOCALMSPID=Org2MSP

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export PEER0_ORG2_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_ADDRESS=peer0.org2.example.com:7051

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
2019-01-07 02:36:20.219 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-01-07 02:36:20.219 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-01-07 02:36:20.372 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

peer1.org2安装链码

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_ADDRESS=peer1.org2.example.com:7051

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
2019-01-07 02:37:10.941 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-01-07 02:37:10.941 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-01-07 02:37:11.094 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" > 

实例化链码,用到了collections_config.json

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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
2019-01-07 02:52:12.881 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-01-07 02:52:12.881 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc

存储私有数据(“marble1”,“blue”,“35”,“tom”,“99”)

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_ADDRESS=peer0.org1.example.com:7051

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_LOCALMSPID=Org1MSP

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export PEER0_ORG1_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

拼写错误。。。

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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"]}'
Error: error getting broadcast client: failed to load config for OrdererClient: unable to load orderer.tls.rootcert.file: open : no such file or directory

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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"]}'
2019-01-07 03:16:48.177 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 

peer0.org1查询私有数据,拼写错误。。。

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C channel -n marblesp -c '{"Args":["readMarble","marble1"]}'
Error: error endorsing query: rpc error: code = Unknown desc = access denied: channel [channel] creator org [Org1MSP] - proposal response: <nil>

readMarble,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
{"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}

readMarblePrivateDetails,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
{"docType":"marblePrivateDetails","name":"marble1","price":99}

切换到peer0.org2,查询私有数据

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_ADDRESS=peer0.org2.example.com:7051

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_LOCALMSPID=Org2MSP

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export PEER0_ORG2_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

查询一般数据,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
{"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}

查询“price”,失败

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
Error: endorsement failure during query. response: status:500 message:"{\"Error\":\"Failed to get private details for marble1: GET_STATE failed: transaction ID: 24272685f4611dee28f9967c39505fd3e4d384d6ce634f23ca2731e2c893c08f: Private data matching public hash version is not available. Public hash version = &version.Height{BlockNum:0x6, TxNum:0x0}, Private data version = (*version.Height)(nil)\"}" 

切换到peer0.org1,purge私有数据

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_ADDRESS=peer0.org1.example.com:7051

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_LOCALMSPID=Org1MSP

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# export PEER0_ORG1_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

查询marble1 price,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
{"docType":"marblePrivateDetails","name":"marble1","price":99}

Create a new marble2,相当于添加了一个block7

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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","marble2","blue","35","tom","99"]}'
2019-01-07 08:01:34.878 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 

查询marble1 price,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
{"docType":"marblePrivateDetails","name":"marble1","price":99}

transfer marble2,相当于添加了一个block8

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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":["transferMarble","marble2","joe"]}'
2019-01-07 08:02:48.413 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 

查询marble1 price,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
{"docType":"marblePrivateDetails","name":"marble1","price":99}

transfer marble2,相当于添加了一个block9

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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":["transferMarble","marble2","tom"]}'
2019-01-07 08:03:43.479 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 

查询marble1 price,成功

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
{"docType":"marblePrivateDetails","name":"marble1","price":99}

transfer marble2,相当于添加了一个block10

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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":["transferMarble","marble2","jerry"]}'
2019-01-07 08:05:14.294 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 

查询marble1 price,失败

root@5cff955cf849:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
Error: endorsement failure during query. response: status:500 message:"{\"Error\":\"Marble private details does not exist: marble1\"}" 

purge 私有数据的logs如下(新开一个终端):

(first time)
tonasy@tonasy-Inspiron-3542:~$ docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
2019-01-07 01:53:25.651 UTC [kvledger] CommitWithPvtData -> INFO 02c Channel [mychannel]: Committed block [0] with 1 transaction(s)
2019-01-07 01:53:25.651 UTC [pvtdatastorage] func1 -> INFO 02d Purger started: Purging expired private data till block number [0]
2019-01-07 01:53:25.651 UTC [pvtdatastorage] func1 -> INFO 02e Purger finished
2019-01-07 01:53:43.113 UTC [kvledger] CommitWithPvtData -> INFO 03b Channel [mychannel]: Committed block [1] with 1 transaction(s)
2019-01-07 01:53:46.001 UTC [kvledger] CommitWithPvtData -> INFO 03f Channel [mychannel]: Committed block [2] with 1 transaction(s)
2019-01-07 01:54:43.716 UTC [kvledger] CommitWithPvtData -> INFO 04b Channel [mychannel]: Committed block [3] with 1 transaction(s)
2019-01-07 01:55:12.521 UTC [kvledger] CommitWithPvtData -> INFO 04f Channel [mychannel]: Committed block [4] with 1 transaction(s)
2019-01-07 02:52:44.207 UTC [kvledger] CommitWithPvtData -> INFO 054 Channel [mychannel]: Committed block [5] with 1 transaction(s)
2019-01-07 03:16:50.964 UTC [kvledger] CommitWithPvtData -> INFO 058 Channel [mychannel]: Committed block [6] with 1 transaction(s)
2019-01-07 03:16:51.499 UTC [couchdb] CreateDatabaseIfNotExist -> INFO 059 Created state database mychannel_marblesp$$pcollection$marble$private$details
2019-01-07 03:16:51.971 UTC [couchdb] CreateDatabaseIfNotExist -> INFO 05a Created state database mychannel_marblesp$$hcollection$marble$private$details

(after add 4 block)
tonasy@tonasy-Inspiron-3542:~$ docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
2019-01-07 01:53:25.651 UTC [kvledger] CommitWithPvtData -> INFO 02c Channel [mychannel]: Committed block [0] with 1 transaction(s)
2019-01-07 01:53:25.651 UTC [pvtdatastorage] func1 -> INFO 02d Purger started: Purging expired private data till block number [0]
2019-01-07 01:53:25.651 UTC [pvtdatastorage] func1 -> INFO 02e Purger finished
2019-01-07 01:53:43.113 UTC [kvledger] CommitWithPvtData -> INFO 03b Channel [mychannel]: Committed block [1] with 1 transaction(s)
2019-01-07 01:53:46.001 UTC [kvledger] CommitWithPvtData -> INFO 03f Channel [mychannel]: Committed block [2] with 1 transaction(s)
2019-01-07 01:54:43.716 UTC [kvledger] CommitWithPvtData -> INFO 04b Channel [mychannel]: Committed block [3] with 1 transaction(s)
2019-01-07 01:55:12.521 UTC [kvledger] CommitWithPvtData -> INFO 04f Channel [mychannel]: Committed block [4] with 1 transaction(s)
2019-01-07 02:52:44.207 UTC [kvledger] CommitWithPvtData -> INFO 054 Channel [mychannel]: Committed block [5] with 1 transaction(s)
2019-01-07 03:16:50.964 UTC [kvledger] CommitWithPvtData -> INFO 058 Channel [mychannel]: Committed block [6] with 1 transaction(s)
2019-01-07 03:16:51.499 UTC [couchdb] CreateDatabaseIfNotExist -> INFO 059 Created state database mychannel_marblesp$$pcollection$marble$private$details
2019-01-07 03:16:51.971 UTC [couchdb] CreateDatabaseIfNotExist -> INFO 05a Created state database mychannel_marblesp$$hcollection$marble$private$details
2019-01-07 08:01:37.412 UTC [kvledger] CommitWithPvtData -> INFO 05c Channel [mychannel]: Committed block [7] with 1 transaction(s)
2019-01-07 08:02:50.902 UTC [kvledger] CommitWithPvtData -> INFO 05d Channel [mychannel]: Committed block [8] with 1 transaction(s)
2019-01-07 08:03:45.902 UTC [kvledger] CommitWithPvtData -> INFO 05e Channel [mychannel]: Committed block [9] with 1 transaction(s)
2019-01-07 08:05:16.868 UTC [kvledger] CommitWithPvtData -> INFO 05f Channel [mychannel]: Committed block [10] with 1 transaction(s)
《Fabric 的精简版白皮书》解读 Hyperledger Fabric 白皮书 这个可谓是精简版的白皮书,没有技术细节,但是让我们能够对 Fabric 有一个概念。 Fabric 是企业级的区块链(分布式账本技术 DLT)的开发平台,有很好的模块化的设计,可以通过插拔的方式引入不同的功能,包括共识机制、隐私机制以及成员服务。 “网络的网络” 是 Fabric 要实现的目标,但是兼顾隐私性,Fabric 使用 “channels” 的机制来在不同的网络参与者之间共享信息,所有的信息在这个 channel 中的参与者都能看到,但是也可以通过 “ 阅读详情

相关推荐

在windows环境下打包fabric2.2智能合约

1、配置环境变量 下载二进制文件 https://github.com/hyperledger/fabric/releases/download/v2.2.1/hyperledger-fabric-windows-amd64-2.2.1.tar.gz 解压后获得: D:\soft\hyperledger-fabric-windows-amd64-2.2.0\bin D:\soft\hyperledger-fabric-windows-amd64-2.2.0\config 配置环境变量,将D:\s

关于代码的那些事 4488

Fabric在尝试使用应用程序调用时出现:UNKNOWN: access denied: channel [mychannel] creator org [Org1MSP]

出现情况 按照fabric的官方文档运行“资产转移”的go的应用程序时出现UNKNOWN: access denied: channel [mychannel] creator org [Org1MSP]错误。 解决方法 打开go应用程序可以看到有keystore 、wallet两个文件夹,如下图。将这两个文件夹删除之后再重新运行应用程序,就可以解决问题。 问题原因 之前可能运行过一次应用程序,然后会生成这两个文件夹。之后又执行命令./network.sh down,并且重新搭建网络。这就导致报错。 具体

weixin_44211343的博客 2376

从零开发企业级联盟链:Hyperledger Fabric与数据权限实战

本文介绍了如何从零开始使用构建企业级联盟链,重点关注了数据权限管理的设计与实现。通过联盟链的去中心化特点,可以解决传统企业系统中的信任和数据共享问题。同时,通过智能合约、Channel、ACLs等机制,可以实现精细化的权限控制和数据隐私保护。未来,随着区块链技术在更多行业中的应用,将继续作为构建企业级联盟链的有力工具,帮助企业实现更高效、安全的数字化转型。在企业跨组织协作、供应链管理、金融行业等领域,区块链与数据权限的结合将发挥重要作用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 780

Fabric中的私有数据

这是官网提供的一个集合定义,一般配置在connection_config.json中[{"name""policy"0,3,1000000,true},{"name""policy"0,3,3,true}]name集合的名称。policy定义了哪些组织中的Peer节点能够存储集合数据。私有数据要分发到的节点数,这是链码背书成功的条件之一。为了数据冗余,当前背书节点将尝试向其他节点分发数据的数量。个区块,之后就会被清除。如果要永久保留,将此值设置为0即可。...

仙女的博客 3165

微信Dat文件转图片(文末含工具下载)

PC端微信dat图片转换为jpg格式

weixin_40704848的博客 8086

从零实现地震波场模拟:交错网格有限差分法核心代码精讲

本文详细介绍了从零实现地震波场模拟的核心技术,重点讲解了交错网格有限差分法的实现过程。通过速度-应力弹性波方程的离散化处理,结合代码实例演示了应力与速度更新的关键步骤,并分享了震源加载、稳定性条件等实用技巧,为计算地球物理学研究提供实践指导。

weixin_42556197的博客 410

fabric示例合约 Private data

1.什么是私有数据? 一个通道网络中会有很多机构,有一些数据是只能属于其中的某一个或者某几个机构可见,或者可以操作的 这些数据就被称为私有数据,私有数据是被存在peer节点上的 peer上会有一个私有数据库来存储私有数据 上图为一个简化的通道网络,通道中有OGR1和ORG2两个机构 ORG1有peer0节点 ORG2有peer1节点,其中peer0节点是授权了可以使用私有数据的 peer1节点是未被授权的 注:私有数据同时也会保存在Channel State中,但是是以存储,key和value的hash来

aitutou的博客 4423

KEPServerEX实战:Modbus TCP与RTU双协议配置详解

本文详细解析了如何使用KEPServerEX软件同时配置与管理Modbus TCP和RTU混合网络。通过实战步骤,指导用户建立双协议通道、配置设备与标签,并分享核心的地址映射规则与通讯故障排查技巧,帮助工业自动化工程师高效集成多协议设备,简化数据采集架构。

weixin_29186249的博客 397

m1 mac docker build 报错 rpc error: code = Unknown desc = failed to solve with frontend dockerfile

m1 mac docker build 报错 rpc error: code = Unknown desc = failed to solve with frontend dockerfile

hyh294673057的博客 3383

ISCE2+MintPy环境搭建实战:用Anaconda五分钟搞定InSAR处理全家桶

本文提供了一份详细的ISCE2+MintPy环境安装教程,旨在帮助InSAR处理初学者快速搭建开发环境。通过使用Anaconda创建虚拟环境并配置国内镜像,用户可在五分钟内一键安装ISCE2和MintPy全家桶,有效解决依赖冲突和版本兼容性问题,让用户能专注于数据处理本身。

2y3u4i5o6p的博客 1004

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 191

grpc错误处理

我们调用 gRPC 调用时,客户端会收到带有成功状态的响应或带有相应错误状态的错误。 客户端应用程序需要以能够处理所有潜在错误和错误条件的方式编写。 服务器应用程序要求您处理错误并生成具有相应状态代码的适当错误。

liuyuede123的博客 2986

USB 基础学习:USB 电气信号介绍

USB电气信号技术解析 USB通信的核心是差分信号传输技术,通过D+和D-两根线传输相位相反的电压信号实现数据通信。USB信号系统包含三类关键信号:差分数据信号(抗干扰性强)、单端状态信号(用于设备识别)和电源信号(提供5V供电)。USB2.0采用400mV电压摆幅和NRZI编码,支持低速(1.5Mbps)至高速(480Mbps)传输;USB3.0则新增专用差分对,数据速率可达20Gbps。物理层通过上拉/下拉电阻检测设备连接,高速模式需特殊握手协议。抗干扰设计的关键在于保持差分线等长、阻抗匹配和使用共模扼

浩瀚之水的专栏 1783

hyperledger fabric private data入门

fabric private data利用SideDB来保存私有数据,相当于在通道之上又提供了一层更细粒度的数据隐私保护机制。本文将介绍fabric private data的引入目的、基本概念与应用场景。 如果要快速掌握hyperledger fabric区块链的开发,推荐汇智网的在线互动实战教程: Hyperledger Fabric 区块链开发详解 Hyperledger Fabric ...

weixin_33937778的博客 211

区块链技术概述:从比特币到Web3.0

区块链技术正重塑数字世界的信任机制。本文系统梳理了区块链的发展路径:从比特币的PoW共识和UTXO模型,到以太坊的智能合约和账户体系,直至Web3.0的去中心化互联网愿景。文章详细解析了区块链的核心特性(去中心化、不可篡改等)和数据结构,通过流程图展示了比特币交易生命周期和智能合约执行流程,并对比了Web2.0与Web3.0的关键差异。最后,用Python代码实现了包含区块类、交易处理和挖矿机制的简易区块链系统,为理解区块链底层原理提供了实践参考。

闲人编程的博客 456

Veritas NetBackup8.1.1客户端安装

1.在客户机打开安装包运行Browser 2.选择NetBackup Client Software Installation 3.下一步 4.接受,下一步 5.我选择自定义安装,下一步 6.我选择安装到D盘 7.默认下一步 8.使用域管理账户 9.输入服务器安装了服务端的那一台名称 10.输入服务端生成的令牌,选择“I recognize the fingerprint for this host.Proceed with the certificate deploymen”下一步

万物皆可学 2万+

Hyperledger Fabric Private data

隐私数据集两种解决方案private data collection交易流程清除私有数据参考文档 两种解决方案 通道上有几个组织,如果某些组织想要做一些事,这些事只能他们知道,对通道上的其它组织保密,那么一个直接的做法是创建一个新的通道,只让具有隐私数据访问权的组织加入,但建立单独的通道会产生额外的管理开销。 另一种办法就是使用 Private Data Collections private data collection 一个 Collection 包括两部分: 私有数据本身:通过gossip协议在有

TBBetter的博客 439

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Fabric Hyperledger之隐私数据(Private data)

何为隐私数据?   如果某个通道上的某些组织想要保持数据的隐私,对通道上的其它组织保密,那么一个直接的做法是创建一个新的通道,只让具有隐私数据访问权的组织加入,然而建立单独的通道会产生额外的管理开销(维护链码版本,背书策略,MSP等。   从Fabric v1.2开始,Fabric可以创建私有数据集合,从而使通道上已定义的组织子集能够背书、提交或查询私有数据,而无需创建单独的通道。 隐私数据集合(...

weixin_43839871的博客 3703

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hyperledger Fabric 2.0 Chaincode Private Data Sample的一次pr

文章目录什么是私有数据?图文步骤做的过程中遇到了什么问题?总结参考: 什么是私有数据? 如果一个通道上的一组组织需要对该通道上的其他组织保持数据私有,则可以选择创建一个新通道,其中只包含需要访问数据的组织。但是,在每种情况下创建单独的通道会产生额外的管理开销(维护链码版本、策略、MSP等),并且不能在保留一部分数据私有的同时,可以让所有通道参与者看到该事务。 这就是为什么从v1.2开始,Fabric 提供了创建私有数据集合的功能,它允许在通道上定义的组织子集能够背书、提交或查询私有数据,而无需创建单独的通道

oe1019的专栏 318

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Hyperledger fabric 2.0(文档7.4 Using Private Data in Fabric)

写在前面:7.4是利用marbles02_private为例子进行的,本小节是关于查看数据的权限问题。比如在商业贸易中,价格是一个很私密的东西,所以只有指定人员/组织才能看到价格。 1、JSON & chaincode APIs 数据格式采用的是json 2、Start the network ①首先确保没有再进行的 cd fabric-samples/test-network ./network.sh down ② cd ../chaincode/marbles02_private/go

zzzbeauty的博客 329

Fabric Hyperledger(2.0 )之隐私数据(Private data)

前言   自Fabric1.2版本提出了隐私数据,后续版本官方不断进行完善,此篇文章主要针对fabric2.0版本介绍隐私数据。   1.4.x版本:Fabric Hyperledger之隐私数据(Private data) 隐私数据交易过程   客户端提交提案: 客户端提交提案给背书节点(隐私集合授权的组织节点)注:私有数据通过proposal中的transient字段发送给背书节点   模拟交易执行: 背书节点模拟交易执行,过程中会将隐私数据存储在transient data store(Peer节点的

weixin_43839871的博客 1803

【Hyperledger Fabric 学习】私有数据(Key Concepts: Private data)

Hyperledger Fabric英文文档学习

qq_39681297的博客 1134

Fabric private data入门实战

Hyperledger Fabric private data是1.2版本引入的新特性,fabric private data是利用旁支数据库(SideDB)来保存若干个通道成员之间的私有数据,从而在通道之上又提供了一层更灵活的数据保护机制。本文将介绍如何在链码开发中使用fabric private data。 如果要快速掌握hyperledger fabric区块链的开发,推荐汇智网的在线互动...

mongo_node的专栏 218

Hyperledger Fabric官网文档翻译(21) Key Concepts - Private data

1

yzpbright的博客 302

Hyperledger Fabric v1.4(LTS) 系列(3.11):关键概念-Private data

Key Concepts-Private data Introduction Hyperledger Fabric Functionalities Hyperledger Fabric Model Blockchain network Identity Membership Peers Smart Contracts and Chaincode Ledger The Ordering Servi...

IT鼹鼠 584

Hyperledger Fabric 1.3 官方文档翻译(三)关键概念 (Key Concepts) - 3.8 私有数据 (Private data)

私有数据(Private data) 什么是私有数据(What is private data)? In cases where a group of organizations on a channel need to keep data private from other organizations on that channel, they have the option to creat...

hugowang的博客 1878
上一篇: LintCode-3(统计数字)
下一篇: LintCode-6(合并排序数组)
tonasy
博客等级 码龄11年 58粉丝 35原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值