Декодирование данных из необработанного текста - PullRequest
1 голос
/ 27 января 2020

Предположим, мне нужно получить данные от объекта 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>
    }
  ]
 }

Как правило, мне нужно:

  1. Извлечение параметра адреса из сценария с использованием специальной библиотеки.

  2. Убедитесь, что этот адрес соответствует адресу, который мне интересен.

  3. Получить значение для этого адреса.

  4. Отправить адрес и значение на следующий шаг.

В некоторых случаях библиотека не может декодировать адрес из скрипта и выдавать ошибку. Вот почему я использую 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 с несколькими объектами внутри массива аутов, один из которых хранит адрес, который я ищу. В большинстве случаев все работает хорошо, и verifyTx вызывается, как и ожидалось (только для этого адреса и значения).

Но проблема в том, что это может произойти, если verifyTx вызывается с другим адресом и значением (и этот адрес не должен проходить checkAddress (address) ).

Что может вызвать проблему?

...