实例化通道上的节点链码时出错

如何解决实例化通道上的节点链码时出错

我正在尝试实例化通道上已安装的节点链码,但失败并显示错误:failed to invoke chaincode name:"lscc",error: container exited with 0

我到目前为止所做的事情:

  1. 使用“构建第一个网络(v1.4)”教程中的./byfn up -c some-channel -s couchdb -o etcdraft -l node脚本,成功地启动了一个由2个组织组成的网络,每个组织有2个对等方,并达成了共识。网络已经有一个名为mycc的实例化链码。
  2. 使用Node.js SDK从我的脚本连接到网络。我能够从脚本中成功调用mycc链码的读写链码方法。
  3. 使用每个组织的管理员身份在所有4个对等节点上安装新的链码。我可以通过查询对等点上已安装的链码来确认链码确实已安装。同样,对等容器日志也会确认链码已成功安装。
  4. 试图实例化已安装的链码并遇到上述错误。

这是我尝试实例化我的链码的方法:

// Load the network configuration
        const ccpPath = path.resolve(__dirname,ccpName);
        let ccp = JSON.parse(fs.readFileSync(ccpPath,'utf8'));

        // Create a new file system based wallet for managing identities.
        const walletPath = path.join(process.cwd(),walletName);
        const wallet = new FileSystemWallet(walletPath);
        console.log(`Wallet path: ${walletPath}`);

        // Check to see if we've already enrolled the user.
        const identity = await wallet.exists(identityName);

        if (!identity) {
            console.log(`An identity for the user ${identityName} does not exist in the wallet`);
            console.log('Run the registerUser.js application before retrying');
            return;
        }

        // Create a new gateway for connecting to our peer node.
        const gateway = new Gateway();
        await gateway.connect(ccp,{ wallet,identity: identityName,discovery: { enabled: true,asLocalhost: true } });

        // Get the network (channel) our contract is deployed to.
        const network = await gateway.getNetwork(channelName);
        const client = gateway.getClient();
        const channel = network.getChannel(channelName);

        let channelPeers = channel.getPeers().map(peer => peer._peer);
        // console.log(channelPeers);

        const endorsementPolicy = {
            identities: [
                { role: { name: 'member',mspId: 'Org1MSP' }},{ role: { name: 'member',mspId: 'Org2MSP' }}
            ],policy: {
                '1-of': [{ 'signed-by': 0 },{ 'signed-by': 1 }]
            }
        };
        console.log(channelPeers[0]._name);
        const instantiateChaincodeRequest = {
            targets: channelPeers,chaincodeType: 'node',chaincodeId: 'deal',chaincodeVersion: '1.0.0',txId: client.newTransactionID(true),'endorsement-policy': endorsementPolicy
        };

        const instantiateResponse = await channel.sendInstantiateProposal(instantiateChaincodeRequest,300000);

        console.log(instantiateResponse[0]);

此脚本可解决此错误:

{ Error: chaincode registration failed: container exited with 0
  at self._endorserClient.processProposal (/home/projects/testing/vs-code-hlf-sc/node_modules/fabric-client/lib/Peer.js:144:36)
  at Object.onReceiveStatus (/home/projects/testing/vs-code-hlf-sc/node_modules/grpc/src/client_interceptors.js:1212:9)
  at InterceptingListener._callNext (/home/projects/testing/vs-code-hlf-sc/node_modules/grpc/src/client_interceptors.js:568:42)
  at InterceptingListener.onReceiveStatus (/home/projects/testing/vs-code-hlf-sc/node_modules/grpc/src/client_interceptors.js:618:8)
  at callback (/home/projects/testing/vs-code-hlf-sc/node_modules/grpc/src/client_interceptors.js:847:24)
status: 500,payload: <Buffer >,peer:
 { url: 'grpcs://localhost:9051',name: 'peer0.org2.example.com:9051',options: [Object] },isProposalResponse: true }

以下是相关的对等容器日志:

