tonweb
Version:
TonWeb - JavaScript API for TON blockchain
63 lines (56 loc) • 2.48 kB
JavaScript
const TonWeb = require("./index");
const {SubscriptionContract} = require("./contract/subscription");
const getRawBody = (msg) => {
const msg_data = msg?.msg_data;
if (msg_data && msg_data['@type'] === 'msg.dataRaw' && msg_data.body) {
return msg_data.body;
}
return null;
}
async function init() {
const tonweb = new TonWeb(new TonWeb.HttpProvider('https://toncenter.com/api/v2/jsonRPC'));
const txs = await tonweb.getTransactions('EQAtPMPoGXJzm6zvqeRcK6IzgJa8RpISp0xpMPgOgj5ggPtQ');
// console.log(txs)
for (let tx of txs) {
if (!tx.in_msg.source) { // external message
const rawBody = getRawBody(tx.in_msg);
if (rawBody) {
const cell = TonWeb.boc.Cell.oneFromBoc(TonWeb.utils.base64ToBytes(rawBody));
const body = cell.bits.array;
const offset = 512 / 8 + 32 / 8 + 32 / 8 + 32 / 8; // signature 512bit, walletId 32bit, valid_until 32bit, seqno 32bit
const op = body[offset];
const success = tx.out_msgs.length > 0;
if (op === 0) {
console.log('simple transfer', {success});
} else if (op === 1) {
console.log('deployAndInstallPlugin', {success});
} else if (op === 2) {
console.log('installPlugin', {success});
} else if (op === 3) {
console.log('removePlugin', {success});
} else {
console.log('unknown op of external msg ', op)
}
} else {
console.log('no-op or invalid external message');
}
} else { // internal
const rawBody = getRawBody(tx.in_msg);
if (rawBody && tx.out_msgs.length > 0) {
const outMsg = tx.out_msgs[0];
const ourRawBody = getRawBody(outMsg);
const outCell = TonWeb.boc.Cell.oneFromBoc(TonWeb.utils.base64ToBytes(ourRawBody));
const outBody = outCell.bits.array;
const op = TonWeb.utils.bytesToHex(outBody.slice(0, 4)); // in hex
if (op === 'f06c7567') {
console.log('payment wallet -> subscription')
} else {
console.log('unknown op ' + op)
}
} else {
console.log('simple inbound transfer')
}
}
}
}
init();