fabric1.1 node-sdk实现AND多方背书策略
大概过程就是将背书节点添加到channel中,然后构造交易提案请求参数发送交易提案,然后构造交易请求参数,发送交易即可。
我这里在链码实例化的时候指定的背书策略为:AND('Org1MSP.member','Org2MSP.member')
org1中的peer0地址和端口为:192.168.89.131:7051
org2中的peer0地址和端口为:192.168.89.131:8051(下面就以这两个peer为背书节点编写node sdk)
'use strict';var co = require('co');
var path = require('path');
var fs = require('fs');
var util = require('util');
var hfc = require('fabric-client');
var Peer = require('fabric-client/lib/Peer.js');
var EventHub = require('fabric-client/lib/EventHub.js');
var User = require('fabric-client/lib/User.js');
var crypto = require('crypto');
var FabricCAService = require('fabric-ca-client');//定义证书文件的缓存目录,应该也可以用path.join(__dirname, 'fabric-client-kvs')
var tempdir = "/opt/gopath/src/github.com/hyperledger/fabric/scf/node-sdk/fabric-client-kvs"//创建客户端代理
var client = new hfc();//创建通道的客户端代理,被创建的通道名字为:mychannel
var channel = client.newChannel('mychannel');//创建orderer,该orderer运行的服务器地址为:192.168.89.131,创建成功后将该orderer加入到channel中
var order = client.newOrderer('grpc://192.168.89.131:7050');
channel.addOrderer(order);//创建peer1节点的客户端代理,该peer节点的IP地址为192.168.89.131(如果是运行在本机上,也可用localhost),端口号为:7051
var peer1 = client.newPeer('grpc://192.168.89.131:7051');
channel.addPeer(peer1);
//创建peer2节点的客户端代理,该peer节点的IP地址为192.168.89.131(如果是运行在本机上,也可用localhost),端口号为:8051
var peer2 = client.newPeer('grpc://192.168.89.131:8051');
channel.addPeer(peer2);
//上面将需要背书的peer1和peer2添加到了channel中,这样就可以实现AND多方背书策略co((function *(){let member = yield getOrgUser4Local();// 构造交易提案请求参数let tx_id = client.newTransactionID();var request = {chaincodeId: "example02cc",fcn: "invoke",args: ["a","b","1"],chainId: "mychannel",txId: tx_id};//发送交易提案()let chaincodeinvokeresult = yield channel.sendTransactionProposal(request);//获取返回结果var proposalResponses = chaincodeinvokeresult[0];var proposal = chaincodeinvokeresult[1];var header = chaincodeinvokeresult[2];var all_good = true;for(var i in proposalResponses){let one_good = false;//检验提案响应信息是否正确if(proposalResponses && proposalResponses[0].response && proposalResponses[0].response.status === 200){one_good = true;console.info('transaction proposal was good');}else{console.error('transaction proposal was bad');}all_good = all_good & one_good;}
//如果提案响应正确的话,则将交易提交给排序服务if(all_good){console.info(util.format('Successfully : Status - %s, message - %s, metadata - %s, endorsement signature - %s',proposalResponses[0].response.status,proposalResponses[0].response.message,proposalResponses[0].response.payload,proposalResponses[0].endorsement.signature));var request = {proposalResponses: proposalResponses,proposal: proposal,header: header};var sendPromise = yield channel.sendTransaction(request);}console.info(all_good+"all_good")
})())/***根据cryptogen模块生成的账户,通过fabric相关接口进行操作*这里使用org1组织的user1用户的账号进行操作*/
function getOrgUser4Local(){var keyPath = "/opt/gopath/src/github.com/hyperledger/fabric/scf/crypto-config/peerOrganizations/org1.scf.com/users/Admin@org1.scf.com/msp/keystore";var keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString();var certPath = "/opt/gopath/src/github.com/hyperledger/fabric/scf/crypto-config/peerOrganizations/org1.scf.com/users/Admin@org1.scf.com/msp/signcerts";var certPEM = readAllFiles(certPath)[0].toString();//var certPEM = Buffer.from(getKeyFilesInDir(certPath)[0]).toString();return hfc.newDefaultKeyValueStore({path:tempdir}).then((store)=>{client.setStateStore(store);return client.createUser({username: 'user87',mspid: 'CoreOrg1MSP',cryptoContent:{privateKeyPEM: keyPEM,signedCertPEM: certPEM}});});
};function readAllFiles(dir){var files = fs.readdirSync(dir);var certs = [];files.forEach((file_name) => {let file_path = path.join(dir,file_name);let data = fs.readFileSync(file_path);certs.push(data);});return certs;
}
fabric1.1 node-sdk实现AND多方背书策略相关推荐
- Fabric node sdk 1.4简明教程
hyperledger fabric的node sdk最新版本为1.4,本文将介绍如何使用最新版本的fabric node sdk开发node.js应用,以实现与fabric区块链的交互,例如查询链码 ...
- java 环信 rest api_[huanxin-sdk] 环信 Rest Api Node sdk
The node sdk of Huanxin Rest API for high performance 详细用法请移步:test/,建议使用 redis 存储token 'use strict'; ...
- Fabric背书策略
1 用途 1.1 交易流程回顾 Hyperledger Fabric 区块链网络交易的执行分为以下几个步骤.Endorser 与 Committer 都是 Hyperledger Fabric 区块链 ...
- 区块链学习8:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名
☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...
- (七)Fabric2.0智能合约实践-设置背书策略
总目录: (0) 如何利用区块链保护知识产权 (一)HyperLedger Fabric 2.0-release测试网络部署 (二)Fabric2.0 first-network 生成配置说明 (三) ...
- Fabric框架的学习-4-链码与背书策略
六. 智能合约 6.1 Golang版本的ChainCode的代码结构 链代码的包名的指定 // xxx.go package main // main不能改 必须要引入的包 // go get gi ...
- Hyperledger Fabric 背书策略
背书策略是为了告知peer节点,交易是否被正确的背书.当peer接收到一个交易到时候,它将会invoke与交易相关的chaincode的VSCC(Validation System Chaincode ...
- 七牛云存储Python SDK使用教程 - 上传策略详解
本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作. 前言 我们在上面的两节中了解到,客户端上传文件时,需要从业务服务器申请一个上传凭证(Upload Tok ...
- java调用obs直播_OBS JAVA SDK Demo:设置桶策略
1背景介绍 OBS桶策略可以给特定用户设置特定的权限.下面代码展示通过JAVA SDK给用户桶设置高级桶策略. 2代码展示 需要先下载OBS最新的JAVA SDK,参考官网链接:https://dev ...
最新文章
- 《Datawhale年度学习总结报告》发布!
- ORACLE HANDBOOK系列之十四:变化通知(Change Notification)
- ui设计学习辅助书籍推送
- clob存base64文件存不进去_Kafka 和 RocketMQ 底层存储之那些你不知道的事
- EXCEL打开CSV文件乱码的解决方法
- Proxy error: Could not proxy request /admin/myResources.do from localhost.jd.com:41000 to http://loc
- C++双冒号和单冒号的用法区别
- 安全:incaseformat蠕虫病毒来袭,你中招了吗?
- python怎么执行程序_小鹅通视频怎么下载?用python实现小鹅通视频下载(二)
- (C语言)二维整型数组的“最大点”(驻点)
- 字节回应阿里涉侵犯男员工曾面试并通过一面;HarmonyOS 2.0用户数升至5000万|极客头条...
- Android自定义控件及自定义属性
- 2006年博客之星(小废物点评版)
- PostgreSQL ALTER TABLE 命令
- android手机的mqtt测试工具,sIoT及安卓app实现mqtt实验
- Apache commons digester简介说明
- gg修改器偏移量修改_GG修改器正版
- 台式机通过网线连接笔记本上网
- Oracle 数据库 简单操作命令(新手看 可以收藏哟)
- 卧槽!百度网盘宣布 VIP 开放免费领取!亲测有效!!