Sous le capot de l'ordinateur mondial
Ethereum est souvent appelé l'« ordinateur mondial ». Mais contrairement à un serveur traditionnel, chaque interaction sur Ethereum est définie par un ensemble de protocoles stricts de bas niveau qui garantissent que chaque nœud du réseau parvient au même état.
Pour les développeurs et les utilisateurs avancés, la compréhension de ces protocoles — ABI, RLP et bytecode EVM — est essentielle pour déboguer les transactions, interagir avec les contrats intelligents et optimiser l'utilisation du gaz. Ce guide détaille les fondements techniques de l'écosystème Ethereum.
1. L'interface binaire d'application (ABI)
L'ABI est la méthode standard pour interagir avec les contrats intelligents dans l'écosystème Ethereum. Comme les contrats intelligents sont compilés en bytecode, nous avons besoin d'un moyen de dire à l'EVM quelle fonction appeler et quels arguments transmettre.
Sélecteurs de fonction
Chaque fonction d'un contrat Solidity est identifiée par son sélecteur de fonction.
- Signature : prenez le nom de la fonction et ses types de paramètres (par ex.,
transfer(address,uint256)). - Hachage : calculez le hachage Keccak-256 de cette chaîne.
- Sélecteur : les 4 premiers octets du hachage.
Lorsque vous envoyez une transaction à un contrat, les 4 premiers octets du champ « Data » sont le sélecteur de fonction. Un décodeur de sélecteur de fonction peut vous aider à identifier l'action qu'une transaction effectue.
Encodage des arguments
L'ABI définit comment empaqueter différents types de données (uint, address, string, bytes) dans des emplacements de 32 octets (256 bits). Les types de taille fixe sont empaquetés de manière séquentielle, tandis que les types dynamiques (comme les chaînes et les tableaux) utilisent des décalages pour pointer vers les données réelles à la fin de la charge utile. Un encodeur-décodeur ABI est nécessaire pour générer ces données ou les analyser à partir d'une transaction.
2. Sérialisation RLP (Recursive Length Prefix)
Alors que l'ABI est utilisée pour l'interaction avec les contrats, le RLP est la principale méthode d'encodage utilisée par la couche d'exécution d'Ethereum pour sérialiser des objets tels que les transactions et les blocs.
Pourquoi pas le JSON ou le Protobuf ?
Le RLP a été conçu pour une simplicité absolue et une efficacité d'espace. Contrairement au JSON, il n'a pas de métadonnées (pas de clés, pas de guillemets). Il n'encode que la structure et les octets bruts.
Comment fonctionne le RLP
Le RLP encode les données en fonction de leur longueur :
- Petites chaînes : (0-55 octets) sont préfixées par un seul octet (
0x80+ longueur). - Grandes chaînes : sont préfixées par un indicateur de longueur multi-octets.
- Listes : (Tableaux) sont préfixées par
0xc0+ la longueur totale des éléments sérialisés.
Chaque transaction que vous envoyez est encodée en RLP avant d'être signée et diffusée sur le réseau. Un encodeur-décodeur RLP est un outil indispensable pour analyser l'hexadécimal d'une transaction brute.
3. Unités d'Ethereum : du Wei à l'Ether
L'Ether (ETH) est divisible jusqu'à 18 décimales. La compréhension de ces unités est essentielle pour éviter les erreurs de « dépassement de décimales » dans les contrats intelligents.
| Unité | Valeur (en Wei) | Nom commun |
|---|---|---|
| Wei | 1 | La plus petite unité. |
| Gwei | 1 000 000 000 ($10^9$) | Utilisé pour le prix du gaz. |
| Szabo | $10^{12}$ | Micro-éther. |
| Finney | $10^{15}$ | Milli-éther. |
| Ether | $10^{18}$ | L'unité monétaire principale. |
L'utilisation d'un convertisseur d'unités Ethereum (ou convertisseur Wei/Gwei/ETH) garantit que vous envoyez le bon montant et que vous fixez le bon prix du gaz.
4. L'EVM et le bytecode
Lorsque vous compilez un contrat Solidity, il devient un bytecode EVM. Ce bytecode est une séquence d'opcodes (codes d'opération).
Opcodes et gaz
Chaque opcode (comme ADD, MUL, SSTORE, SLOAD) a un coût en « gaz » fixe.
SSTORE(Stockage de données) : très coûteux.ADD(Mathématiques) : très peu coûteux.
Désassemblage
Un désassembleur de bytecode EVM prend le code hexadécimal brut et le retransforme en opcodes lisibles par l'homme. Il est utilisé par les chercheurs en sécurité pour auditer les contrats « non vérifiés » dont le code source n'est pas disponible sur Etherscan.
FAQ : les entrailles d'Ethereum
Q : Qu'est-ce qu'une « signature de fonction » ?
R : C'est la représentation textuelle lisible par l'homme d'une fonction, par ex., deposit(). Son hachage détermine le sélecteur de fonction.
Q : Puis-je décoder n'importe quelle transaction Ethereum ?
R : Si vous avez l'ABI (JSON) du contrat, vous pouvez décoder les données d'entrée. Sans l'ABI, vous ne pouvez voir que les octets bruts et le sélecteur de fonction, bien que des services comme 4byte.directory puissent souvent faire correspondre les sélecteurs à des signatures connues.
Q : Pourquoi ai-je besoin de Gwei pour le gaz ?
R : Parce que l'ETH a trop de valeur pour être utilisé comme unité de base pour le gaz. Le Gwei (Giga-Wei) permet une tarification fine des ressources du réseau sans avoir à gérer des dizaines de zéros non significatifs.
Q : Qu'est-ce que le champ « Input Data » dans une transaction ?
R : Pour un appel de contrat, il contient le sélecteur de fonction et les arguments encodés en ABI. Pour un déploiement de contrat, il contient le bytecode de déploiement EVM.
Conclusion
La pile Ethereum est un chef-d'œuvre d'efficacité et d'exécution déterministe. De la sérialisation compacte du RLP à l'interface structurée de l'ABI, chaque couche est optimisée pour un environnement décentralisé. En maîtrisant ces concepts, vous passez d'un utilisateur occasionnel à un utilisateur averti capable de naviguer dans l'« ordinateur mondial » à son niveau le plus fondamental.