Recevoir des notifications Telegram pour les transferts de Fan Tokens
Surveiller les transferts de Fan Token™ qui ont lieu sur Chiliz Chain est un excellent moyen de rester informé des mouvements de grande valeur et de tenir votre communauté au courant.
Avec un peu de configuration et de code, vous pouvez configurer un bot Telegram pour notifier un groupe chaque fois qu'un transfert de Fan Token™ dépasse un certain seuil.
Comment le faire en utilisant Envio ?
Envio est un outil d'indexation puissant qui permet aux développeurs d'écouter les événements des contrats intelligents sur Chiliz et d'exécuter une action basée sur l'événement.
Dans ce didacticiel, vous verrez comment configurer le bot, capturer les événements pertinents et déclencher automatiquement des alertes Telegram, transformant ainsi votre configuration en un « observateur de baleines » pour les transferts importants.
Étape 1 : Installer les prérequis
Avant de commencer, assurez-vous d'avoir les outils requis installés :
Étape 2 : Initialiser l'indexeur Envio
Exécutez la commande suivante pour initialiser un indexeur Envio et suivez les invites pour générer un modèle ERC20 sur Chiliz Chain (qui est une blockchain compatible EVM) :
pnpx envio initVoici les différentes sélections que vous devez faire lorsqu'on vous les demande :

Étape 3 : Configurer config.yaml
config.yamlModifiez le config.yaml fichier pour spécifier l'adresse du contrat du Fan Token™ du FC Barcelone (ou tout autre Fan Token™ que vous souhaitez suivre) :
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
name: fan-token-watcher
description: Un indexeur simple pour les Fan Tokens qui publie des notifications sur Telegram lors de gros transferts
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"Remarque : Nous supprimons l' approval événement car nous ne nous intéressons qu'aux transferts.
Étape 4 : Simplifier le schéma GraphQL
Modifiez le schema.graphql fichier pour ne suivre que les soldes des comptes :
type Account {
id: ID! # Adresse du compte
balance: BigInt! # Solde du compte en tokens
}À ce stade, nous avons un indexeur ERC20 qui écoute les événements.
Maintenant, ajoutons la logique pour publier des notifications Telegram.
Étape 5 : Implémenter la logique de notification Telegram
Modifiez le /src/EventHandlers.ts fichier pour inclure la logique de détection des gros transferts et d'envoi d'alertes Telegram.
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);
});Le /libs/ dossier peut être trouvé juste ici sur GitHub, y compris les helpers.ts et ens.ts fichiers.
Étape 6 : Configurer les constantes
Créer un constants.ts fichier pour stocker les variables d'environnement :
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;Étape 7 : Envoi des messages Telegram
Installez le client HTTP Axios:
pnpm i axiosCréez une fonction d'aide dans libs/telegram.ts pour envoyer des messages en utilisant Axios :
import 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("Erreur lors de l'envoi du message :", error);
}
};Étape 8 : Configuration finale et exécution de l'indexeur
Configurez .env Fichier
.env Fichiercp .env.example .envModifiez .env avec les informations d'identification de votre bot Telegram :
ENVIO_BOT_TOKEN=
ENVIO_TELEGRAM_CHANNEL_ID=
ENVIO_TELEGRAM_MESSAGE_THREAD_ID=
ENVIO_EXPLORER_URL="https://chiliscan.com/"
ENVIO_WHALE_THRESHOLD=1000Créer un bot Telegram
Message
@BotFathersur Telegram et exécutez :/newbotSuivez les invites pour obtenir le jeton de votre bot.
Ajoutez le bot à votre groupe Telegram et exécutez
/start.Visitez
https://api.telegram.org/bot<YourBOTToken>/getUpdatespour trouver l'ID du chat de groupe.
Si vous avez créé le nouveau groupe avec le bot et que vous n'obtenez que {"ok":true,"result":[]}, retirez le bot et ajoutez-le à nouveau au groupe.
Enfin, installez les dépendances et démarrez l'indexeur
pnpm i
pnpm envio devAvec cette configuration, vous disposez désormais d'un indexeur propulsé par Envio qui écoute les transferts de Fan Token et publie des alertes « baleine » sur Telegram.

Pour aller plus loin, vous pouvez auto-héberger l'indexeur ou le déployer sur le service hébergé d'Envio.
Et puisque nous sauvegardons les soldes, il peut également être utilisé comme une API GraphQL de soldes.
Mis à jour
Ce contenu vous a-t-il été utile ?