balance transfer程式碼解析及api深度追蹤(六)執行鏈碼
一程式碼解析 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 helper = require(’./helper.js’); var logger = helper.getLogger(‘invoke-chaincode’); var EventHub = require(‘fabric-client/lib/EventHub.js’); var ORGS = hfc.getConfigSetting(‘network-config’);
var invokeChaincode = function (peerNames, channelName, chaincodeName, fcn, args, username, org) {
logger.debug(util.format(’\n============ invoke transaction on organization %s ==========\n’, org));
var client = helper.getClientForOrg(org);
var channel = helper.getChannelForOrg(org);
var targets = (peerNames) ? helper.newPeers(peerNames, org) : undefined;
var tx_id = null;
//1 獲取 jim 使用者( 內部會設定為上下文環境)
return helper.getRegisteredUsers(username, org).then((user) => {
tx_id = client.newTransactionID();
logger.debug(util.format(‘Sending transaction “%j”’, tx_id));
//2 封裝交易提案請求
var request = {
chaincodeId: chaincodeName,
fcn: fcn,
args: args,
chainId: channelName,
txId: tx_id
};
if (targets)
request.targets = targets;
//3 傳送交易提案給背書節點
// send proposal to endorser
return channel.sendTransactionProposal(request);
}, (err) => {
logger.error('Failed to enroll user ‘’ + username + ‘’. ’ + err);
throw new Error('Failed to enroll user ‘’ + username + ‘’. ’ + err);
}).then((results) => {
//4 處理背書結果
var proposalResponses = results[0];
var proposal = results[1];
var all_good = true;
for (var i in proposalResponses) {
let one_good = false;
if (proposalResponses && proposalResponses[i].response &&
proposalResponses[i].response.status === 200) {
one_good = true;
exports.invokeChaincode = invokeChaincode; 二api深度追蹤 裡面的api基本上都在前面初始化鏈碼等出現過