Tron에서 transaction 확인하기

Tron에서 transaction 확인하기 updated_at: 2023-09-15 14:40

입금 - Transaction 확인하기

이전 장에서 지갑주소를 간단히 생성해 보았습니다.
여기서는 Nile 환경(테스트 환경)에서 만들어지 지갑으로 돈을 보내는 방법에 대해 설명 드리겠습니다.
먼저 테스트용 tron이 필요하겠죠?

테스트 코인 획득하기

우리는 Nile 에서 사용할 코인이 필요하므로 아래 Faucet 사이트로 들어가죠 https://nileex.io/join/getJoinPage 에서 이전에 생성한 주로를 입력하고 'Obtain" 버튼을 누르면 보인의 계좌로 Tron이 들어옮니다.

내 Account를 들어온 Tron 확인하기

Tron을 보냈는데 확인이 필요하겠죠 ?

const TronWeb = require('tronweb');
const TronGrid = require('trongrid');
const moment = require('moment-timezone');

..........
const tronWeb = new TronWeb({
  fullHost: 'https://nile.trongrid.io',
  headers: { "TRON-PRO-API-KEY": [Your TRON_API_KEY] },
})

const tronGrid = new TronGrid(tronWeb);
..........

// 내 주소
const address = [MY Tron Address];

// Transaction 목록 option
const options = {
  only_to: true,
  only_confirmed: true,
  limit: 100,
  order_by: 'timestamp,asc',
  min_timestamp: Date.now() - 60 000 // from a minute ago to go on
  min_timestamp: (moment().tz(process.env.timezone).unix() - 1800) * 1000 // 30분전
};


// TronGrid을 이용한 transaction가져오기
tronGrid.account.getTransactions(address, options, (err, transactions) => {
  for (const trans of transactions.data) {
    const txID = trans.txID;
    if (trans.raw_data.contract[0].type === 'TransferContract') {
      const to_address = trans.raw_data.contract[0].parameter.value.to_address;
      const amount = trans.raw_data.contract[0].parameter.value.amount;
      const from_address = trans.raw_data.contract[0].parameter.value.owner_address;
    }
  }
});

거래소에서는 어떻게 처리할까?

거래소에서는 수많은 accout가 존재하고 일일이 전송상태(입금여부)를 체크하기는 어려움이 있습니다.
Event Plugin 을 사용하여 실시간 Event를 수신하는 방식을 사용하는데 간단한 설명을 드리겠습니다.

Event Plugin Deployment (MongoDB)

위에 설명을 따라 Event Plugin을 설치한 후 필요한 이벤트만을 수신하여 처리하면 됩니다.
여기서 필요한 이벤트(gtrigggerName)은 transaction 이겠죠

간단한 플로우는 설치한 plugin에서 mongodb로 이벤트를 날려주고 그이벤트를 다시 nodeJs에서 받아서 처리하는 방식입니다.

const { MongoClient} = require('mongodb');
..........

const url = 'mongodb://' + MONGO_USER + ':' + MONGO_PASSWORD + '@' + MONGO_HOST + ':' + MONGO_PORT + '/' + MONGO_DATABASE;

const client = new MongoClient(
  url, 
  { useUnifiedTopology: true}, 
  { useNewUrlParser: true}, 
  { connectTimeoutMS: 30000}, 
  { keepAlive: 1 }
);

await client.connect();

const db = client.db(MONGO_DATABASE);
const collection = db.collection('transaction');
getStream(collection);

async function getStream(collection) {
  const changeStream = collection.watch(); // {contractType: 'TransferContract', result: 'SUCCESS', assetName: 'trx', assetAmount: {$ne: 1}}
  changeStream.on('change', next => {
    // process next document
    const doc = next.fullDocument;
    if (doc.contractType === 'TransferContract' && doc.result === 'SUCCESS' && doc.assetName === 'trx') {
      console.log( doc);
    }
  });
}
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글