Dans le domaine de la blockchain, l’oracle machine est un système qui fournit avec précision des données du monde réel à des contrats intelligents. L’oracle machine fonctionne essentiellement comme un middleware essentiel pour combler le fossé entre la blockchain et les informations du monde réel, constituant une infrastructure indispensable pour soutenir l’écosystème des applications décentralisées (DApps).
Qu’est-ce qu’un oracle machine : système d’intermédiation d’informations pour la blockchain
Lors de l’exécution d’un contrat intelligent, la plupart nécessitent l’accès à des données externes. Par exemple, pour construire un contrat intelligent de dérivés de futures sur le pétrole brut sur le réseau Ethereum, il faut des données sur la quantité de pétrole échangée à une date spécifique. Cependant, comme le contrat intelligent lui-même est limité à un environnement on-chain, il ne peut pas accéder directement à ces informations hors chaîne. C’est ici que l’oracle machine intervient.
Concrètement, le contrat intelligent décrit une requête pour les données nécessaires dans un journal d’événements. Ensuite, un processus fonctionnant hors chaîne surveille ce journal, analyse le contenu de la requête, puis, via une API externe, récupère les données requises, diffuse la transaction pour transmettre ces données sur la chaîne, et exécute la fonction de rappel du contrat intelligent. Grâce à ce processus, le contrat intelligent peut accéder à des informations externes fiables.
La position de Chainlink sur le marché et le token LINK
Dans le secteur de la blockchain, dans le domaine des oracles décentralisés, Chainlink détient la plus grande part de marché. Le rôle du projet Chainlink est de fournir des données générées dans le monde réel à la blockchain de la manière la plus sûre et fiable. Le projet a construit un écosystème vertueux centré sur le token LINK, via un mécanisme d’incitation économique.
Données actuelles du marché du token LINK (au 21 janvier 2026) :
Prix actuel : 12,25$
Variation sur 24h : -2,14%
Volume de trading sur 24h : 4,32 M$
Capitalisation boursière en circulation : 8,68 milliards $
Part de marché : 0,38%
L’oracle machine de Chainlink est déclenché par le transfert du token LINK. Ce token est un contrat intelligent basé sur ERC677 fonctionnant sur le réseau Ethereum. La fonction de l’oracle basé sur LINK est généralement classée dans un modèle de requête/réponse.
L’innovation apportée par la norme ERC677
La conception de la méthode transferAndCall
Le problème fondamental de l’oracle machine est que l’utilisateur doit payer des frais de service au fournisseur (oracle). Cependant, la norme standard ERC20 ne propose qu’une fonction de transfert simple, incapable de satisfaire la double exigence de paiement et de requête de service simultanés.
C’est pourquoi Chainlink a proposé la norme ERC677. Cette norme ajoute la méthode transferAndCall à l’ERC20 traditionnel, permettant de réaliser le transfert de tokens et la requête de service en une seule transaction. Lorsqu’un utilisateur exécute transferAndCall, en plus du transfert ERC20 classique, le contrat vérifie si l’adresse de réception est un contrat (et non un compte externe détenu par un utilisateur). Si c’est le cas, la méthode onTokenTransfer de ce contrat est automatiquement appelée.
Grâce à cette conception, le paiement et l’appel de fonction sont intégrés, permettant une implémentation efficace de la logique métier de l’oracle machine.
La structure de sécurité à plusieurs couches
Avant d’utiliser un service oracle, l’utilisateur doit vérifier si cet oracle est fiable. Chainlink est conçu pour permettre à quiconque de participer en tant que fournisseur de services oracle, ce qui augmente la transparence et la vérifiabilité du système, renforçant ainsi sa fiabilité.
Flux de traitement des requêtes on-chain
Mécanisme d’acceptation des requêtes par le contrat Oracle
Lorsque le consommateur de l’oracle utilise la méthode transferAndCall pour payer et demander le service oracle, l’adresse de destination de la requête est celle du contrat oracle. La méthode onTokenTransfer du contrat Oracle effectue plusieurs vérifications progressives :
D’abord, elle vérifie si la transaction provient du contrat LINK (avec le modificateur onlyLINK), en comparant msg.sender à l’adresse du contrat LINK. Ensuite, elle vérifie si la longueur du payload (_data) ne dépasse pas une limite. Enfin, elle vérifie si le _data commence par le sélecteur de fonction “oracleRequest”.
Si ces vérifications de sécurité sont passées, le contrat Oracle appelle la méthode oracleRequest via delegatecall, ce qui exécute en réalité la fonction oracleRequest.
Génération et enregistrement de l’ID de requête
Dans la méthode oracleRequest, les opérations suivantes sont effectuées dans l’ordre :
L’ID de requête unique est généré en concaténant le nonce envoyé par l’oracle (l’utilisateur) avec l’identifiant de l’expéditeur, puis en le traitant via une fonction de hachage. On vérifie dans la mapping commitment que cet ID n’existe pas déjà, garantissant ainsi l’unicité.
Après validation, une expiration est fixée, et une valeur combinant _payment, _callbackAddress, _callbackFunctionId, et expiration est enregistrée dans la mapping commitment. La étape cruciale consiste à émettre un événement OracleRequest contenant la requête encodée en CBOR (Concise Binary Object Representation), un format binaire léger et efficace, permettant un échange de données performant.
Mécanisme de réponse des nœuds hors chaîne
Vérification et exécution de fulfillOracleRequest
Les nœuds Chainlink opérant hors chaîne surveillent l’événement OracleRequest. Lorsqu’ils le détectent, ils effectuent plusieurs vérifications importantes avant de renvoyer les données sur la blockchain.
D’abord, ils vérifient si l’appel provient du propriétaire du contrat ou d’une liste de nœuds autorisés (avec le modificateur onlyAuthorizedNode). Ensuite, ils vérifient si le requestId fourni existe dans la mapping commitment, et si ses valeurs associées (_payment, _callbackAddress, _callbackFunctionId, expiration) correspondent à celles enregistrées. La fonction isValidRequest effectue cette vérification.
Si tout est conforme, le montant dû pour cette requête est accumulé dans drawableTokens, puis le requestId est supprimé de la mapping commitment. Enfin, ils vérifient si le gaz restant est suffisant pour exécuter la fonction de rappel du contrat d’origine, en comparant avec le minimum requis (MINIMUM_CONSUMER_GAS_LIMIT).
Une fois toutes ces vérifications passées, ils appellent la fonction de rappel du contrat utilisateur via call, en lui transmettant les données obtenues.
Modèle d’implémentation de la fonction de rappel
À partir de l’événement OracleRequest, on peut obtenir l’ID de la fonction de rappel (ex : 6A9705B4) et la signature correspondante (ex : chainlinkCallback(bytes32,int256)). Le contrat consommateur recevant la donnée implémente une fonction de validation comme validateChainlinkCallback.
Cette fonction vérifie si le requestId en attente dans pendingRequests existe bien et provient de l’oracle attendu. Si la vérification est réussie, l’événement ChainlinkFulfilled est émis, et la réponse peut être traitée davantage. La mapping de réponse est mise à jour, et si c’est un oracle de prix, la variable currentPrice reçoit la nouvelle valeur, déclenchant la mise à jour du prix.
Modèle d’implémentation pour les oracles de prix
Interface Aggregator et flux de prix
Ce processus constitue le flux complet d’un service oracle universel. Cependant, Chainlink propose une implémentation plus simple pour ses oracles de prix.
Pour chaque paire de trading (ETH/USD, BTC/USD, etc.), il existe un feed de prix spécifique (Aggregator ou son proxy AggregatorProxy). Cette interface propose plusieurs méthodes standardisées.
Principales méthodes de requête :
decimals() - indique la précision des données de prix (habituellement 8 ou 18)
description() - retourne le nom de la paire (ex : ETH/USD)
version() - identifie la version de l’agrégateur ou du proxy
getRoundData(_roundId) - récupère les données pour un round spécifique
latestRoundData() - récupère la dernière donnée de prix
Bonnes pratiques d’implémentation
Dans la majorité des scénarios d’application, le contrat n’a besoin que de lire le prix actuel, en appelant simplement latestRoundData(). La valeur retournée inclut le prix le plus récent.
De plus, beaucoup d’applications utilisent le prix en USD pour l’affichage. Dans ce cas, la précision pour la paire USD est généralement fixée à 8 chiffres, ce qui simplifie la gestion. Si différentes paires ont des précisions différentes, la méthode decimals() permet de s’adapter.
Ainsi, l’oracle Chainlink ne se limite pas à un simple intermédiaire de données, mais fournit une infrastructure fiable et avancée, comme les oracles de prix, pour soutenir un écosystème blockchain robuste et pratique dans le domaine financier.
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
Machine d'oracle Chainlink : un mécanisme reliant les contrats intelligents au monde extérieur à la blockchain
Dans le domaine de la blockchain, l’oracle machine est un système qui fournit avec précision des données du monde réel à des contrats intelligents. L’oracle machine fonctionne essentiellement comme un middleware essentiel pour combler le fossé entre la blockchain et les informations du monde réel, constituant une infrastructure indispensable pour soutenir l’écosystème des applications décentralisées (DApps).
Qu’est-ce qu’un oracle machine : système d’intermédiation d’informations pour la blockchain
Lors de l’exécution d’un contrat intelligent, la plupart nécessitent l’accès à des données externes. Par exemple, pour construire un contrat intelligent de dérivés de futures sur le pétrole brut sur le réseau Ethereum, il faut des données sur la quantité de pétrole échangée à une date spécifique. Cependant, comme le contrat intelligent lui-même est limité à un environnement on-chain, il ne peut pas accéder directement à ces informations hors chaîne. C’est ici que l’oracle machine intervient.
Concrètement, le contrat intelligent décrit une requête pour les données nécessaires dans un journal d’événements. Ensuite, un processus fonctionnant hors chaîne surveille ce journal, analyse le contenu de la requête, puis, via une API externe, récupère les données requises, diffuse la transaction pour transmettre ces données sur la chaîne, et exécute la fonction de rappel du contrat intelligent. Grâce à ce processus, le contrat intelligent peut accéder à des informations externes fiables.
La position de Chainlink sur le marché et le token LINK
Dans le secteur de la blockchain, dans le domaine des oracles décentralisés, Chainlink détient la plus grande part de marché. Le rôle du projet Chainlink est de fournir des données générées dans le monde réel à la blockchain de la manière la plus sûre et fiable. Le projet a construit un écosystème vertueux centré sur le token LINK, via un mécanisme d’incitation économique.
Données actuelles du marché du token LINK (au 21 janvier 2026) :
L’oracle machine de Chainlink est déclenché par le transfert du token LINK. Ce token est un contrat intelligent basé sur ERC677 fonctionnant sur le réseau Ethereum. La fonction de l’oracle basé sur LINK est généralement classée dans un modèle de requête/réponse.
L’innovation apportée par la norme ERC677
La conception de la méthode transferAndCall
Le problème fondamental de l’oracle machine est que l’utilisateur doit payer des frais de service au fournisseur (oracle). Cependant, la norme standard ERC20 ne propose qu’une fonction de transfert simple, incapable de satisfaire la double exigence de paiement et de requête de service simultanés.
C’est pourquoi Chainlink a proposé la norme ERC677. Cette norme ajoute la méthode transferAndCall à l’ERC20 traditionnel, permettant de réaliser le transfert de tokens et la requête de service en une seule transaction. Lorsqu’un utilisateur exécute transferAndCall, en plus du transfert ERC20 classique, le contrat vérifie si l’adresse de réception est un contrat (et non un compte externe détenu par un utilisateur). Si c’est le cas, la méthode onTokenTransfer de ce contrat est automatiquement appelée.
Grâce à cette conception, le paiement et l’appel de fonction sont intégrés, permettant une implémentation efficace de la logique métier de l’oracle machine.
La structure de sécurité à plusieurs couches
Avant d’utiliser un service oracle, l’utilisateur doit vérifier si cet oracle est fiable. Chainlink est conçu pour permettre à quiconque de participer en tant que fournisseur de services oracle, ce qui augmente la transparence et la vérifiabilité du système, renforçant ainsi sa fiabilité.
Flux de traitement des requêtes on-chain
Mécanisme d’acceptation des requêtes par le contrat Oracle
Lorsque le consommateur de l’oracle utilise la méthode transferAndCall pour payer et demander le service oracle, l’adresse de destination de la requête est celle du contrat oracle. La méthode onTokenTransfer du contrat Oracle effectue plusieurs vérifications progressives :
D’abord, elle vérifie si la transaction provient du contrat LINK (avec le modificateur onlyLINK), en comparant msg.sender à l’adresse du contrat LINK. Ensuite, elle vérifie si la longueur du payload (_data) ne dépasse pas une limite. Enfin, elle vérifie si le _data commence par le sélecteur de fonction “oracleRequest”.
Si ces vérifications de sécurité sont passées, le contrat Oracle appelle la méthode oracleRequest via delegatecall, ce qui exécute en réalité la fonction oracleRequest.
Génération et enregistrement de l’ID de requête
Dans la méthode oracleRequest, les opérations suivantes sont effectuées dans l’ordre :
L’ID de requête unique est généré en concaténant le nonce envoyé par l’oracle (l’utilisateur) avec l’identifiant de l’expéditeur, puis en le traitant via une fonction de hachage. On vérifie dans la mapping commitment que cet ID n’existe pas déjà, garantissant ainsi l’unicité.
Après validation, une expiration est fixée, et une valeur combinant _payment, _callbackAddress, _callbackFunctionId, et expiration est enregistrée dans la mapping commitment. La étape cruciale consiste à émettre un événement OracleRequest contenant la requête encodée en CBOR (Concise Binary Object Representation), un format binaire léger et efficace, permettant un échange de données performant.
Mécanisme de réponse des nœuds hors chaîne
Vérification et exécution de fulfillOracleRequest
Les nœuds Chainlink opérant hors chaîne surveillent l’événement OracleRequest. Lorsqu’ils le détectent, ils effectuent plusieurs vérifications importantes avant de renvoyer les données sur la blockchain.
D’abord, ils vérifient si l’appel provient du propriétaire du contrat ou d’une liste de nœuds autorisés (avec le modificateur onlyAuthorizedNode). Ensuite, ils vérifient si le requestId fourni existe dans la mapping commitment, et si ses valeurs associées (_payment, _callbackAddress, _callbackFunctionId, expiration) correspondent à celles enregistrées. La fonction isValidRequest effectue cette vérification.
Si tout est conforme, le montant dû pour cette requête est accumulé dans drawableTokens, puis le requestId est supprimé de la mapping commitment. Enfin, ils vérifient si le gaz restant est suffisant pour exécuter la fonction de rappel du contrat d’origine, en comparant avec le minimum requis (MINIMUM_CONSUMER_GAS_LIMIT).
Une fois toutes ces vérifications passées, ils appellent la fonction de rappel du contrat utilisateur via call, en lui transmettant les données obtenues.
Modèle d’implémentation de la fonction de rappel
À partir de l’événement OracleRequest, on peut obtenir l’ID de la fonction de rappel (ex : 6A9705B4) et la signature correspondante (ex : chainlinkCallback(bytes32,int256)). Le contrat consommateur recevant la donnée implémente une fonction de validation comme validateChainlinkCallback.
Cette fonction vérifie si le requestId en attente dans pendingRequests existe bien et provient de l’oracle attendu. Si la vérification est réussie, l’événement ChainlinkFulfilled est émis, et la réponse peut être traitée davantage. La mapping de réponse est mise à jour, et si c’est un oracle de prix, la variable currentPrice reçoit la nouvelle valeur, déclenchant la mise à jour du prix.
Modèle d’implémentation pour les oracles de prix
Interface Aggregator et flux de prix
Ce processus constitue le flux complet d’un service oracle universel. Cependant, Chainlink propose une implémentation plus simple pour ses oracles de prix.
Pour chaque paire de trading (ETH/USD, BTC/USD, etc.), il existe un feed de prix spécifique (Aggregator ou son proxy AggregatorProxy). Cette interface propose plusieurs méthodes standardisées.
Principales méthodes de requête :
Bonnes pratiques d’implémentation
Dans la majorité des scénarios d’application, le contrat n’a besoin que de lire le prix actuel, en appelant simplement latestRoundData(). La valeur retournée inclut le prix le plus récent.
De plus, beaucoup d’applications utilisent le prix en USD pour l’affichage. Dans ce cas, la précision pour la paire USD est généralement fixée à 8 chiffres, ce qui simplifie la gestion. Si différentes paires ont des précisions différentes, la méthode decimals() permet de s’adapter.
Ainsi, l’oracle Chainlink ne se limite pas à un simple intermédiaire de données, mais fournit une infrastructure fiable et avancée, comme les oracles de prix, pour soutenir un écosystème blockchain robuste et pratique dans le domaine financier.