L'un des moyens les plus simples d'économiser du gaz est de simplifier votre code. Moins il y a de code à exécuter, moins il y a de gaz consommé.
Considérez la fonction suivante :
Solidity
pragma solidity ^0.8.9 ;
contract OptimizationExample {
address[] public admins ;
function isUserAdmin(address user) public view returns (bool) {
for (uint i = 0 ; i < admins.length ; i++) {
if (admins[i] == user) return true;
}
return false ;
}
}
La fonction ci-dessus utilise une boucle, qui devient de plus en plus coûteuse au fur et à mesure que l'on ajoute des administrateurs. Une structure plus économe en gaz utiliserait une cartographie :
Solidity
contrat OptimizationExampleOptimized {
mapping(address => bool) public admins ;
function isUserAdmin(address user) public view returns (bool) {
return admins[user];
}
}
Lorsque vous travaillez avec Ethereum, n'oubliez pas que vous payez pour chaque bit de stockage. Si vous stockez les mêmes données à plusieurs endroits, réfléchissez à la manière dont vous pourriez les stocker une fois et les référencer ailleurs.
Dans Solidity, les bibliothèques sont des morceaux de code réutilisables. Ils peuvent vous aider à écrire un code modulaire et, comme ils ne sont déployés qu'une seule fois et liés à d'autres contrats, ils peuvent permettre d'économiser du gaz à long terme.
Solidity
bibliothèque SafeMath {
function add(uint a, uint b) internal pure returns (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... autres fonctions mathématiques
}
contrat UsingSafeMath {
using SafeMath for uint ;
uint public value ;
function increment(uint _value) public {
value = value.add(_value);
}
}
Le mot-clé delete
dans Solidity vous permet d'annuler des variables, ce qui permet de restituer une partie du gaz. Si vous n'avez plus besoin d'un élément de stockage particulier, supprimez-le pour demander ce remboursement.
Si le stockage des données sur la blockchain peut être coûteux, l'enregistrement des événements est comparativement moins cher. Si vous avez des données qui n'ont pas besoin d'être lues dans le contrat mais qui doivent être vérifiables, envisagez d'utiliser les journaux d'événements.
Certaines opérations sont plus gourmandes en gaz que d'autres. Par exemple :
L'optimisation des contrats intelligents pour le gaz est à la fois un art et une science. Les approches abordées dans ce cours, lorsqu'elles sont combinées, ont le potentiel de réduire considérablement les coûts de gaz de vos contrats. N'oubliez pas que l'écosystème Ethereum et ses outils, y compris Remix, sont en constante évolution. Tenez vos contrats à jour, testez-les et améliorez-les régulièrement pour les optimiser. La communauté Ethereum est vaste et utile, n'hésitez donc jamais à demander des conseils ou des bonnes pratiques. Amusez-vous bien à coder !
L'un des moyens les plus simples d'économiser du gaz est de simplifier votre code. Moins il y a de code à exécuter, moins il y a de gaz consommé.
Considérez la fonction suivante :
Solidity
pragma solidity ^0.8.9 ;
contract OptimizationExample {
address[] public admins ;
function isUserAdmin(address user) public view returns (bool) {
for (uint i = 0 ; i < admins.length ; i++) {
if (admins[i] == user) return true;
}
return false ;
}
}
La fonction ci-dessus utilise une boucle, qui devient de plus en plus coûteuse au fur et à mesure que l'on ajoute des administrateurs. Une structure plus économe en gaz utiliserait une cartographie :
Solidity
contrat OptimizationExampleOptimized {
mapping(address => bool) public admins ;
function isUserAdmin(address user) public view returns (bool) {
return admins[user];
}
}
Lorsque vous travaillez avec Ethereum, n'oubliez pas que vous payez pour chaque bit de stockage. Si vous stockez les mêmes données à plusieurs endroits, réfléchissez à la manière dont vous pourriez les stocker une fois et les référencer ailleurs.
Dans Solidity, les bibliothèques sont des morceaux de code réutilisables. Ils peuvent vous aider à écrire un code modulaire et, comme ils ne sont déployés qu'une seule fois et liés à d'autres contrats, ils peuvent permettre d'économiser du gaz à long terme.
Solidity
bibliothèque SafeMath {
function add(uint a, uint b) internal pure returns (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... autres fonctions mathématiques
}
contrat UsingSafeMath {
using SafeMath for uint ;
uint public value ;
function increment(uint _value) public {
value = value.add(_value);
}
}
Le mot-clé delete
dans Solidity vous permet d'annuler des variables, ce qui permet de restituer une partie du gaz. Si vous n'avez plus besoin d'un élément de stockage particulier, supprimez-le pour demander ce remboursement.
Si le stockage des données sur la blockchain peut être coûteux, l'enregistrement des événements est comparativement moins cher. Si vous avez des données qui n'ont pas besoin d'être lues dans le contrat mais qui doivent être vérifiables, envisagez d'utiliser les journaux d'événements.
Certaines opérations sont plus gourmandes en gaz que d'autres. Par exemple :
L'optimisation des contrats intelligents pour le gaz est à la fois un art et une science. Les approches abordées dans ce cours, lorsqu'elles sont combinées, ont le potentiel de réduire considérablement les coûts de gaz de vos contrats. N'oubliez pas que l'écosystème Ethereum et ses outils, y compris Remix, sont en constante évolution. Tenez vos contrats à jour, testez-les et améliorez-les régulièrement pour les optimiser. La communauté Ethereum est vaste et utile, n'hésitez donc jamais à demander des conseils ou des bonnes pratiques. Amusez-vous bien à coder !