Não é possível ler a transação do Tangle

Aug 25 2020

Ao seguir o guia IOTA JavaScript , alterei o nó de exemplo para um nó de rede principal -https://nodes.thetangle.org:443e recebi a seguinte mensagem de erro abaixo. Como faço para que as mensagens da rede principal sejam exibidas? Peço desculpas se isso parece um pouco rudimentar, mas estou simplesmente tentando entender tudo isso. Obrigado pela sua resposta com antecedência.

const Iota = require('@iota/core');
const Extract = require('@iota/extract-json');

// Connect to a node
const iota = Iota.composeAPI({
  provider: 'https://nodes.iota.org:443'
});

// Define the tail transaction hash of the bundle whose messages you want to read
const tailTransactionHash =
    'UKPUW9NQYXBWXAURISOSCUNFMLSFWKNO9WJOGTEJRCTLJFEIKVBXGUVRAJKZWWMUKDCWLKBJNOYIA9999';

// Get the transaction objects in the bundle
iota.getBundle(tailTransactionHash)
  .then(bundle => {
    // Extract and parse the JSON messages from the transactions' `signatureMessageFragment` fields
    console.log(JSON.parse(Extract.extractJson(bundle)));
  })
  .catch(err => {
    console.error(err);
  });

Mensagem de erro:

PS C:\IOTA> node Hello_World_Test.js
Error: Invalid JSON encoded message
    at Object.exports.extractJson (C:\IOTA\node_modules\@iota\extract-json\out\extract-json\src\index.js:80:15)
    at C:\IOTA\Hello_World_Test.js:21:36
    at tryCatcher (C:\IOTA\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (C:\IOTA\node_modules\bluebird\js\release\promise.js:547:31)
    at Promise._settlePromise (C:\IOTA\node_modules\bluebird\js\release\promise.js:604:18)
    at Promise._settlePromise0 (C:\IOTA\node_modules\bluebird\js\release\promise.js:649:10)
    at Promise._settlePromises (C:\IOTA\node_modules\bluebird\js\release\promise.js:729:18)
    at _drainQueueStep (C:\IOTA\node_modules\bluebird\js\release\async.js:93:12)
    at _drainQueue (C:\IOTA\node_modules\bluebird\js\release\async.js:86:9)
    at Async._drainQueues (C:\IOTA\node_modules\bluebird\js\release\async.js:102:5)
    at Immediate.Async.drainQueues [as _onImmediate] (C:\IOTA\node_modules\bluebird\js\release\async.js:15:14)
    at processImmediate (internal/timers.js:456:21)

Respostas

1 mihi Aug 25 2020 at 03:40

O módulo '@iota/extract-json' fornece uma maneira de codificar JSON arbitrário (de comprimento arbitrário) em um pacote IOTA e decodificá-lo a partir daí novamente. A decodificação requer que as transações tenham sido realmente construídas da mesma maneira.

As transações IOTA têm outras maneiras de incorporar algum texto, sendo a mais antiga colocá-las diretamente em trytes (apenas letras maiúsculas e 9 permitidas), a próxima sendo Converter.asciiToTrytes.

Como você pode ver em thetangle.org , sua transação usa uma mensagem de texto simples (você tem as opções de mostrar "Texto" ou "Trytes", mas apenas "Texto" mostra um texto significativo). No caso de mensagens codificadas em JSON, também haveria uma opção "JSON".

Portanto, a mensagem de erro é esperada. Assim como seu programa editor de imagem mostraria um erro se você abrisse um documento do Word nele.

Você pode obter os trytes de sua transação como

console.log(bundle[0].signatureMessageFragment);

e a mensagem de texto como

const Converter = require('@iota/converter');

Converter.trytesToAscii(bundle[0].signatureMessageFragment.substring(0,2186))