Tangle에서 트랜잭션을 읽을 수 없습니다.

Aug 25 2020

IOTA JavaScript 가이드를 따르는 동안 예제 노드를 메인 넷 노드로 변경했습니다.https://nodes.thetangle.org:443다음과 같은 오류 메시지를 받았습니다. 메인 넷에서 메시지를 표시하려면 어떻게해야합니까? 조금 초보적인 것 같으면 사과 드리지만,이 모든 것을 이해하려고 노력하고 있습니다. 미리 답변 해 주셔서 감사합니다.

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

에러 메시지:

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)

답변

1 mihi Aug 25 2020 at 03:40

'@ iota / extract-json'모듈은 임의의 JSON (임의 길이)을 IOTA 번들로 인코딩하고 거기에서 다시 디코딩하는 방법을 제공합니다. 디코딩을 위해서는 트랜잭션이 실제로 동일한 방식으로 구축되어야합니다.

IOTA 트랜잭션에는 텍스트를 삽입하는 다른 방법이 있습니다. 가장 오래된 것은 직접 trytes에 넣는 것입니다 (대문자와 9 개만 허용됨), 다음은 Converter.asciiToTrytes.

thetangle.org 에서 볼 수 있듯이 거래는 간단한 텍스트 메시지를 사용합니다 ( "Text"또는 "Trytes"를 표시하는 옵션이 있지만 "Text"만 의미있는 텍스트를 표시 함). JSON 인코딩 메시지의 경우 "JSON"옵션도 있습니다.

따라서 오류 메시지가 예상됩니다. 이미지 편집기 프로그램에서 Word 문서를 열면 오류가 표시되는 것과 같습니다.

거래의 trytes를 다음과 같이 얻을 수 있습니다.

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

그리고 문자 메시지는

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

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