【问题标题】:Cannot Post Hyperledger Transaction on Rest API无法在 Rest API 上发布 Hyperledger 交易
【发布时间】:2018-06-19 02:48:34
【问题描述】:

我在我的 ReST 服务器上发布交易时遇到了一些问题。当我尝试发布交易时,我总是收到 422 错误。如果我删除任何字段,我将收到 500 错误。似乎任何事务 id 都是无效的,我不知道为什么它是无效的。在我原来的 .cto 文件中,我没有要求有一个 transactionID 字段,所以我假设这是一个默认字段。这是我的 POST 方法的屏幕截图:

这是我输入的内容:

{
  "$class": "models.transactionsModel.InvalidateCertificate",
  "certificate": "#cert2",
  "transactionId": "string",
  "timestamp": "2018-06-18T16:57:45.644Z"
}

我通过哈希字符串使证书可识别

这里分别是生成的 curl、body 和 header,

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ \ 
   "$class": "models.transactionsModel.InvalidateCertificate", \ 
   "certificate": "#cert2", \ 
   "transactionId": "string", \ 
   "timestamp": "2018-06-18T16:57:45.644Z" \ 
 }' 'http://localhost:3000/api/models.transactionsModel.InvalidateCertificate'

{
  "error": {
    "statusCode": 422,
    "name": "ValidationError",
    "message": "The `models_transactionsModel_InvalidateCertificate` instance is not valid. Details: `transactionId` can't be set (value: \"string\").",
    "details": {
      "context": "models_transactionsModel_InvalidateCertificate",
      "codes": {
        "transactionId": [
          "absence"
        ]
      },
      "messages": {
        "transactionId": [
          "can't be set"
        ]
      }
    },
    "stack": "ValidationError: The `models_transactionsModel_InvalidateCertificate` instance is not valid. Details: `transactionId` can't be set (value: \"string\").\n    at /Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/dao.js:398:12\n    at models_transactionsModel_InvalidateCertificate.<anonymous> (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/validations.js:578:11)\n    at models_transactionsModel_InvalidateCertificate.next (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/hooks.js:93:12)\n    at models_transactionsModel_InvalidateCertificate.<anonymous> (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/validations.js:575:23)\n    at models_transactionsModel_InvalidateCertificate.trigger (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/hooks.js:83:12)\n    at models_transactionsModel_InvalidateCertificate.Validatable.isValid (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/validations.js:541:8)\n    at /Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/dao.js:394:9\n    at doNotify (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at doNotify (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at doNotify (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at doNotify (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at Function.ObserverMixin._notifyBaseObservers (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)\n    at Function.ObserverMixin.notifyObserversOf (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n    at Function.ObserverMixin._notifyBaseObservers (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n    at Function.ObserverMixin.notifyObserversOf (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n    at Function.ObserverMixin._notifyBaseObservers (/Users/harshdeshpande/.nvm/versions/node/v8.11.2/lib/node_modules/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)"
  }
}

{
  "date": "Mon, 18 Jun 2018 18:23:47 GMT",
  "content-encoding": "gzip",
  "x-content-type-options": "nosniff",
  "x-download-options": "noopen",
  "x-frame-options": "DENY",
  "content-type": "application/json; charset=utf-8",
  "access-control-allow-origin": "http://localhost:3000",
  "transfer-encoding": "chunked",
  "connection": "keep-alive",
  "access-control-allow-credentials": "true",
  "vary": "Origin, Accept-Encoding",
  "x-xss-protection": "1; mode=block"
}

更奇怪的是,我可以通过 Composer 游乐场提交有效的交易。然而,在作曲家 Playground 中,它不要求提供 transactionID 或时间戳 - 它会在提交事务时自动生成。

【问题讨论】:

    标签: rest hyperledger-fabric hyperledger-composer


    【解决方案1】:

    在此处查看答案 -> error executing hyperledger fabric code on localhost:3000 (through REST) - transactionId - 这确实是一个环回问题。

    按如下方式发布您的相同交易(但删除 transactionId 和时间戳 - 这些是为您生成的,前者代表分类帐上的交易 ID):

    {
      "$class": "models.transactionsModel.InvalidateCertificate",
      "certificate": "#cert2"
    }
    

    干杯

    【讨论】:

    • 我试过了,但现在我收到错误 500:FQN 无效。
    • 你好,我猜你的certificate 字段是一个关系字段——你能发布你的交易模型吗?它可能意味着类似于“resource:models.transactionsModel.certificate#cert2”等(即在 JSON 中发布关系字段的标准 URI 语法)
    • 抱歉回复晚了。我只是输入了我的证书错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多