Solidité - Guide de style
Le Guide de style aide à maintenir la mise en page du code cohérente et à rendre le code plus lisible. Voici les meilleures pratiques à suivre lors de la rédaction de contrats avec Solidity.
Disposition du code
Indentation- Utilisez 4 espaces au lieu de tabulation pour maintenir le niveau d'indentation. Évitez de mélanger les espaces avec les onglets.
Two Blank Lines Rule - Utilisez 2 lignes vides entre deux définitions de contrat.
pragma solidity ^0.5.0;
contract LedgerBalance {
//...
}
contract Updater {
//...
}
One Blank Line Rule- Utilisez 1 ligne vide entre deux fonctions. En cas de déclaration uniquement, pas besoin de lignes vierges.
pragma solidity ^0.5.0;
contract A {
function balance() public pure;
function account() public pure;
}
contract B is A {
function balance() public pure {
// ...
}
function account() public pure {
// ...
}
}
Maximum Line Length - Une seule ligne ne doit pas traverser 79 caractères afin que les lecteurs puissent facilement analyser le code.
Wrapping rules- Le premier argument est dans une nouvelle ligne sans ouvrir les parenthèses. Utilisez un seul retrait par argument. Élément de terminaison); devrait être le dernier.
function_with_a_long_name(
longArgument1,
longArgument2,
longArgument3
);
variable = function_with_a_long_name(
longArgument1,
longArgument2,
longArgument3
);
event multipleArguments(
address sender,
address recipient,
uint256 publicKey,
uint256 amount,
bytes32[] options
);
MultipleArguments(
sender,
recipient,
publicKey,
amount,
options
);
Source Code Encoding - Le codage UTF-8 ou ASCII doit être utilisé de préférence.
Imports - Les instructions d'importation doivent être placées en haut du fichier juste après la déclaration de pragma.
Order of Functions - Les fonctions doivent être regroupées selon leur visibilité.
pragma solidity ^0.5.0;
contract A {
constructor() public {
// ...
}
function() external {
// ...
}
// External functions
// ...
// External view functions
// ...
// External pure functions
// ...
// Public functions
// ...
// Internal functions
// ...
// Private functions
// ...
}
Avoid extra whitespaces - Évitez les espaces immédiatement entre parenthèses, crochets ou accolades.
Control structures- Les accolades doivent s'ouvrir sur la même ligne que la déclaration. Fermer sur leur propre ligne en conservant la même indentation. Utilisez un espace avec accolade ouvrante.
pragma solidity ^0.5.0;
contract Coin {
struct Bank {
address owner;
uint balance;
}
}
if (x < 3) {
x += 1;
} else if (x > 7) {
x -= 1;
} else {
x = 5;
}
if (x < 3)
x += 1;
else
x -= 1;
Function Declaration- Utilisez la règle ci-dessus pour les accolades. Ajoutez toujours une étiquette de visibilité. L'étiquette de visibilité doit venir avant tout modificateur personnalisé.
function kill() public onlyowner {
selfdestruct(owner);
}
Mappings - Évitez les espaces lors de la déclaration des variables de mappage.
mapping(uint => uint) map;
mapping(address => bool) registeredAddresses;
mapping(uint => mapping(bool => Data[])) public data;
mapping(uint => mapping(uint => s)) data;
Variable declaration - Évitez les espaces lors de la déclaration des variables de tableau.
uint[] x; // not unit [] x;
String declaration - Utilisez des guillemets doubles pour déclarer une chaîne au lieu de guillemets simples.
str = "foo";
str = "Hamlet says, 'To be or not to be...'";
Ordre de disposition
Les éléments doivent être mis en page dans l'ordre suivant.
Déclarations Pragma
Importer des déclarations
Interfaces
Libraries
Contracts
Dans les interfaces, les bibliothèques ou les contrats, la commande doit être comme -
Déclarations de type
Variables d'état
Events
Functions
Conventions de nommage
Le contrat et la bibliothèque doivent être nommés en utilisant le style CapWords. Par exemple, SmartContract, Owner, etc.
Le nom du contrat et de la bibliothèque doit correspondre à leurs noms de fichiers.
En cas de plusieurs contrats / bibliothèques dans un fichier, utilisez le nom du contrat / bibliothèque principal.
Owned.sol
pragma solidity ^0.5.0;
// Owned.sol
contract Owned {
address public owner;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner {
//....
}
function transferOwnership(address newOwner) public onlyOwner {
//...
}
}
Congress.sol
pragma solidity ^0.5.0;
// Congress.sol
import "./Owned.sol";
contract Congress is Owned, TokenRecipient {
//...
}
Noms de structure
- Utilisez le style CapWords comme SmartCoin.Noms d'événements
- Utilisez le style CapWords comme Dépôt, AfterTransfer.Noms des fonctions
- Utilisez le style mixedCase comme initateSupply.Variables locales et d'état
- Utilisez le style mixedCase comme creatorAddress, supply.Constantes
- Utilisez toutes les lettres majuscules avec trait de soulignement pour séparer les mots tels que MAX_BLOCKS.Noms des modificateurs
- Utilisez le style mixCase comme onlyAfter.Noms d'énumération
- Utilisez le style CapWords comme TokenGroup.