Impossibile leggere la transazione dal Tangle

Aug 25 2020

Mentre seguivo la guida JavaScript IOTA , ho cambiato il nodo di esempio in un nodo di rete principale -https://nodes.thetangle.org:443e ha ricevuto il seguente messaggio di errore di seguito. Come faccio a visualizzare i messaggi dalla rete principale? Mi scuso se questo sembra un po' rudimentale ma sto semplicemente cercando di capire tutto questo. Grazie per la tua risposta in anticipo.

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);
  });

Messaggio di errore:

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)

Risposte

1 mihi Aug 25 2020 at 03:40

Il modulo '@iota/extract-json' fornisce un modo per codificare JSON arbitrario (di lunghezza arbitraria) in un bundle IOTA e decodificarlo nuovamente da lì. La decodifica richiede che le transazioni siano state effettivamente costruite allo stesso modo.

Le transazioni IOTA hanno altri modi per incorporare del testo, il più vecchio è inserirli direttamente in trytes (sono consentite solo lettere maiuscole e 9), il successivo è Converter.asciiToTrytes.

Come puoi vedere su thetangle.org , la tua transazione utilizza un semplice messaggio di testo (hai le opzioni per mostrare "Testo" o "Trytes", ma solo "Testo" mostra testo significativo). Nel caso di messaggi con codifica JSON, ci sarebbe anche un'opzione "JSON".

Pertanto è previsto il messaggio di errore. Proprio come il tuo programma di editor di immagini mostrerebbe un errore se aprissi un documento Word al suo interno.

Puoi ottenere i tentativi della tua transazione come

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

e il messaggio di testo come

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

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