如何从超级账本中的资产更新值

时间:2018-06-21 07:17:37

标签: hyperledger-fabric hyperledger hyperledger-composer

模型

asset Route identified by route_id {
  o String route_id
  o String rider_id
  o String parcel_id
}
transaction assignParcelToRider {
  o String rider_id
  o String parcel_id
}

logic.js

var assetRegistry;
var id = assignValue.rider_id;
return getAssetRegistry('org.rytle.Route').then(function(ar) {
    assetRegistry = ar;
    return assetRegistry.get(id);
}).then(function(asset) {
    asset.parcel_id = assignValue.parcel_id;
    return assetRegistry.update(asset);
});

在这里,我想找到rider_id并在那里更新parcel_id。但是在这里没有找到rider_id。

1 个答案:

答案 0 :(得分:1)

最主要的是,在模型中,使用.get()时需要通过资产标识符获取资产,而rider_id不是。

也-可能需要更多信息-但所有这些都取决于idassignValue.rider_id获取值,我无法告诉您如何定义/声明该值以及它是否在范围内。我可以看到id应该在下面的功能范围内-但使用资产的正确标识符,这应该可以工作(例如):

return getAssetRegistry('org.rytle.Route').then(function(ar) {
      return ar.get(route_id)   // or whatever you've assigned it to or txnobject.route.getIdentifier());   // ie you must get the asset by identifier
      }).then(function(asset) {
           asset.parcel_id = id;   
           return ar.update(asset);
       });                  

以此类推;

ps,您可以查看sample-networks的一些示例(例如,在“ test”目录下)-请注意,这些示例现在使用节点8附带的async / await函数(而不是上面显示的“ promises”) (并且比使用Promise FYI编写起来容易得多)