Fabric Composer测试代码不起作用

时间:2017-04-27 19:57:27

标签: blockchain hyperledger hyperledger-fabric hyperledger-composer

我刚刚用我创建的另一个替换了Composer默认样本(“sampleAsset”,“sampleTransaction”等),以便我更好地理解。一切都有效,除了交易,它返回错误信息: “**错误:无法找到任何执行交易的函数org.acme.sample.CompraDoVinho#** 2b2d0624-bc ......”

在下面找到源代码:

  

块引用

模型文件:

命名空间org.acme.sample

资产Vinho由IDvinho {

确定
o String IDvinho
--> Participante owner
o String uva
o String nomeVinho 
o Integer preco 

}

参与者参与者由IDparticipante {

确定
o String IDparticipante
o String tipo
o String nomeEmpresa

}

由IDcompra {

识别的交易CompraDoVinho
o String IDcompra
--> Vinho asset
o Integer precoVenda

}

逻辑:

function onSampleTransaction(CompraDoVinho){

CompraDoVinho.asset.preco = CompraDoVinho.precoVenda;

return getAssetRegistry('org.acme.sample.Vinho')

    .then(function (assetRegistry) {

        return assetRegistry.update(CompraDoVinho.asset);

  });

}

权限:

规则默认{

description: "Allow all participants access to all resources"
participant: "ANY"
operation: ALL
resource: "org.acme.sample"
action: ALLOW

}

  

块引用

有人可以帮我查一下我的代码中的错误吗?

提前致谢

3 个答案:

答案 0 :(得分:2)

问题几乎可以肯定是因为您已重命名该交易。 Composer有两种机制将事务路由到JS函数:

  1. (旧版)使用onMyTransactionType命名约定。即当提交MyTransactionType的实例时,将调用该函数。
  2. (首选)使用@transaction@param注释。请参阅下面的示例。 @transaction注释表示函数要处理事务,@param注释用于指定要处理的事务的类型。
  3.     /**
         * Place an order for a vehicle
         * @param {org.acme.vehicle.lifecycle.manufacturer.PlaceOrder} placeOrder - the PlaceOrder transaction
         * @transaction
         */
        function placeOrder(placeOrder) {
            console.log('placeOrder');
    
            let factory = getFactory();
            let NS = 'org.acme.vehicle.lifecycle.manufacturer';
    
            let order = factory.newResource(NS, 'Order', placeOrder.transactionId);
            order.vehicleDetails = placeOrder.vehicleDetails;
            order.orderStatus = 'PLACED';
            order.manufacturer = placeOrder.manufacturer;
    
            // save the order
            return getAssetRegistry(order.getFullyQualifiedType())
                .then(function (registry) {
                    return registry.add(order);
                });
        }
    

答案 1 :(得分:1)

绝对。注释对于功能的工作至关重要! @param必须说明事务的类名和param名称 @transaction在下面声明,函数在下面的块中跟随

@param {org.acme.mynetwork.Foo} foo - 要处理的报告  * @transaction

答案 2 :(得分:0)

请使用以下代码替换logic.js文件中的代码,错误肯定会消失。我是同样的问题,我刚刚在函数上方添加了所需的JS doc annotations,并解决了同样的问题!

'use strict';
var NS = 'org.acme.sample';
/**
 * @param {org.acme.sample} CompraDoVinho 
 * @transaction
 */
function onSampleTransaction(CompraDoVinho) {

CompraDoVinho.asset.preco = CompraDoVinho.precoVenda;

return getAssetRegistry('org.acme.sample.Vinho')

    .then(function (assetRegistry) {

        return assetRegistry.update(CompraDoVinho.asset);

  });
}

希望这能帮到你!