2020-09-08 08:27:09.274 UTC [endorser] callChaincode -> INFO 0c7 [][7fdf845f] Entry chaincode: name:"lscc" 
2020-09-08 08:27:09.277 UTC [lscc] executeInstall -> INFO 0c8 Installed Chaincode [deal] Version [1.0.0] to peer
2020-09-08 08:27:09.277 UTC [endorser] callChaincode -> INFO 0c9 [][7fdf845f] Exit chaincode: name:"lscc"  (3ms)
2020-09-08 08:27:09.277 UTC [comm.grpc.server] 1 -> INFO 0ca unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=192.168.48.1:59702 grpc.code=OK grpc.call_duration=3.376691ms
2020-09-08 08:45:34.201 UTC [endorser] callChaincode -> INFO 0dd [some-channel][d3a00bc9] Entry chaincode: name:"lscc" 
2020-09-08 08:46:16.593 UTC [peer.chaincode.dev-peer0.org2.example.com-deal-1.0.0] func2 -> INFO 0de 
2020-09-08 08:46:16.593 UTC [peer.chaincode.dev-peer0.org2.example.com-deal-1.0.0] func2 -> INFO 0df > deal@1.0.0 start /usr/local/src
2020-09-08 08:46:16.593 UTC [peer.chaincode.dev-peer0.org2.example.com-deal-1.0.0] func2 -> INFO 0e0 > node deal-contract.js "--peer.address" "peer0.org2.example.com:9052"
2020-09-08 08:46:16.593 UTC [peer.chaincode.dev-peer0.org2.example.com-deal-1.0.0] func2 -> INFO 0e1 
2020-09-08 08:46:17.141 UTC [dockercontroller] func2 -> INFO 0e2 Container dev-peer0.org2.example.com-deal-1.0.0 has closed its IO channel
2020-09-08 08:46:17.314 UTC [endorser] callChaincode -> INFO 0e3 [some-channel][d3a00bc9] Exit chaincode: name:"lscc"  (43113ms)
2020-09-08 08:46:17.314 UTC [endorser] SimulateProposal -> ERRO 0e4 [some-channel][d3a00bc9] failed to invoke chaincode name:"lscc",error: container exited with 0
github.com/hyperledger/fabric/core/chaincode.(*RuntimeLauncher).Launch.func1
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/runtime_launcher.go:63
runtime.goexit
    /opt/go/src/runtime/asm_amd64.s:1357
chaincode registration failed

日志显示链代码已成功安装,然后日志显示链lscc错误。因此,我认为错误与链码的构建阶段有关。但是,当我将其与VS Code IBM Blockchain Extension一起部署时,相同的链代码也可以完美地工作。

到目前为止,我已经尝试过:

  • 提供/不提供认可政策,并以多种方式调整实例请求对象
  • 使用不同的身份
  • 检查ccenv容器的日志,该容器在收到实例化请求时生成约30秒。没有错误
  • 从头开始重新启动网络,删除所有矩阵docker镜像并重新开始。

所以基本上问题是: 如何使用Node.js SDK正确实例化通道上已安装的链码?

我的环境:

  • Ubuntu 18.04

  • 超级账本结构v1.4

  • fabric-network 1.4.8

  • fabric-client 1.4.10

  • 节点10.22.0

  • npm 6.14.6

  • docker 19.03.12,内部版本48a66213fe

  • docker-compose 1.26.2,构建eefe0d31

  • 链码是使用fabric-contract-api

    开发的

解决方法

因此,我终于弄清楚了,以供将来参考。出于某种原因,我的自定义链码类之一在从Init()扩展了Invoke()类之后没有继承Chaincodefabric-shim方法。我在chaincode类中明确地重新声明了这些方法,并成功实例化了它。

Hyperledger Fabric v1.4 Runtime Launcher需要这些方法。

,

我的建议是,您必须对两个不同的链码使用两个不同的通道。您可以在每个对等方中安装任意数量的链码,但是当您尝试实例化链码时,由于此过程直接与网络和通道有关,因此问题将开始。尽管他们从版本> = 2更改了实例化过程。

记录:

为了开展业务,某些组织必须达成共识,因此他们必须创建一个仅允许获得许可的组织属性才能访问的渠道。

在此渠道中,每个有效的组织对等方都拥有业务交易记录的物理副本,这称为分类账,其中分类账是相同的,这意味着属于同一渠道的每个分类账都必须拥有相同的记录。

分类帐由两个不同但相关的部分组成-世界状态和区块链。世界状态–包含一组分类帐状态的当前值的数据库。区块链–记录所有导致当前世界状态变化的交易日志。

链码是用于读取分类帐记录或将新记录写入分类帐或更新现有记录的业务逻辑。

一个链码由多个智能合约组成。

因此,约定是针对每个通道的,您需要相同的链码。如果您有2个频道,则按照惯例,您有两个不同的链码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-