Расшифровка данных из необработанного tx
Предположим, мне нужно получить данные от объекта tx, который обычно выглядит так:
{
ins: [
{
hash: <Buffer c4 37 9e 8c 55 93 98 f1 e6 68 83 c8 cf f4 45 90 59 0d 64 e8 c8 93 c3 e4 59 3d bf 6d 25 19 e0 dc>,
index: 1,
script: <Buffer >,
sequence: 4294967280,
witness: [Array]
}
],
outs: [
{
value: 1000000,
script: <Buffer a9 14 c6 95 36 cc 29 d8 7f 20 3e 0f 8f 4e 9e 1a 21 a1 47 14 d9 00 87>
},
{
value: 240536,
script: <Buffer 00 14 01 8d 87 11 fa ff 3d ed 55 e7 61 4f 87 80 c2 f6 08 a7 8d d3>
},
{
value: 0,
script: <Buffer 6a 17 68 74 74 70 73 3a 2f 2f 74 62 74 63 2e 62 69 74 61 70 73 2e 63 6f 6d>
}
]
}
Как правило, мне нужно:
Извлечь параметр адреса из скрипта с помощью специальной библиотеки.
Убедитесь, что этот адрес соответствует адресу, который меня интересует.
Получите значение для этого адреса.
Отправьте адрес и значение на следующий шаг.
Бывают случаи, когда библиотека не может декодировать адрес из скрипта и вызывает ошибку. Вот почему я использую try-catch, чтобы пропустить эти случаи.
Просто мой код выглядит так:
for (i = 0; i < tx.outs.length; i++) {
try {
const address = bitcoin.address.fromOutputScript(tx.outs[i].script, network).toString();
if (!checkAddress(address)) {
return;
}
let txValue = tx.outs[i].value;
confirmTx(address, txValue);
} catch (e) {
logger.error(e)
}
}
Представьте, что у меня есть tx с несколькими объектами внутри массива out, один из которых хранит адрес, который я ищу. В большинстве случаев все работает хорошо, и confirmTx вызывается должным образом (только для этого адреса и значения).
Но проблема в том, что это может произойти, когда confirmTx вызывается с другим адресом и значением (и этот адрес не должен передавать checkAddress (address)).
Что может вызвать проблему?