RangeError 将 bna 文件部署到 composer-rest-server

RangeError deploying bna file to composer-rest-server

所以我正在尝试部署一个新的 bna 文件来进行测试。 更重要的是我可以测试其余接口以使用我编写的一些调用代码创建参与者而不是其他任何东西 - javascript 事务处理文件此时几乎是空的。

.cto 文件有几个不同的参与者类型和一堆资产类型,它们形成一个树结构来表示数据。

尝试启动本地休息服务器时出现以下错误。

Discovering types from business network definition ... Discovered types from business network definition Generating schemas for all types in business network definition ... Exception: RangeError: Maximum call stack size exceeded RangeError: Maximum call stack size exceeded at LoopbackVisitor.visitClassDeclarationCommon (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:352:23) at LoopbackVisitor.visitAssetDeclaration (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:187:21) at LoopbackVisitor.visit (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:74:25) at AssetDeclaration.accept (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/introspect/classdeclaration.js:64:24) at LoopbackVisitor.visitField (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:494:18) at LoopbackVisitor.visit (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:86:25) at Field.accept (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/introspect/property.js:48:24) at classDeclaration.getProperties.forEach (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:373:66) at Array.forEach (native) at LoopbackVisitor.visitClassDeclarationCommon (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:370:42) at LoopbackVisitor.visitAssetDeclaration (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:187:21) at LoopbackVisitor.visit (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:74:25) at AssetDeclaration.accept (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/introspect/classdeclaration.js:64:24) at LoopbackVisitor.visitField (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:494:18) at LoopbackVisitor.visit (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:86:25) at Field.accept (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/introspect/property.js:48:24) at classDeclaration.getProperties.forEach (/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/codegen/fromcto/loopback/loopbackvisitor.js:373:66)

与 google 的一段美好时光告诉我这是一个内存不足错误,可能是由过度递归引起的,但在那之后我就卡住了。

同一个网络在 playground fwiw 中工作得很好。

编辑: 没有 .qry 文件。这是最基本的。 我想看看我是否可以从我敲响的 REST 调用中添加 Par1 和 Par2 样本。

ACL 文件是基本网络样本中的标准 allow-all-to-all。

我已经清理了 .cto 文件以部分模糊来源,但它似乎仍然重复出现以下内容:

/**
 * Sample business network definition.
 */
namespace xx.yy.zz

asset SomeTransmission identified by orderNumber {
  o String orderNumber  //Some order number
  --> Par2 aa
  --> Par1 bb
  o SomeTransmission[] messages
}

participant Par1 identified by code {
  o String mmm
  o String name
  o String prefix
  o String code
  o Boolean bool1
  o Boolean bool2
  o Boolean bool3
}

participant SomeSss identified by sss {
  o String sss
  o String mmm
  --> Par1 bb
  --> Par1 rep2
}

participant Par2 identified by id {
  o String id
  o String name
  o String address
}

transaction UpdateOrderTransaction {
  o String orderId
  --> Par2 aa
  --> Par1 bb
  o SomeTransmission transmission
}

event UpdateOrderEvent {
  --> SomeTransmission transmission
}

asset Some identified by uuid {
  o String uuid  //Unique identifier
}

asset AgencyOrder extends Some { 
    o AXZHDR agyhdr 
    o AXZDS1 agyds1
    o AXZDS2 agyds2
    o AXZDS3 agyds3
    o AXZDS4 agyds4
    o AXZSTD[] agystds
    o AXZCOM[] agycoms
    o AXZHIA[] agyhias
    o BxblineTransmission[] bxblines
    o AXZTLR agytlr
}

asset SomeRecord identified by uuid {
  o String uuid       
  o String id         
  o Long orderNumber  //Some order number
}

asset SomeModifier extends SomeRecord { 
    o Par2 tpar2
    o Par1 tpar1       
    o String dt       
    o String sss    
    o String cn         
    o String rts        
}

asset SomePreviousSssModifier extends SomeModifier {
  o String previousSssCallLetters 
}

asset SomeMultiple extends SomeRecord {
  o String continuation 
}

asset SomeComment extends SomeMultiple {
  o String comment 
}


asset AXZHDR extends SomePreviousSssModifier { 
    o String version         //Some version number
    o String routingCode
    o String mdaCode
    o String clientCode
  o String prxOneCode
  o String prxTwoCode
  o String estimateNumber
  o String startDate
  o String endDate
  o String cashOrTrade
  o String scheduleType
  o String scheduleStartDate
    o Long billWeekStartDay
    o String originalOrderNumber
    o Long revisionNumber
}

asset AXZDS1 extends SomeRecord {
    o String axyName
    o String axyAddress
}

asset AXZDS2 extends SomeRecord {
    o String clientName
    o String estimateDescription
  o String targetDmxx
  o String[] extraDmxxs
}

asset AXZDS3 extends SomeRecord {
    o String prxOneName
    o String prxTwoName
}

asset AXZDS4 extends SomeRecord {
    o String bxberCode
    o String bxberName
  o Long bxberTelephone
  o String bxberExtension
}

asset AXZSTD extends SomeComment {
}

asset AXZCOM extends SomeComment {
}

asset AXZHIA extends SomeMultiple {
  o String[] dates
}

asset AXZTLR extends SomeRecord {
    o Long numberOfRecords
    o Long totalOrderedSpx
    o Long totalOrderedDollars
}

//Bxb record details
asset BxblineTransmission identified by uuid{
  o String uuid
  o BXBHDR bxbhdr
    o BXBDEM bxbdem
    o BXBORB[] bxborbs
    o BXBCOM[] bxbcoms
    o BXBDTL[] bxbdtls
}

asset SomeBxbRecord extends SomeRecord {
    o Long sequenceNumber
    o String sbx
    o Long sbxStartDay
    o Long startTime
    o Long endTime
    o Long totalspxyLength
    o String lengthInUnits
    o Long cost
    o String costQualifier
    o Long prxOneTimeShare
    o String pppName
    o String scheduleType  
}

asset BXBHDR extends SomeBxbRecord {
  o Long makegoodForBxbline
}

asset BXBDEM extends SomeRecord {
  o Long[] demos
}

asset BXBORB extends SomeMultiple {
  o String sbx
    o Long sbxStartDay
    o Long startTime
    o Long endTime
    o String pppName  
}

asset BXBCOM extends SomeComment {
}

asset BXBDTL extends SomeMultiple {
  o Long cost
    o String startDate
    o Long numberOfWeeks
    o Long spxPerWeek
}

问题是:

asset SomeTransmission identified by orderNumber {
  o String orderNumber  //Some order number
  --> Par2 aa
  --> Par1 bb
  o SomeTransmission[] messages
}

SomeTransmission[] messages 导致代码递归,试图在 SomeTransmission class 已经在内省的过程中内省它。

想要拥有包含其自身资产类型数组的资产似乎很不寻常。你想达到什么目的,也许有另一种建模方法?

我创建了问题 https://github.com/hyperledger/composer/issues/2193 来解决这个问题。