【发布时间】:2022-08-04 00:57:01
【问题描述】:
在 AWS 关于如何设置区块链网络的第一步之后,我陷入了第 7 步 [1] 打包/安装/批准/提交链码的位置。作为个人挑战,我尝试使用asset-transfer-basic/chaincode-typescript 项目[2]。
这是项目文件夹结构(其中库是个节点模块文件夹,但已重命名,因此它包含在最终包中):
chaincode-typescript/
├─ dist/
├─ lib/
├─ src/
├─ tslint.json
├─ tsconfig.json
├─ package.json
├─ package-lock.json
这是项目package.json(注意start 脚本):
{
\"name\": \"asset-transfer-basic\",
\"version\": \"1.0.0\",
\"description\": \"Asset Transfer Basic contract implemented in TypeScript\",
\"main\": \"dist/index.js\",
\"typings\": \"dist/index.d.ts\",
\"engines\": {
\"node\": \">=12\",
\"npm\": \">=5\"
},
\"scripts\": {
\"lint\": \"tslint -c tslint.json \'src/**/*.ts\'\",
\"pretest\": \"npm run lint\",
\"test\": \"nyc mocha -r ts-node/register src/**/*.spec.ts\",
\"start\": \"NODE_PATH=lib node dist/index.js\",
\"build\": \"tsc\",
\"build:watch\": \"tsc -w\",
\"prepublishOnly\": \"npm run build\"
},
\"engineStrict\": true,
\"author\": \"Hyperledger\",
\"license\": \"Apache-2.0\",
\"dependencies\": {
\"fabric-contract-api\": \"^2.0.0\",
\"fabric-shim\": \"^2.0.0\"
},
\"devDependencies\": {
\"@types/chai\": \"^4.1.7\",
\"@types/mocha\": \"^5.2.5\",
\"@types/node\": \"^10.12.10\",
\"@types/sinon\": \"^5.0.7\",
\"@types/sinon-chai\": \"^3.2.1\",
\"chai\": \"^4.2.0\",
\"mocha\": \"^5.2.0\",
\"nyc\": \"^14.1.1\",
\"sinon\": \"^7.1.1\",
\"sinon-chai\": \"^3.3.0\",
\"ts-node\": \"^7.0.1\",
\"tslint\": \"^5.11.0\",
\"typescript\": \"^3.1.6\"
}
}
这些是我运行的命令及其输出:
docker exec cli peer lifecycle chaincode package package.tar.gz --lang node --label package_3 --path ./fabric-samples/asset-transfer-basic/chaincode-typescript/
docker exec cli peer lifecycle chaincode install package.tar.gz
2022-07-30 23:09:05.476 UTC [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:\"\\nJpackage_3:5a51d2bc0ef40de3c4ad1f2080456004c39e26670f2a9048796496eaef7b88b4\\022\\tpackage_3\" >
2022-07-30 23:09:05.488 UTC [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: package_3:5a51d2bc0ef40de3c4ad1f2080456004c39e26670f2a9048796496eaef7b88b4
export CC_PACKAGE_ID=package_3:5a51d2bc0ef40de3c4ad1f2080456004c39e26670f2a9048796496eaef7b88b4
docker exec cli peer lifecycle chaincode queryinstalled
Installed chaincodes on peer:
Package ID: package_2:1fbb720f16271e9ae647736e012ca6ff8d5f6c6bf80ca7696668bd1c6a89b8e2, Label: package_2
Package ID: package_3:5a51d2bc0ef40de3c4ad1f2080456004c39e26670f2a9048796496eaef7b88b4, Label: package_3
Package ID: package_1:e73c64b62ebe74c1997117b037df2dd51d7aaacb26c877f726f03f7c568c4af9, Label: package_1
docker exec cli peer lifecycle chaincode approveformyorg --orderer $ORDERER --tls --cafile /opt/home/managedblockchain-tls-chain.pem --channelID supply-chain --name package3 --version v0 --sequence 1 --package-id $CC_PACKAGE_ID
2022-07-30 23:10:36.764 UTC [chaincodeCmd] ClientWait -> INFO 001 txid [a2634acda7acbc220ca0b78b6f46a5c7f202ac498541139f2209d412c49ed20b] committed with status (VALID) at nd-<node_id>.m-<member_id>.n-<network_id>.managedblockchain.us-east-1.amazonaws.com:30003
docker exec cli peer lifecycle chaincode checkcommitreadiness --orderer $ORDERER --tls --cafile /opt/home/managedblockchain-tls-chain.pem --channelID supply-chain --name package3 --version v0 --sequence 1
Chaincode definition for chaincode \'package3\', version \'v0\', sequence \'1\' on channel \'supply-chain\' approval status by org:
m-<member_id>: true
docker exec cli peer lifecycle chaincode commit --orderer $ORDERER --tls --cafile /opt/home/managedblockchain-tls-chain.pem --channelID supply-chain --name package3 --version v0 --sequence 1
2022-07-30 23:12:17.742 UTC [chaincodeCmd] ClientWait -> INFO 001 txid [e8745d021b24567caeebac0fbbf0a969b66e77f817e78ebba735af6b7c32b43f] committed with status (VALID) at nd-<node_id>.m-<member_id>.n-<network_id>.managedblockchain.us-east-1.amazonaws.com:30003
docker exec cli peer lifecycle chaincode querycommitted -C supply-chain
Committed chaincode definitions on channel \'supply-chain\':
Name: package2, Version: v0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
Name: package3, Version: v0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
Name: package, Version: v0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
docker exec cli peer chaincode invoke --tls --cafile /opt/home/managedblockchain-tls-chain.pem --channelID supply-chain --name package3 -c \'{\"function\":\"InitLedger\",\"Args\":[]}\'
2022-07-30 23:13:30.906 UTC [chaincodeCmd] InitCmdFactory -> INFO 001 Retrieved channel (supply-chain) orderer endpoint: nd-<node_id>.m-<member_id>.n-<network_id>.managedblockchain.us-east-1.amazonaws.com:30001
Error: endorsement failure during invoke. response: status:500 message:\"error in simulation: failed to execute transaction 2034113c1b27abebdee846465ba3609f2dd8d2a58984eb6684c2895989ea4443: could not launch chaincode package_3:5a51d2bc0ef40de3c4ad1f2080456004c39e26670f2a9048796496eaef7b88b4: chaincode registration failed: container exited with 0\"
最后一条日志说链码包没有注册。但是,当我查看 CloudWatch 中的日志以查看调用 InitLedger 函数时出了什么问题时,我得到了以下信息:
-
您的日志似乎不包含任何表明代码无法运行的错误?您是否使用 Fabric Samples 中定义的本地 BYFN(构建您的第一个网络)方法测试了此链码,以消除链码本身的问题?
-
我相信所有使用高级
fabric-contract-api库的链代码都需要以“fabric-chaincode-node start”脚本开头,而不是从 index.js 调用函数。这可能会导致问题。 Amazon Managed Blockchain 上的 Node.js 链代码存在一个已知问题,此启动脚本可能无法正常工作。如果您遇到这个问题,请告诉我。 -
@Forrest 是的,我在本地测试了这个链代码,它似乎正在工作。在 AMB 上下文中,我打包并提交了相同的链代码。这一次,在
start脚本中,我按照您的建议使用了fabric-chaincode-node start,如下所示:NODE_PATH=lib fabric-chaincode-node start。但是当我调用InitLedger方法时,我在 CloudWatch 上收到了这个 NPM 错误:sh: fabric-chaincode-node: not found。我还尝试在命令前加上npx,如下所示:NODE_PATH=lib npx fabric-chaincode-node start,但也没有运气;它会触发超时错误。
标签: node.js hyperledger-fabric amazon-managed-blockchain