Impossibile leggere la transazione dal Tangle
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
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))