0

我正在使用带有新客户端库结构网络的结构 2.1。我已经配置了网络、创建了通道、安装了链码等。我可以通过 CLI 调用事务。

结构版本:2.1 结构网络:2.1

我已将事件处理程序策略定义如下 1) 策略:DefaultEventHandlerStrategies.MSPID_SCOPE_ANYFORTX

2)策略:createTransactionEventHandler

await gateway.connect(ccp, {
            wallet, identity: username, discovery: { enabled: true, asLocalhost: true }, transaction: {
                strategy: DefaultEventHandlerStrategies.MSPID_SCOPE_ANYFORTX
            }
        });

当我提交交易时,在这两种情况下都会得到一个空缓冲区而不是交易 id(不确定我们是否得到 tx id)。

被调用的交易被添加到区块链中。我从 CouchDB 确认并查询资产。

> let result = await contract.submitTransaction(fcn, args[0], args[1],args[2], args[3], args[4]);

我尝试使用自定义事件处理程序,但未触发此功能。策略:createTransactionEventHandler

const createTransactionEventHandler = (transactionId, network) => {
    const mspId = network.getGateway().getIdentity().mspId;
    const myOrgPeers = network.getChannel().getEndorsers(mspId);
    console.log(`tx id : ${transactionId}`)

    return new MyTransactionEventHandler(transactionId, network, myOrgPeers);
}

有没有人有什么建议?

4

1 回答 1

0

检查链码,我遇到了类似的问题,我收到了一个空缓冲区。如果您使用的是 fabcar,我假设您正在调用此函数:

async createCar(ctx, carNumber, make, model, color, owner) {
    console.info('============= START : Create Car ===========');

    const car = {
        color,
        docType: 'car',
        make,
        model,
        owner,
    };

    await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
    console.info('============= END : Create Car ===========');
    return car; // if you don't return anything you get an empty response
}

因此,首先检查您的链代码是否应该返回任何内容。

于 2020-06-05T13:24:45.963 回答