Tron에서 TRC 20 토큰 다루기

Tron에서 TRC 20 토큰 다루기 updated_at: 2023-09-15 14:46

USDT 처리하기 (TRC20)

TRC20의 대표격이 USDT를 Tron에서 다루는 법을 설명 드리겠습니다.
이전에 설명드린 TRX와 유사하므로 중복되는 설명은 피하도록 하겠습니다.
USDT도 TRC20 토큰이므로 Contract를 활용한다는 것만 주의 하시면 됩니다.

테스트 코인 획득하기

우리는 Nile 에서 사용할 코인이 필요하므로 아래 Faucet 사이트로 들어가죠 https://nileex.io/join/getJoinPage 에서 Trx와 마찬가지로 USDT도 획득할 수 있습니다.

일반적인 세팅

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

const tronGrid = new TronGrid(tronWeb);

// const trc20ContractAddress = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'; //Main Network 에서의 USDT Contract Address
const trc20ContractAddress = 'TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj'; //Nile 에서의 USDT Contract Address
const contract = await tronWeb.contract().at(trc20ContractAddress);

잔고조회

await tronWeb.setAddress(trc20ContractAddress);


const contraceBalance = await contract.balanceOf([Your Wallet Account]).call();

const balance = parseInt(contraceBalance._hex, 16);

USDT 전송

const decimals = await contract.decimals().call();

const amountUsdt = amount * Math.pow(10, decimals);

const txid = await contract.transfer(
to, // address _spender
amountUsdt // amount
).send();

USDT Transfer 수신

contract 는 watch만 하고 있다가 본인의 주소와 같은 경우 그 값을 입력 받으면 된다.

await contract && contract.Transfer().watch((err, event) => {
  const from = tronWeb.address.fromHex(event.result.from);
  const to = tronWeb.address.fromHex(event.result.to);
  const value = event.result.value / 1000000;

  if (event.name === 'Transfer') {
    if (to === [Your Account Address]) {
    }
  }      
});

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

앞서 TRX 를 mongodb의 event를 이용해서 처리하는 방식을 설명했는데 USDT도 이와 유사하게 구현 가능합니다.

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('contractevent'); // TRX는 transaction 을 넣어줌
getStream(collection);

async function getStream(collection) {
  const changeStream = collection.watch();
  changeStream.on('change', next => {
    // process next document
    const doc = next.fullDocument;
    if (doc.eventName === 'Transfer' && doc.contractAddress === trc20ContractAddress) { // 이 부분도 TRX 와 다른 부분
      console.log( doc);
    }
  });
}
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글