TransactionVerificationException.ContractConstraintRejection
Это исключение выдается, когда в хранилище имеются существующие состояния, вы обновили код контракта и повторно развернули его.
Каждый раз при запуске узла сканируется CorDapp Jar, а Jar с классами Contract загружается в хранилище вложений, а hash
Jar используется как Attachment ID
для прикрепленияcontract
до transaction
.
Теперь рассмотрим, у вас есть первая свежая версия CorDapp - Attachment ID
это: 3B6CA18330500C738455444115C49769D54074CE3CFFB194D8943F34494DB0A4
Для создания State
В хранилище вы создаете transaction
, Corda, автоматически присоединяющий contract
, используя Attachment ID
, как указано выше.
Затем, предположим, вы изменили код и повторно использовалиCorDapp, теперь jar-хэш изменен, новый Attachment ID
: F054BA8C1A67BAABF58539F8718B8A62DC770157D9F1D01434B86E73AD2A9217
Мой вывод при создании любой новой транзакции Corda использует новую / недавнююAttachment ID
для прикрепления указанного contract
.
Например, Вы хотите обновить состояние, уже имеющееся в хранилище.
a.Вы создали транзакцию с одним входом и состоянием выхода.
б.Вы отправили эту транзакцию для проверки.
c.Есть проверка, подтверждающая, что input state
contract
Attachment Id
и текущий transaction
Attachment Id
должны быть одинаковыми.
д.Но прямо сейчас input state
указывает на старый Attachment ID
и transaction
указывает новый Attachment ID
.Здесь проверка завершается неудачно и выдает TransactionVerificationException.ContractConstraintRejection
исключение.