Fan Token 전송 Telegram 알림 받기
Envio 인덱서를 사용하여 Fan Token 전송에 대한 Telegram 고래 감시 봇을 설정합니다. Chiliz Chain에서 전송 이벤트를 캡처하고 임계값 초과 시 알림을 트리거합니다.
마지막 업데이트
도움이 되었나요?
도움이 되었나요?
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
name: fan-token-watcher
description: A simple indexer for Fan Tokens that posts notifications to Telegram on large transfers
networks:
- id: 8888 # Chiliz
start_block: 0
contracts:
- name: ERC20
address: "0xFD3C73b3B09D418841dd6Aff341b2d6e3abA433b" # FC Barcelona
handler: src/EventHandlers.ts
events:
- event: "Transfer(address indexed from, address indexed to, uint256 value)"
field_selection:
transaction_fields:
- "hash"type Account {
id: ID! # 계정 주소
balance: BigInt! # 토큰 계정 잔액
}import { ERC20 } from "generated";
import { isIndexingAtHead, indexBalances } from "./libs/helpers";
import { fetchEnsHandle } from "./libs/ens";
import { sendMessageToTelegram } from "./libs/telegram";
import { WHALE_THRESHOLD, explorerUrlAddress, explorerUrlTx } from "./constants";
ERC20.Transfer.handler(async ({ event, context }) => {
if (isIndexingAtHead(event.block.timestamp) && event.params.value >= BigInt(WHALE_THRESHOLD)) {
const ensHandleOrFromAddress = await fetchEnsHandle(event.params.from);
const ensHandleOrToAddress = await fetchEnsHandle(event.params.to);
const msg = `FC Barcelona WHALE ALERT 🐋: A new transfer has been made by <a href="${explorerUrlAddress(
event.params.from
)}">${ensHandleOrFromAddress}</a> to <a href="${explorerUrlAddress(
event.params.to
)}">${ensHandleOrToAddress}</a> for ${event.params.value} FC Barcelona! 🔥 - <a href="${explorerUrlTx(
event.transaction.hash
)}">transaction</a>`;
await sendMessageToTelegram(msg);
}
await indexBalances(context, event);
});export const EXPLORER_URL_MONAD = process.env.ENVIO_EXPLORER_URL_MONAD;
export const WHALE_THRESHOLD: string = process.env.ENVIO_WHALE_THRESHOLD ?? "1000";
export const BOT_TOKEN = process.env.ENVIO_BOT_TOKEN;
export const CHANNEL_ID = process.env.ENVIO_TELEGRAM_CHANNEL_ID;
export const MESSAGE_THREAD_ID = process.env.ENVIO_TELEGRAM_MESSAGE_THREAD_ID;
export const explorerUrlAddress = (address: string) =>
EXPLORER_URL_MONAD + "address/" + address;
export const explorerUrlTx = (txHash: string) =>
EXPLORER_URL_MONAD + "tx/" + txHash;pnpm i axiosimport axios from "axios";
import { CHANNEL_ID, MESSAGE_THREAD_ID, BOT_TOKEN } from "../constants";
export const sendMessageToTelegram = async (message: string): Promise<void> => {
try {
const apiUrl = `https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`;
await axios.post(apiUrl, {
chat_id: CHANNEL_ID,
text: message,
parse_mode: "HTML",
});
} catch (error) {
console.error("Error sending message:", error);
}
};cp .env.example .envENVIO_BOT_TOKEN=
ENVIO_TELEGRAM_CHANNEL_ID=
ENVIO_TELEGRAM_MESSAGE_THREAD_ID=
ENVIO_EXPLORER_URL="https://chiliscan.com/"
ENVIO_WHALE_THRESHOLD=1000/newbotpnpm i
pnpm envio dev