Dans le dernier article, nous avons vu à quel point les contrats intelligents sont meilleurs que les contrats papier. Lisez-le ici ?Introduction aux contrats intelligents
Nous avons vu à quel point les contrats intelligents sont meilleurs que les anciens contrats papier et comment EVM s’assure que les contrats intelligents tiennent leurs promesses.
Maintenant, EVM ne comprend aucun langage de haut niveau. Il comprend le langage de bas niveau. Nous devons donc convertir notre contrat intelligent en langage de bas niveau, c’est-à-dire BYTECODE.
? BYTECODE
– Le bytecode est un langage de bas niveau composé d’une combinaison de chiffres et d’alphabets.
– Les bytecodes sont très difficiles à écrire et à lire. Fondamentalement, ce n’est pas lisible par l’homme.
– En utilisant différents frameworks comme solcjs, ethers, hardhat et bien d’autres, nous pouvons convertir nos contrats intelligents en bytecodes.
– Voici à quoi ressemble un bytecode pour un contrat intelligent très petit et simple.
608060405234801561001057600080fd5b50610771806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80632e64cec11461005c5780636057361d1461007a5780636f760f41146100965780639e7a13ad146100b2578063b2ac62ef146100e3575b600080fd5b610064610113565b
– On peut les voir comme des combinaisons de chiffres et d’alphabets.
– EVM est une machine à pile, ce qui signifie qu’elle utilise la pile pour exécuter n’importe quel script. Il stocke les fonctions, les fonctions PUSH, les POP et bien d’autres.
– Le bytecode peut sembler charabia mais ce sont des commandes pour EVM sur la façon d’interagir avec la pile.
– Si nous convertissons ces bytecodes en OPCODE, c’est-à-dire en code d’opération, nous verrons comment ou quelles commandes ces combinaisons donnent à EVM.
– Il existe de nombreux sites Web qui peuvent convertir bytecode -> opcode. J’utilise etherscan.
?[https://etherscan.io/opcode-tool](Lien)
Nouveau dans le commerce ? Essayez des bots de trading de crypto ou copiez le trading
C’est ce que nous obtenons….
[0] DUP1
[2] PUSH1 0x40
[3] MSTORE
[4] CALLVALUE
[5] DUP1
[6] EST ZÉRO
[9] PUSH2 0x0010
[10] JUMPI
[12] PUSH1 0x00
[13] DUP1
[14] REVENIR
[15] JUMPDEST
[16] POPULAIRE
[19] PUSH2 0x0771
[20] DUP1
[23] PUSH2 0x0020
[25] PUSH1 0x00
[26] CODECOPIE
[28] PUSH1 0x00
[29] REVENIR? N’oubliez pas qu’EVM traite chaque nombre comme un nombre hexadécimal. « 0x » signifie que le nombre est un nombre hexadécimal. Maintenant, dans le cas d’EVM, il n’a pas besoin de « 0x » car il traite chaque nombre comme hexadécimal. Donc « 0x40 » dans EVM, nous pouvons le mettre simplement « 40 ».*
Maintenant, ce sont différentes commandes qui aident EVM. Voici ce qu’ils signifient
1. PUSH1 0x40 -> Cela signifie mettre 1 octet de valeur « 0x40 » dans la pile. Maintenant, la valeur hexadécimale de PUSH1 est « 60 ». Ainsi les commandes deviennent « 6040 ».
2. MAGASIN -> Cela allouera de la mémoire de 0x60 et y déplacera 0x40. Le code hexadécimal de MSTORE est « 0x52 ».
Ainsi, le bytecode final pour ceux-ci devient…
604052
De cette façon, chaque bytecode a sa signification et indique à EVM quoi faire. Nous n’avons pas besoin de savoir ce que signifie chaque bytecode pour écrire un contrat intelligent. Savoir ce qu’il fait, c’est bien. Mais si vous voulez en savoir plus, voici un lien qui vous aidera beaucoup [Ethervm.io](https://www.ethervm.io/).
Maintenant, dans le dernier article, nous avons vu ABI. Eh bien, les contrats intelligents ne sont bons que lorsque quelqu’un peut les utiliser. Donc, ici aide ABI.
? ABI
– ABI signifie Application Binary Interface.
– Les ABI ne sont pas aussi compliqués que BYTECODE et sont lisibles par l’homme.
– ABI ressemble à ceci :
[
{
“inputs”: [
{
“internalType”: “string”,
“name”: “_name”,
“type”: “string”
},
{
“internalType”: “uint256”,
“name”: “_favouriteNumber”,
“type”: “uint256”
}
],
« nom »: « addPerson »,
« les sorties »: [],
« stateMutability »: « non payant »,
« type »: « fonction »
}
]
– Comme nous pouvons le voir, ce ne sont que des fichiers au format JSON avec l’extension .abi
– Si nous regardons attentivement ces abi contiennent comme type:’function’ ou « uint256 » ou « string ».
– Ces fichiers contiennent tous les détails sur les contrats intelligents comme les variables, leur type, leur nom ainsi que le nom des fonctions, les modificateurs d’accès, ils sont payants ou non payants et bien d’autres.
Ex-> lorsque le type est « uint256 » ou « chaîne », cela signifie que c’est une variable mais quand sa « fonction », cela signifie que c’est une fonction.
– Il est utilisé lorsque JavaScript veut interagir avec un contrat intelligent, c’est là qu’abi entre en jeu. Sans abi, il n’y aura aucune interaction et vous ne pourrez appeler aucune fonction ou faire quoi que ce soit avec.
? Résumons….
– Le contrat intelligent nécessite un bytecode et abi pour fonctionner.
– Le bytecode n’est pas lisible par l’homme et indique à EVM comment exécuter le contrat intelligent.
– Le bytecode peut être converti en OpCode lisible par l’homme.
– Chaque nombre en bytecode signifie une commande dans EVM. EVM suppose que chaque nombre est hexadécimal.
– ABI est un fichier JSON avec l’extension .abi. Il contient des détails sur les variables, les modificateurs d’accès, les fonctions, leurs types de retour et bien d’autres.
– ABI permet à JavaScript d’appeler les fonctions dans un contrat intelligent.
?N’oubliez pas que si vous pouvez écrire le BYTECODE et l’ABI corrects, vous pouvez simplement le déployer sur la chaîne.
Dans le prochain article, nous verrons comment nous pouvons convertir notre contrat intelligent en bytecode et ABI. Nous verrons également les bases de la solidité et comment rédiger un contrat intelligent et le déployer.
Bonjour, je suis Tanisk Annpurna
je poste sur
?web3, Blockchain, Ethereum
?Smart Contract, Solidité
?JavaScript, ReactJS, NodeJS
Suivez et aimez pour plus de messages de ce type. !!✌️ !!
Rejoignez Coinmonks Telegram Channel et Youtube Channel pour en savoir plus sur le trading et l’investissement cryptographiques
Source https://medium.com/coinmonks/understanding-smart-contract-bytecode-abi-4747b1616450?source=rss—-721b17443fd5—4