我使用创建了一个事务。之后,我对代码进行了一些更改,并成功构建和部署节点。我尝试使用以前创建的数据来创建新数据。但它导致合同约束失败错误。但是我在创建新数据时没有收到任何错误,并且在该实例中使用相同的错误来创建另一个事务。
答案 0 :(得分:1)
<强> TransactionVerificationException.ContractConstraintRejection 强>
当您在保管库中存在现有状态并更新合同代码并重新部署时,将引发此异常。
每次在节点启动时扫描CorDapp Jar并将具有Contract类的Jar上传到附件存储,并将Jar的hash
用作Attachment ID
以附加{{ 1}}到contract
。
现在,请考虑一下,您有第一个新版CorDapp - transaction
是:Attachment ID
要在保险库上创建3B6CA18330500C738455444115C49769D54074CE3CFFB194D8943F34494DB0A4
,您需要使用上面给出的State
来构建transaction
,Corda自动附加contract
。
然后,考虑一下,您更改了代码并重新部署了CorDapp,现在更改了jar哈希,新的Attachment ID
是:Attachment ID
我的发现,当您创建任何新的交易时,Corda会使用新的/ F054BA8C1A67BAABF58539F8718B8A62DC770157D9F1D01434B86E73AD2A9217
附加指定的Attachment ID
。
例如,您想要更新保管库中已存在的状态。
一个。您创建了一个具有一个输入及其输出状态的事务。
湾您已发送此交易以进行验证。
℃。有检查验证
contract
input state
contract
和当前Attachment Id
transaction
必须相同。d。但是现在
Attachment Id
指向旧input state
和Attachment ID
指向新transaction
。此处检查失败并抛出Attachment ID
例外。