В моем скрипте аккаунта я хочу авторизовать транзакцию, когда ее вложение содержит правильный прообраз для значения keccak256, хранящегося в данных контракта.
Я использую wave-crypto для вычисления keccak256 строки base58 в JS исохранить его в хранилище данных:
const setDataTx = waves.data(
{
data: [
{ key: 'buyer', value: buyerAccount.keyPair.public },
{ key: 'seller', value: sellerAccount.keyPair.public },
{ key: 'verificationHash', value: crypto.keccak(VERIFICATION_STRING_BASE_58) },
{ key: 'blockUnlocked', value: 1000000},
],
timestamp: Date.now(),
chainId: 'T'
},
contractAccount.seed
);
Я использую следующий предикат в своем контракте RIDE:
sigVerify(t.bodyBytes, t.proofs[0], fromBase58String(buyerPub)) ||
(sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(sellerPub)) && ((lastBlock.height > blockUnlocked) || (keccak256(t.attachment) == verificationHash)))
Я проверил все условия, кроме keccak, - все они работают как задумано.Однако условие keccak не выполняется.Я полагаю, что это может быть несоответствие формата, но я не уверен, как отладить это.