为什么交易会出现此错误

时间:2017-11-06 09:35:12

标签: hyperledger-composer

我的model.cto文件 -

namespace org.acme.mynetwork

participant Client identified by ClientId {
  o String ClientId  
  o String ClientName
  o String[] Policies
  o String[] RFQAraay
}

participant Insurer identified by InsurerId {
  o String InsurerId  
  o String InsurerName
  o String[] RFQArray
  o String[] Quotes
  o String[] Policies
}

asset RFQ identified by RFQId {
  o String RFQId
  o String ClientId
  o String InsurerName
  o String TypeOfInsurance
  o String RiskAmunt
  o String Status
  o String currentOwner
  o String[] Quotes
  o String[] SelectedInsurer
  o String LeadInsurer
  o String[] FinalInsurer
}

participant Broker identified by BrokerId {
  o String BrokerId
  o String BrokerName
  o String[] Clients
}

asset Quote identified by QuoteId {
  o String QuoteId
  o String InsurerName
  o String InsurerId
  o String Premium
  o String Capacity
  o String RFQId
}

transaction GenerateRFQ {
  o String RFQId
  o String ClientId
  o String InsurerName
  o String TypeOfInsurance
  o String RiskAmount
  o String[] InsurerAddresses 
}

我的Script.js文件

/**
* Insurance script file
* @param {org.acme.mynetwork.GenerateRFQ} generate - the trade to be  processed
* @transaction
*/
function generateRFQ(generate){
  var RFQId = generate.RFQId ;
  var today = new Date();
  var y = today.getFullYear();
  var m = today.getMonth();
  var d = today.getDate();
  return getAssetRegistry('org.acme.mynetwork.RFQ').then(function(assetRegistry){
    var RFQregistry = assetRegistry;
    RFQregistry.RFQId = generate.RFQId; 
    RFQregistry.ClientId = generate.ClientId 
    RFQregistry.InsuredName = generate.InsurerName;
    RFQregistry.TypeOfInsurance = generate.TypeOfInsurance;
    RFQregistry.RiskAmount = generate.RiskAmount; 
    RFQregistry.Status = "RFQ fired on "+ d + m + y;
    RFQregistry. Insurer = generate.InsurerAddresses;
  return assetRegistry.update(RFQregistry);
  })
}

我正在使用在线游乐场。提交此交易会给我一个错误:

  

找不到要为交易执行的任何函数org.acme.mynetwork.GenerateRFQ#ae28a855-ba3c-48fe-9404-291ad95b24c7

我试过更改它的名字,但仍然没有好处。但SampleTransaction业务逻辑工作正常。

1 个答案:

答案 0 :(得分:2)

你的问题是你没有在你的装饰器中建模一个名为 GenerateRFQ 的事务(在你的.cto文件中),如: org.acme.mynetwork.GenerateRFQ

然后将以下(下面)添加到您的模型文件中 - 然后执行composer network update更新您的业务网络(和链代码)以识别新建模的事务(您在脚本中调用)。

transaction GenerateRFQ {
 ...add your model elements or relationships here
}

我在脚本中注意到一个问题(需要在您的网络项目的/ lib子目录下)。您指定了new Date() - 这是非确定性代码,因此执行此操作的每个对等方将执行'date'函数并获得不同的时间戳。

另外 - 您可能要考虑的其他事项 - (根据您在此处发布的模型):

客户应该是与经纪人的关系 - 请参阅此处的示例网络 - > https://github.com/hyperledger/composer-sample-networks/blob/master/packages/trade-network/models/trading.cto以关系为例。事实上,您的模型中可能存在更多关系(例如,一对多等)。最后,您的交易理想情况下应该与您的代码中“参与”的参与者和资产有关系(例如,客户,保险公司等)。再看一下我发给你的模型文件链接以获得一个想法 - 另外看看这里的其他样本 - > https://github.com/hyperledger/composer-sample-networks/tree/master/packages指点并在此处查看模型语言指南 - > https://hyperledger.github.io/composer/unstable/reference/cto_language.html