在 Fabric 中使用私有数据
在 Fabric 中使用私有数据
本教程将带你练习在 Fabric 中定义、配置和使用私有数据。
关于私有数据的更多信息请参阅 私有数据 。
官方教程参考:https://hyperledger-fabric.readthedocs.io/zh_CN/release-1.4/private_data_tutorial.html
下边的图片阐明了弹珠私有数据示例所使用的私有数据模型。
收集器的 JSON 定义文件:
在通道中数据私有化的第一步是创建一个定义了私有数据权限的收集器。
收集器定义描述了谁可以持有数据、数据要分发到多少个节点上、多少节点可以传播私有数据 和私有数据要在私有数据库中存放多久。然后,我们将演示链码 API PutPrivateData 和 GetPrivateData 是如何将收集器映射到受保护的私有数据的。
收集器的定义包括一下属性:
- name: 收集器的名字。
- policy: 定义了可以持有数据收集器的组织节点。
- requiredPeerCount: 作为链码的背书条件,需要将私有数据传播到的节点数量。
- maxPeerCount: 为了数据冗余,现有背书节点需要尝试将数据分发到其他节点的数量。如果背书节点发生故障,当有请求提取私有数据时,则其他节点在提交时可用。
- blockToLive: 对于非常敏感的信息,比如价格或者个人信息,这个值表示在数据要以区块的形式在私有数据库中存放的时间。数据将在私有数据库中存在指定数量的区块数然后会被清除, 也就是数据会从网络中废弃。要永久保存私有数据,永远不被清除,就设置 blockToLive 为 0
- memberOnlyRead: 值为 true 则表示节点会自动强制只有属于收集器成员组织的客户端才有读取私有数据的权限。
为了说明私有数据的用法,弹珠私有数据示例包含了两个私有数据收集器的定义: collectionMarbles 和 collectionMarblePrivateDetails 。在 collectionMarbles 中的 policy 属性定义了允许通道中(Org1 和 Org2)所有成员使用私有数据库中的私有数据。 collectionMarblePrivateDetails 收集器只允许 Org1 的成员使用私有数据库中的私有数据。
创建策略定义的更多信息请参考 背书策略 主题。
// collections_config.json[{"name": "collectionMarbles", //收集器的名字"policy": "OR('Org1MSP.member', 'Org2MSP.member')", //定义了可以持有数据收集器的组织节点"requiredPeerCount": 0, // 作为链码的背书条件,需要将私有数据传播到的节点数量"maxPeerCount": 3, //为了数据冗余,现有背书节点需要尝试将数据分发到其他节点的数量"blockToLive":1000000, //表示在数据要以区块的形式在私有数据库中存放的时间,数据将在私有数据库中存在指定数量的区块数然后会被清除"memberOnlyRead": true //值为true则表示节点会自动强制只有属于收集器成员组织的客户端才有读取私有数据的权限},{"name": "collectionMarblePrivateDetails","policy": "OR('Org1MSP.member')","requiredPeerCount": 0,"maxPeerCount": 3,"blockToLive":3, //表示在数据要从其生成开始,网络中增加3个区块后就被删除"memberOnlyRead": true}
]
总结一下,上边我们为 collection.json 定义的策略允许 Org1 和 Org2 的所有节点在他们的私有数据库中存储和交易弹珠的私有数据 name, color, size, owner 。 但是只有 Org1 的节点可以在他的私有数据库中存储和交易 price 私有数据。
数据私有的一个额外的好处是,当使用了收集器以后,只有私有数据的哈希会通过排序节点, 而不是私有数据本身,从排序方面保证了私有数据的机密性。
具体操作开始:
1、安装fabric 1.4.0
参考教程:https://blog.csdn.net/glclh/article/details/108184471
2、修改docker-compose-cli.yaml文件(与官方教程最大的不同)
每个客户端每次只能操作一个peer节点,如果更改客户端连接的peer节点,必须同时更改相应的环境变量,否则客户端无法与其所连接的peer节点通信。
peer0.org1.example.com 对应cli客户端
peer1.org1.example.com 对应cli11客户端
peer0.org2.example.com 对应cli02客户端
peer1.org2.example.com 对应cli12客户端
在docker-compose-cli.yaml文件末尾添加以下内容:cli11:container_name: cli11image: hyperledger/fabric-tools:$IMAGE_TAG#是否存在终端tty: true#是否使用终端标准输入stdin_open: trueenvironment:#客户端容器启动后,go的工作目录- GOPATH=/opt/gopath#容器启动后,对应的守护进程的本地套接字- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock#日志级别#- FABRIC_LOGGING_SPEC=DEBUG- FABRIC_LOGGING_SPEC=INFO#当前客户端节点的ID- CORE_PEER_ID=cli11#客户端当前连接的peer节点- CORE_PEER_ADDRESS=peer1.org1.example.com:7051#客户端连接的peer节点所属组织的ID- CORE_PEER_LOCALMSPID=Org1MSP#通信是否使用tls加密- CORE_PEER_TLS_ENABLED=true#客户端连接的peer节点的三个文件#证书文件- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt#私钥文件- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key#根证书文件- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt#当前客户端的身份文件,指定客户端的身份- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp#客户端的工作目录 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: /bin/bash#卷的挂载volumes:#本地目录:映射(挂载)的远程目录- /var/run/:/host/var/run/- ./../chaincode/:/opt/gopath/src/github.com/chaincode- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts#启动当前服务之前需启动的服务depends_on:- orderer.example.com- peer0.org1.example.com- peer1.org1.example.com- peer0.org2.example.com- peer1.org2.example.com#客户端所属网络networks:- byfncli02:container_name: cli02image: hyperledger/fabric-tools:$IMAGE_TAGtty: truestdin_open: trueenvironment:- GOPATH=/opt/gopath- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock#- FABRIC_LOGGING_SPEC=DEBUG- FABRIC_LOGGING_SPEC=INFO- CORE_PEER_ID=cli02- CORE_PEER_ADDRESS=peer0.org2.example.com:7051- CORE_PEER_LOCALMSPID=Org2MSP- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: /bin/bashvolumes:- /var/run/:/host/var/run/- ./../chaincode/:/opt/gopath/src/github.com/chaincode- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifactsdepends_on:- orderer.example.com- peer0.org1.example.com- peer1.org1.example.com- peer0.org2.example.com- peer1.org2.example.comnetworks:- byfncli12:container_name: cli12image: hyperledger/fabric-tools:$IMAGE_TAGtty: truestdin_open: trueenvironment:- GOPATH=/opt/gopath- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock#- FABRIC_LOGGING_SPEC=DEBUG- FABRIC_LOGGING_SPEC=INFO- CORE_PEER_ID=cli12- CORE_PEER_ADDRESS=peer1.org2.example.com:7051- CORE_PEER_LOCALMSPID=Org2MSP- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: /bin/bashvolumes:- /var/run/:/host/var/run/- ./../chaincode/:/opt/gopath/src/github.com/chaincode- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifactsdepends_on:- orderer.example.com- peer0.org1.example.com- peer1.org1.example.com- peer0.org2.example.com- peer1.org2.example.comnetworks:- byfn
3、启动网络
在安装和初始化弹珠私有数据链码之前,我们需要启动 BYFN 网络。下边的命令会关闭所有活动状态的或者存在的 docker 容 器并删除之前生成的构件。让我们运行下边的命令来清理之前的环境:
cd ~/go/src/github.com/hyperledger/fabric-samples/first-network
./byfn.sh down
如果你之前运行过本教程,你需要删除弹珠私有数据链码的 docker 容器。让我们运行下边 的命令清理之前的环境:
docker rm -f $(docker ps -a | awk '($2 ~ /dev-peer.*.marblesp.*/) {print $1}')
docker rmi -f $(docker images | awk '($1 ~ /dev-peer.*.marblesp.*/) {print $3}')
运行下边的命令来启动使用了 CouchDB 的 BYFN 网络:
详细参数可通过./byfn.sh help查看相关命令
./byfn.sh up -c mychannel -s couchdb
这会创建一个简单的 Fabric 网络,包含一个名为 mychannel 的通道,其中有两个组织 (每个组织有两个 peer 节点)和一个排序服务,还有四个客户端(cli, cli11, cli02, cli12),每个peer节点对应一个客户端,同时使用 CouchDB 作为状态数据库。LevelDB 或者 CouchDB 都可以使用收集器。这里使用 CouchDB 来演示。
4、安装和初始化带有收集器的链码
客户端应用通过链码和区块链账本交互。所以我们需要在每一个要执行和背书交易的节点上安装和初始化链码。链码安装在节点上然后在通道上使用 peer-commands 进行初始化。
4.1 在所有节点上安装链码
BYFN 网络包含两个组织, Org1 和 Org2 ,每个组织有两个节点。所以链码需要安装在四个节点上:
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
进入 CLI 容器:
docker exec -it cli bash
你的终端会变成类似这样的:
root@81eac8493633:/opt/gopath/src/github.com/hyperledger/fabric/peer#
- 使用下边的命令在 BYFN 网络上,安装弹珠链码到节点
peer0.org1.example.com
(默认情况下,启动 BYFN 网络以后,激活的节点被设置成了CORE_PEER_ADDRESS=peer0.org1.example.com:7051
):
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
当完成之后,你会看到类似输出:
install -> INFO 003 Installed remotely response:<status:200 payload:"OK"
2. 切换当前节点为 Org1 的第二个节点并安装链码。执行下边的命令:
退出cli容器
exit进入cli11容器
docker exec -it cli11 bash安装链码
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
果按照官方教程来操作,会报错(部分环境变量未修改),链码安装失败。类似的,官方教程后面的操作也会出现类似错误。本教程后面的操作就略过官方教程的操作,仅对本教程的操作进行阐述。
Error: error getting endorser client for install: endorser client failed to connect to peer1.org1.example.com:8051: failed to create new connection: context deadline exceeded
3. 给Org2的节点安装链码
退出之前的容器
exit进入cli02容器
docker exec -it cli02 bash安装链码
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/退出之前的容器
exit进入cli12容器
docker exec -it cli12 bash安装链码
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
参数说明:
- -n: 指定要安装的链码的名称
- -v: 指定链码的版本
- -p: 指定要安装的链码的所在路径
4.2 在通道上初始化链码
可以在任一cli容器中执行
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
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
参数说明:
-o: 指定Oderer服务节点地址
–tls: 开启 TLS 验证
–cafile: 指定 TLS_CA 证书的所在路径
-n: 指定要实例化的链码名称,必须与安装时指定的链码名称相同
-v: 指定要实例化的链码的版本号,必须与安装时指定的链码版本号相同
-C: 指定通道名称
-c: 实例化链码时指定的参数
-P: 指定背书策略
注解
当指定了 --collections-config 的时候,你需要指明 collections_config.json 文件完整清晰的路径。 例如: --collections-config $GOPATH/src/github.com/chaincode/marbles02_private/collections_config.json
当成功初始化完成的时候,你可能看到类似下边这些:
[chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
[chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
5、存储私有数据
以 Org1 成员的身份操作,Org1 的成员被授权可以交易弹珠私有数据示例中的所有私有数据,切换回 Org1 的节点并提交一个增加一个弹珠的请求:
退出之前的容器
exit进入cli容器
docker exec -it cli bash存储私有数据
export MARBLE=$(echo -n "{\"name\":\"marble1\",\"color\":\"blue\",\"size\":35,\"owner\":\"tom\",\"price\":99}" | base64 | tr -d \\n)
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"]}' --transient "{\"marble\":\"$MARBLE\"}"
调用 initMarble 函数来创建一个带有私有数据的弹珠 — 名字为 marble1 , 拥有者为 tom ,颜色为 blue ,尺寸为 35 ,价格为 99 。重申一下,私有数据 price 将会和私有数据 name, owner, color, size 分开存储。因为这个原因, initMarble 函数存储私有数据的时候调用两次 PutPrivateData() API ,每个收集器一次。同样要注意到,私有数据传输的时候使用了 --transient 标识。为了保证数据的隐私性,作为临时数据传递的输入不会保存在交易中(暂态数据)。临时数据以二进制的方式传输, 但是当使用 CLI 的时候,必须先进行 base64 编码。我们使用一个环境变量来获得 base64 编码的值。
你应该会看到类似下边的结果:
[chaincodeCmd] chaincodeInvokeOrQuery->INFO 001 Chaincode invoke successful. result: status:200
6、查询私有数据
我们收集器的定义允许 Org1 和 Org2 的所有成员在他们的侧数据库中使用 name, color, size, owner 私有数据,但是只有 Org1 的节点可以在他们的侧数据库中保存 price 私有数据。作为一个 Org1 中的授权节点,我们将查询两个私有数据集合。
6.1 以 Org1 成员的身份查询私有数据
以 Org1 成员的身份查询 marble1 的私有数据 name, color, size and owner 。
在cli容器中操作
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
你应该会看到如下结果:
{"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}
以 Org1 成员的身份查询 marble1
的私有数据 price
。
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
你应该会看到如下结果:
{"docType":"marblePrivateDetails","name":"marble1","price":99}
6.2 以 Org2成员的身份查询私有数据
退出之前的容器
exit进入cli02容器
docker exec -it cli02 bash
Org2 的节点在它们的数据库中有弹珠私有数据的第一个集合 ( name, color, size and owner
) 并且有权限使用 readMarble()
函数和 collectionMarbles
参数访问它。
查询 Org2 有权访问的私有数据:
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'你应该会看到类似下边的输出结果:
{"docType":"marble","name":"marble1","color":"blue","size":35,"owner":"tom"}
查询 Org2 没有权限的私有数据
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
在 Org2 的节点侧数据库中没有弹珠的私有数据 price
。当它们尝试查询这个数据的时候, 它们会得到符合公共状态键的哈希但是得不到私有数据。你应该会看到如下结果:
{"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)"}
Org2 的成员只能看到私有数据的公共哈希。
7、清除私有数据(暂态数据的演示)
对于一些案例,私有数据仅需在账本上保存到在链下数据库复制之后就可以了,我们可以将数据在过了一定数量的区块后进行 “清除”,仅仅把数据的哈希作为不可篡改的证据保存下来。
私有数据可能会包含私人的或者机密的信息,比如我们例子中的价格数据,这是交易伙伴不想 让通道中的其他组织知道的。但是,它具有有限的生命周期,就可以根据收集器定义中的,在固定的区块数量之后清除。
我们的 collectionMarblePrivateDetails 中定义 blockToLive 属性的值为 3 , 表明这个数据会在侧数据库中保存三个区块的时间,之后它就会被清除。将所有内容放在一 起,回想一下绑定了私有数据 price 的收集器 collectionMarblePrivateDetails , 在函数 initMarble() 中,当调用 PutPrivateData() API 并传递了参数 collectionMarblePrivateDetails 。
我们将从在链上增加区块,然后来通过执行四笔新交易(创建一个新弹珠,然后转移三个 弹珠)看一看价格信息被清除的过程,增加新交易的过程中会在链上增加四个新区块。在 第四笔交易完成之后(第三个弹珠转移后),我们将验证一下价格数据是否被清除了。
先进入cli容器:
退出之前的容器
exit进入cli容器
docker exec -it cli bash
打开一个新终端窗口,通过运行如下命令来查看这个节点上私有数据日志:
docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
你将看到类似下边的信息。注意列表中最高的区块号。在下边的例子中,当前最高的区块高度是 6
。
返回到节点容器,运行如下命令查询 marble1 的价格数据:
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
你将看到类似下边的信息:
{"docType":"marblePrivateDetails","name":"marble1","price":99}
price
数据仍然在私有数据账本上。
通过执行如下命令创建一个新的 marble2 。这个交易将在链上创建一个新区块。
export MARBLE=$(echo -n "{\"name\":\"marble2\",\"color\":\"blue\",\"size\":35,\"owner\":\"tom\",\"price\":99}" | base64 | tr -d \\n)
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"]}' --transient "{\"marble\":\"$MARBLE\"}"
再次切换回终端窗口并查看节点的私有数据日志。你将看到区块高度增加了 1 。
docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
返回到节点容器,再次运行如下命令查询 marble1 的价格数据:
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
私有数据没有被清除,之前的查询也没有改变查询结果:
{"docType":"marblePrivateDetails","name":"marble1","price":99}
运行下边的命令将 marble2 转移给 “joe” 。这个交易将使链上增加第二个区块。
export MARBLE_OWNER=$(echo -n "{\"name\":\"marble2\",\"owner\":\"joe\"}" | base64 | tr -d \\n)
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"]}' --transient "{\"marble_owner\":\"$MARBLE_OWNER\"}"
再次切换回终端窗口并查看节点的私有数据日志。你将看到区块高度增加了 1 。
docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
返回到节点容器,再次运行如下命令查询 marble1 的价格数据:
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
将看到价格私有数据。
{"docType":"marblePrivateDetails","name":"marble1","price":99}
运行下边的命令将 marble2 转移给 “tom” 。这个交易将使链上增加第三个区块。
export MARBLE_OWNER=$(echo -n "{\"name\":\"marble2\",\"owner\":\"tom\"}" | base64 | tr -d \\n)
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"]}' --transient "{\"marble_owner\":\"$MARBLE_OWNER\"}"
再次切换回终端窗口并查看节点的私有数据日志。你将看到区块高度增加了 1 。
docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
返回到节点容器,再次运行如下命令查询 marble1 的价格数据:
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
你将看到价格数据。
{"docType":"marblePrivateDetails","name":"marble1","price":99}
最后,运行下边的命令将 marble2 转移给 “jerry” 。这个交易将使链上增加第四个区块。在 此次交易之后, price
私有数据将会被清除。
export MARBLE_OWNER=$(echo -n "{\"name\":\"marble2\",\"owner\":\"jerry\"}" | base64 | tr -d \\n)
> 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"]}' --transient "{\"marble_owner\":\"$MARBLE_OWNER\"}"
再次切换回终端窗口并查看节点的私有数据日志。你将看到区块高度增加了 1 。
docker logs peer0.org1.example.com 2>&1 | grep -i -a -E 'private|pvt|privdata'
返回到节点容器,再次运行如下命令查询 marble1 的价格数据:
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\"}"
8、使用私有数据索引
索引也可以用于私有数据收集器,可以通过打包链码旁边的索引 META-INF/statedb/couchdb/collections/<collection_name>/indexes 来使用。有一个索引的例子在 这里 。
在生产环境下部署链码时,建议和链码一起定义索引,这样当链码在通道中的节点上安 装和初始化时就可以自动作为一个单元进行安装。当使用 --collections-config 标识 指定收集器 JSON 文件路径时,通道上链码初始化的时候相关的索引会自动被部署。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 开发十余年Android架构师教你如何突破瓶颈,达到年薪50W
三:如何系统化学习? 1.学习Android底层开发知识,掌握前言技术,紧跟潮流掌握人工智能的AI时代,突破native层瓶颈,如: 手写斗鱼视频直播 Opencv详解 QQ音视频通话核心 爱奇艺音视频实战 人工智能…...
2024/4/13 21:02:44 - 设计模式-C++
创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。 创建型模式 原理 单例模式 用来创建全局唯一的对象,一个类只允许创建一个对象(或者叫实例) 工厂模式 用来创建不同但是相关…...
2024/5/9 14:22:42 - Java8 Stream(三):StreamAPI
初始数据 Animal类 public class Animal{private String name;private String type;private Integer age;public String getName() {return name;}public void setName(String name) {this.name name;}public String getType() {return type;}public void setType(String ty…...
2024/5/9 19:06:18 - 进制转换+结构体
进制转换 二进制转十六进制 一个十六进制数等于四位二进制数,通过8421码进行计算 例: 结构体 结构体是不同类型的数据集合 结构体区别于c语言中的数组,c语言中的数组只能存储相同类型的数据,但和python中的数组类似,…...
2024/5/9 12:18:44 - Redis学习(八):Redis主从复制
目录 一、主从复制是什么 二、主从复制能干什么 1、读写分离,性能扩展 2、容灾快速恢复 三、复制原理 四、常用的三种策略 1、一主二仆 2、薪火相传 3、反客为主 五、哨兵模式 1、哨兵模式是什么 2、怎么设置哨兵 3、哨兵的作用:故障恢复 一…...
2024/4/27 8:20:44 - NC204382 中序序列
题目:中序序列 题解:中序序列题目题解_牛客竞赛OJ 首先,普通地知道 先序和后序 是 无法求 中序的,因为无法判断是左儿子还是右儿子; 但是题目里有条件:“若某节点只有一个子结点,则此处将其…...
2024/5/9 4:41:08 - Java中的集合(二)
2、Set接口 Set接口以散列形式存储数据,所以元素没有顺序,可以存储一组无序,唯一的对象; Set的常用子接口有HashSet、LinkedHashSet、TreeSet。 2.1HashSet HashSet存储一组无序,且唯一的对象,这里的无…...
2024/5/8 18:55:19 - 数组设置最大数
题目: 第一行有一个整数,表示数字个数 n。 第二行有n个整数,表示给出的n个整数 Aio 输出格式 一个正整数,表示最大的整数 输入输出样例 输入 #1 复制 输出 #1 复制 34331213 13 312 343 输入 #2 复制 输出 #2 复制 742461…...
2024/5/9 8:14:45 - 初入数据结构之二叉树详解
树 什么叫做树? 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社…...
2024/5/9 0:36:02 - Java8 Stream(二):Stream创建
三、Stream创建 Stream常见的有4中方法创建。 使用Collection下的 stream() 和 parallelStream() 方法 //1、使用Collection下的 stream() 和 parallelStream() 方法 // 创建一个顺序流 List<Integer> list Arrays.asList(1, 2, 3, 4, 5, 6); Stream<Integer>…...
2024/5/8 22:36:33 - 蓝桥杯STM32G431——测量两路PWM和占空比
测量两路PWM和占空比测量PWM频率和占空比的时序图与步骤时序图测量PWM频率和占空比的步骤:PWM输入模式内部原理图CubeMX的基础配置测量PWM频率和占空比的编程pwm_tim.c文件main.c主函数的编写测量PWM频率和占空比的时序图与步骤 时序图 测量PWM频率和占空比的步骤: 1.PWM信号…...
2024/5/8 13:23:31 - C/C++ typedef的理解 typedef void (*pfunc)(int);
C/C typedef的理解 typedef void (*pfunc)(int); 初学时: typedef int XXX,给类型int取一个别名xxx,嗯我懂了,EZ。 一段时间过后: typedef void (*pfunc)(int); ??&#…...
2024/5/8 14:39:08 - java文件转换成byte数组以及byte数组上传到文件
文件转换成byte数组 /*** 文件 File file new File("...");* param filePath* return*/public static byte[] File2byte(File filePath) {byte[] buffer null;try {FileInputStream fis new FileInputStream(filePath);ByteArrayOutputStream bos new ByteArrayO…...
2024/5/8 18:21:46 - 安全云盘需求分析(一)
最卡hi是有一个基础框架,要用到libevebtqt 下面是libevent技术栈相关以及延申内容...
2024/5/8 11:52:43 - Eclipse老是崩溃
eclipse老是崩溃,比如在ctrl点击接口实现时突然崩溃 解决:替换C:\Users\ice.eclipse目录为新的即可...
2024/5/8 21:14:56 - ctfhub密码口令---弱口令
解题思路 既知道为弱口令 那用户名一般为 admin/user之类 先尝试admin 密码进行爆破 对登录页面进行抓包 先清除所有标识把抓取到的数据密码进行标识(就是需要进行爆破的位置) 加入常用密码,进行爆破 爆破后对比数据长度,发现密码…...
2024/5/9 7:24:15 - LeetCode 42: 接雨水(困难)
LeetCode 42: 接雨水 解答 这个题需要好好分析一下,自己的思路离单调栈的标准答案就一步之遥了,就是没想出来,最近有点颓md, 代码一:单调栈 主要分析一下为什么自己的思路大体方向是正确的,但就是差最…...
2024/5/8 12:54:17 - Python爬虫学习笔记_DAY_15_Python爬虫之urllib库实战篇【Python爬虫】
p.s.高产量博主,点个关注💓不迷路! 目录 I.urllib库实战之GET请求:获取并下载电影平台指定页码的数据到本地 II.urllib库实战之POST请求:获取并下载餐饮实体店指定页码的店铺位置数据到本地 I.urllib库实战之GET请求…...
2024/5/8 17:03:26 - Android 项目总结(自定义view的Canvas位置形状变换)
/*** 变换操作*/ public class TransformView extends View {private Paint mPaint;public TransformView(Context context) {this(context, null);}public TransformView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public TransformView(Context conte…...
2024/5/9 4:01:03 - 【React】<JavaScript框架>事件处理高阶函数函数柯里化
目录 一、事件处理: 二、收集表单数据: 1.受控组件: 2.非受控组件: 三、高阶函数&函数的柯里化: 1.函数柯里化: 柯里化概述: 柯里化的应用: 2.不使用柯里化:…...
2024/5/9 7:06:54
最新文章
- 2.外卖点餐系统(Java项目 springboot)
目录 0.系统的受众说明 1.系统功能设计 2.系统结构设计 3.数据库设计 3.1实体ER图 3.2数据表 4.系统实现 4.1用户功能模块 4.2管理员功能模块 4.3商家功能模块 4.4用户前台功能模块 4.5骑手功能模块 5.相关说明 新鲜运行起来的项目:如需要源码数据库…...
2024/5/9 19:35:05 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 【C++】map set 底层刨析
文章目录 1. 红黑树的迭代器2. 改造红黑树3. map 的模拟实现4. set 的模拟实现 在 C STL 库中,map 与 set 的底层为红黑树,那么在不写冗余代码的情况下使用红黑树同时实现 map 与 set 便是本文的重点。 1. 红黑树的迭代器 迭代器的好处是可以方便遍历&…...
2024/5/6 12:06:01 - 金融数据_PySpark-3.0.3决策树(DecisionTreeClassifier)实例
金融数据_PySpark-3.0.3决策树(DecisionTreeClassifier)实例 逻辑回归: 逻辑回归常被用于二分类问题, 比如涨跌预测。你可以将涨跌标记为类别, 然后使用逻辑回归进行训练。 决策树和随机森林: 决策树和随机森林是用于分类问题的强大模型。它们能够处理非线性关系, 并且对于特…...
2024/5/9 14:21:41 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/9 15:10:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/9 7:32:17 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/9 17:11:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57