重构和部署节点后消耗现有数据的问题

时间:2018-05-23 05:54:19

标签: corda

我使用创建了一个事务。之后,我对代码进行了一些更改,并成功构建和部署节点。我尝试使用以前创建的数据来创建新数据。但它导致合同约束失败错误。但是我在创建新数据时没有收到任何错误,并且在该实例中使用相同的错误来创建另一个事务。

1 个答案:

答案 0 :(得分:1)

<强> TransactionVerificationException.ContractConstraintRejection

当您在保管库中存在现有状态并更新合同代码并重新部署时,将引发此异常。

  1. 每次在节点启动时扫描CorDapp Jar并将具有Contract类的Jar上传到附件存储,并将Jar的hash用作Attachment ID以附加{{ 1}}到contract

  2. 现在,请考虑一下,您有第一个新版CorDapp - transaction是:Attachment ID

  3. 要在保险库上创建3B6CA18330500C738455444115C49769D54074CE3CFFB194D8943F34494DB0A4,您需要使用上面给出的State来构建transaction,Corda自动附加contract

  4. 然后,考虑一下,您更改了代码并重新部署了CorDapp,现在更改了jar哈希,新的Attachment ID是:Attachment ID

  5. 我的发现,当您创建任何新的交易时,Corda会使用新的/ F054BA8C1A67BAABF58539F8718B8A62DC770157D9F1D01434B86E73AD2A9217附加指定的Attachment ID

  6. 例如,您想要更新保管库中已存在的状态。

      

    一个。您创建了一个具有一个输入及其输出状态的事务。

         

    湾您已发送此交易以进行验证。

         

    ℃。有检查验证contract input state contract和当前Attachment Id transaction必须相同。

         

    d。但是现在Attachment Id指向 input stateAttachment ID指向 transaction。此处检查失败并抛出Attachment ID例外。