做网站页面代码,寿光做网站m0536,小程序制作的方法有哪些,aspcms手机网站怎么做书接前文
Fabric链码部署-go语言
通过上面这篇文章#xff0c;你可以部署好自己的链码
#xff08;后面很多命令是否需要修改#xff0c;都是根据上面这篇文章来的#xff0c;如果零基础的话建议先看上面这篇#xff09;
就进行下一步
在测试网络上运行自己的链码 目…书接前文
Fabric链码部署-go语言
通过上面这篇文章你可以部署好自己的链码
后面很多命令是否需要修改都是根据上面这篇文章来的如果零基础的话建议先看上面这篇
就进行下一步
在测试网络上运行自己的链码 目录
1、导航到test-network目录
1.1 打开日志Logspout可选
2、启动测试网络
3、测试网络的组成
4、创建一个通道
5、在通道上启动链码
6、与网络交互
6.1 配置对等CLI
6.2 运行Org1
6.2.1 设置环境变量
6.2.2 初始化账本
6.2.3 查询账本
6.2.4 修改账本
6.3 运行Org2 1、导航到test-network目录
打开终端窗口 直接cd
下面是我的路径的位置
cd ./go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network
你的可能不一样这里或许要微调
不过只要到这个目录就可以
1.1 打开日志Logspout可选
此步骤不是必需的但对于链码故障排除非常有用。
要监控智能合约的日志管理员可以使用logspout工具查看一组Docker容器的聚合输出。
该工具将来自不同 Docker 容器的输出流收集到一个位置从而可以轻松地从单个窗口查看发生的情况。
这可以帮助管理员在安装智能合约时或开发者调用智能合约时调试问题。
由于某些容器纯粹是为了启动智能合约而创建的并且只存在很短的时间因此从网络收集所有日志会很有帮助。
Logspout 工具将不断地将日志传输到的终端因此将需要使用新的终端窗口。
可以通过运行以下命令来启动 Logspout直接复制不需要改
./monitordocker.sh fabric_test
如果你启动失败可能是这个位置没有对应文件我上一篇博客里有提到怎么复制从哪复制建议参考
2、启动测试网络
可以在test-network 目录中找到用于启动网络的脚本。 如果你先前启动了网络建议先进行一下关闭先前网络的操作以免后面出一些预料之外的错误
方式为直接复制不需要改
./network.sh down 之后直接输入直接复制不需要改
./network.sh up
就开始启动网络了
你会看到类似这些内容的输出就说明成功了 从这里可以看到节点对应的端口信息后面会用到不过每次都是一样的知道在这里找就可以
3、测试网络的组成
部署测试网络后可以花一些时间检查其组件。
运行以下命令以列出计算机上运行的所有 Docker 容器。直接复制不需要改
docker ps -a
应该能看到由 network.sh 脚本创建的三个节点
测试网络包括两个对等组织Org1 和 Org2。
它还包括一个维护网络排序服务的单一排序节点组织。
网络中的每个对等点都需要属于一个组织。
在测试网络中每个组织各运行一个对等点peer0.org1.example.com 和peer0.org2.example.com
示例网络使用由排序节点组织运营的单节点 Raft 排序服务。
您可以看到在您的计算机上运行的排序节点为 orderer.example.com。 4、创建一个通道
现在我们的机器上运行了对等节点和排序节点我们可以使用脚本为 Org1 和 Org2 之间的事务创建 Fabric 通道。
运行以下命令创建一个默认名称为 mychannel 的通道直接复制不需要改
./network.sh createChannel
如果命令成功您可以在日志中看到以下消息 还可以使用通道标志来创建具有自定义名称的频道。
例如以下命令将创建一个名为channel1的通道
./network.sh createChannel -c channel1
通道标志还允许您通过指定不同的通道名称来创建多个通道。
创建mychannel或channel1后您可以使用以下命令创建第二个名为channel2的频道
./network.sh createChannel -c channel2
如果您想一步启动网络并直接创建通道您可以同时使用 up 和 createChannel 模式
./network.sh up createChannel 5、在通道上启动链码
通道启动之后
下一步就是启动自己的链码了
通过下面命令进行启动这里需要改
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/test-protocol-go -ccl go
deployCC是这个脚本中定义的一个命令或子命令它是用来在peer0.org1.example.com 和peer0.org2.example.com 上安部署链码的功能然后将链代码部署在使用通道标志指定的通道上如果未指定通道则部署在mychannel 上-ccn basic指定了链码的名称这里设置为basic这意味着你将要部署一个名为basic的链码。这个名称是官方示例里给的自己可以修改但是后面对应位置也要改-ccp ../asset-transfer-basic/test-protocol-go用于指定链码的路径../asset-transfer-basic/test-protocol-go是链码所在的目录路径。-ccl go指定链码的语言类型这里是go意味着使用的是 Go 编程语言编写的链码。
注意你需要修改的地方是链码的路径也就是-ccp之后的部分需要将路径修改成你的链码的存储位置
如果你不清楚应该如何提前部署己的链码看我上一篇文章开头有链接
成功后是这个样子 6、与网络交互
6.1 配置对等CLI
使用对等 CLI peer CLI与您的网络进行交互
对等 CLI 允许您从 CLI调用已部署的智能合约、更新通道或安装和部署新的智能合约。
使用以下命令将二进制文件添加到您的 CLI 路径直接复制不需要改
export PATH${PWD}/../bin:$PATH
export这个命令用于设置环境变量使得后续的命令可以在当前Shell会话中使用。PATH是一个环境变量它用于指定系统在哪些目录中查找可执行文件。当你在命令行中输入一个命令时系统会根据PATH的值在指定的目录中查找这个命令的可执行文件。${PWD}是一个变量表示当前工作目录的路径。../bin表示当前工作目录的上一级目录中的bin目录。..表示上一级目录bin则是一个通常用于存放可执行文件的目录。:$PATH表示将新设置的目录${PWD}/../bin添加到原始PATH变量中的值的末尾使用冒号分隔。
还需要将 FABRIC_CFG_PATH设置为指向 Fabric-samples 存储库中的 core.yaml 文件直接复制不需要改
export FABRIC_CFG_PATH$PWD/../config/
export这个命令用于设置环境变量使得后续的命令可以在当前Shell会话中使用。FABRIC_CFG_PATH是一个环境变量它用于指定Hyperledger Fabric配置文件的路径。$PWD是一个环境变量代表当前工作目录的路径。../config/表示当前工作目录的上一级目录中的config目录。..表示上一级目录config则是存放Fabric配置文件的目录。
core.yaml是Hyperledger Fabric节点的配置文件用于配置节点的各种参数和设置。这个文件包含了节点的基本配置信息影响着节点的行为、功能和性能。
在Fabric中每个节点如对等节点、排序节点等都有自己的core.yaml配置文件用于定义节点的特定设置。
6.2 运行Org1
6.2.1 设置环境变量
现在可以设置环境变量以允许您将对等 CLI 作为 Org1 进行操作直接复制不需要改
export CORE_PEER_TLS_ENABLEDtrue
export CORE_PEER_LOCALMSPIDOrg1MSP
export CORE_PEER_TLS_ROOTCERT_FILE${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH${PWD}/organizations/peerOrganizations/org1.example.com/users/Adminorg1.example.com/msp
export CORE_PEER_ADDRESSlocalhost:7051
CORE_PEER_TLS_ENABLEDtrue启用对等节点的TLS安全传输。这表示对等节点将使用安全的TLS协议进行通信。CORE_PEER_LOCALMSPIDOrg1MSP指定了对等节点所属的本地组织的MSP成员服务提供者ID。这里设置为Org1MSP表示该对等节点隶属于组织Org1。CORE_PEER_TLS_ROOTCERT_FILE${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt设置了对等节点TLS连接时使用的根证书文件路径。这个证书文件用于验证与对等节点通信的远程端的TLS证书的合法性。CORE_PEER_MSPCONFIGPATH${PWD}/organizations/peerOrganizations/org1.example.com/users/Adminorg1.example.com/msp指定了对等节点的MSP配置路径其中包含了与该对等节点关联的身份验证相关信息比如管理员身份的证书、私钥等。CORE_PEER_ADDRESSlocalhost:7051设置了对等节点的地址和端口号指明其他节点在本地主机localhost上的通信地址为7051端口。这是对等节点的gRPC通信地址其他节点可以使用这个地址与该节点进行通信。
6.2.2 初始化账本
运行以下命令初始化账本直接复制不需要改
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c {function:InitLedger,Args:[]}
更直观的表示为这里是方便你看的复制的话复制上面这个就可以
peer chaincode invoke \ # 调用链码命令-o localhost:7050 \ # 排序服务节点的地址和端口号--ordererTLSHostnameOverride orderer.example.com \ # 排序服务节点的TLS主机名--tls \ # 使用TLS连接--cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \ # 用于验证排序服务节点TLS证书的根证书文件路径-C mychannel \ # 指定链码所在的通道名称-n basic \ # 指定要调用的链码的名称--peerAddresses localhost:7051 \ # 要调用的对等节点的地址和端口号--tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt \ # 用于验证对等节点TLS证书的根证书文件路径--peerAddresses localhost:9051 \ # 另一个要调用的对等节点的地址和端口号--tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt \ # 用于验证另一个对等节点TLS证书的根证书文件路径-c {function:InitLedger,Args:[]} # 指定要调用的链码函数及其参数
最后一行调用了InitLedger函数这个在我们的链码里是有的
如果成功应该看到类似以下的输出
- INFO 001 Chaincode invoke successful. result: status:200
这条信息表示链码调用成功。status:200表示调用返回了一个 HTTP 200 状态码通常代表着成功的响应。这表明了链码函数的执行在区块链网络中被成功地触发并且成功完成了所需的操作。
6.2.3 查询账本
现在可以从 CLI 查询分类帐。
我的理解是查询不需要背书所以就一行很简单的代码但是修改需要背书就需要标出网络中的其余节点用以联系
运行以下命令以获取已添加到通道分类帐的资产列表直接复制不需要改前提是你的链码和我的一样上一篇博客
peer chaincode query -C mychannel -n basic -c {Args:[GetAllIdentities]}
peer chaincode query: 这部分指明了使用peer命令行工具并调用其中的chaincode query子命令用于执行链码的查询操作。-C mychannel: 指定了要执行查询的通道名称这里是mychannel。-n basic: 指定了要查询的链码的名称为basic。-c {Args:[GetAllIdentities]}: 这是指定了要调用的链码函数及其参数的部分。在这里调用了链码中的GetAllAssets函数它是一个查询函数用于获取所有资产的信息。
如果成功应该看到以下输出
6.2.4 修改账本
使用以下命令通过调用链码来更新现有的数据直接复制不需要改前提是你的链码和我的一样上一篇博客
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c {function:UpdateIdentity,Args:[identity4,P,S,V]}
上述语句的功能是修改id为identity4的数据
成功会返回下列输出
2023-12-12 09:07:59.485 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery - Chaincode invoke successful. result: status:200
我们再次输出全部数据看一下
peer chaincode query -C mychannel -n basic -c {Args:[GetAllIdentities]} 可以看到已经更改了
先前这些操作都是通过Org1进行的如果你想通过Org2进行通过下面的方式进入Org2
6.3 运行Org2
设置以下环境变量以运行Org2 直接复制不需要改
export CORE_PEER_TLS_ENABLEDtrue
export CORE_PEER_LOCALMSPIDOrg2MSP
export CORE_PEER_TLS_ROOTCERT_FILE${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH${PWD}/organizations/peerOrganizations/org2.example.com/users/Adminorg2.example.com/msp
export CORE_PEER_ADDRESSlocalhost:9051
设置好这些环境变量之后就ok了
后面直接调用函数就可以方式和6.2.2-6.2.4一样除了函数名和输入给函数的参数那一块需要自行更改之外其他的直接复制
7、关闭网络
链码里所有的函数都可以在刚刚通过Org1或者Org2进行测试
读者可以自己多试试
测试完之后就要关闭网络
注意如果你没有关闭网络下次再部署网络时会出现难以预料的错误
./network.sh down
通过上面这条语句就可以关闭网络
8、常见问题
我这里就说说我遇到的问题 8.1 connection refused
在第5步启动链码时如果是第一次启动链码会从GitHub下载一些依赖可能会出现connection refused问题
建议去配一下GitHub的SSH密钥连接就可以解决 8.2 不要sudo
上面的所有语句都不要加sudo
如果出现提示说权限不足先退到上级文件夹改一下这个文件夹的权限设置为最高就可以
就是那个777的命令去搜一下如何修改文件权限就能找到 我遇到的就这两个错误
其他的错误也有不过如果按照我上篇文章和这篇文章的步骤来的话应该是都可以避开的
这篇教程就到此结束
后面我继续肝一下官方文档里的CA部分如果搞明白了会继续出新教程
如果能帮到你的话顺手留个赞奥谢谢好心人/doge