Aide-mémoire
Ordre de Préséance des Opérateurs
Voici l’ordre de préséance des opérateurs, classés par ordre d’évaluation.
Prédominance |
Description |
Opérateur |
---|---|---|
1 |
Incrément et décrément de Postfix |
|
Nouvelle expression |
|
|
Subscription de tableau |
|
|
Accès des membres |
|
|
Appel de type fonctionnel |
|
|
Parenthèses |
|
|
2 |
Préfixe d’incrémentation et de décrémentation |
|
Moins unaire |
|
|
Opérations unaires |
|
|
Logique NON |
|
|
NON par bit |
|
|
3 |
Exponentité |
|
4 |
Multiplication, division et modulo |
|
5 |
Addition et soustraction |
|
6 |
Opérateurs de décalage par bit |
|
7 |
ET par bit |
|
8 |
XOR par bit |
|
9 |
OU par bit |
|
10 |
Opérateurs d’inégalité |
|
11 |
Opérateurs d’égalité |
|
12 |
ET logique |
|
13 |
OU logique |
|
14 |
Opérateur ternaire |
|
Opérateurs d’assignation |
|
|
15 |
Opérateur de virgule |
|
Variables Globales
abi.decode(bytes memory encodedData, (...)) returns (...)
: ABI-décode les données fournies. Les types sont donnés entre parenthèses comme deuxième argument. Exemple:(uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uint, uint[2], bytes))
abi.encode(...) returns (bytes memory)
: ABI-encode les arguments donnésabi.encodePacked(...) returns (bytes memory)
: Performe l”encodage emballé des arguments donnés. Notez que cet encodage peut être ambigu !abi.encodeWithSelector(bytes4 selector, ...) returns (bytes memory)
: ABI-encode les arguments donnés en commençant par le deuxième et en ajoutant au début le sélecteur de quatre octets donné.abi.encodeCall(function functionPointer, (...)) returns (bytes memory)
: ABI-encode un appel àfunctionPointer
avec les arguments trouvés dans le tuple. Effectue une vérification complète des types, en s’assurant que les types correspondent à la signature de la fonction. Le résultat est égal àabi.encodeWithSelector(functionPointer.selector, (...))
abi.encodeWithSignature(string memory signature, ...) returns (bytes memory)
: Equivalent àabi.encodeWithSelector(bytes4(keccak256(bytes(signature)), ...)
bytes.concat(...) returns (bytes memory)
: Concatène un nombre variable d’arguments d’arguments dans un tableau d’un octetblock.basefee
(uint
): redevance de base du bloc actuel (EIP-3198 et EIP-1559)block.chainid
(uint
): identifiant de la chaîne actuelleblock.coinbase
(address payable
): adresse du mineur du bloc actuelblock.difficulty
(uint
): difficulté actuelle du blocblock.gaslimit
(uint
): limite de gaz du bloc actuelblock.number
(uint
): numéro du bloc actuelblock.timestamp
(uint
): Horodatage du bloc actuelgasleft() returns (uint256)
: gaz résiduelmsg.data
(bytes
): données d’appel complètesmsg.sender
(address
): expéditeur du message (appel en cours)msg.value
(uint
): nombre de wei envoyés avec le messagetx.gasprice
(uint
): prix du gaz de la transactiontx.origin
(address
): expéditeur de la transaction (chaîne d’appel complète)assert(bool condition)
: interrompt l’exécution et annule les changements d’état si la condition est « fausse » (à utiliser pour les erreurs internes).require(bool condition)
: interrompre l’exécution et annuler les changements d’état si la condition est « fausse » (à utiliser pour une entrée malformée ou une erreur dans un composant externe)require(bool condition, string memory message)
: interrompt l’exécution et annule les changements d’état si la condition est « fausse » (à utiliser en cas d’entrée malformée ou d’erreur dans un composant externe). Fournit également un message d’erreur.revert()
: interrompre l’exécution et revenir sur les changements d’étatrevert(string memory message)
: interrompre l’exécution et revenir sur les changements d’état en fournissant une chaîne explicativeblockhash(uint blockNumber) returns (bytes32)
: hachage du bloc donné - ne fonctionne que pour les 256 blocs les plus récentskeccak256(bytes memory) returns (bytes32)
: calculer le hachage Keccak-256 de l’entréesha256(bytes memory) returns (bytes32)
: calculer le hachage SHA-256 de l’entréeripemd160(bytes memory) returns (bytes20)
: calculer le hachage RIPEMD-160 de l’entréeecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)
: récupérer l’adresse associée à la clé publique de la signature de la courbe elliptique, renvoie zéro en cas d’erreuraddmod(uint x, uint y, uint k) returns (uint)
: compute(x + y) % k
où l’addition est effectuée avec une précision arbitraire et ne s’arrête pas à2**256
. Affirmer quek != 0
à partir de la version 0.5.0.mulmod(uint x, uint y, uint k) returns (uint)
: compute(x * y) % k
où la multiplication est effectuée avec une précision arbitraire et ne s’arrête pas à2**256
. Affirmer quek != 0
à partir de la version 0.5.0.this
(current contract’s type): le contrat en cours, explicitement convertible en « adresse » ou « adresse payable ».super
: le contrat un niveau plus haut dans la hiérarchie d’héritageselfdestruct(address payable recipient)
: détruire le contrat en cours, en envoyant ses fonds à l’adresse donnée<address>.balance
(uint256
): solde de la Address dans Wei<address>.code
(bytes memory
): le code à Address (peut être vide)<address>.codehash
(bytes32
): le codehash de l’adresse Address<address payable>.send(uint256 amount) returns (bool)
: envoie une quantité donnée de Wei à Address, renvoiefalse
en cas d’échec<address payable>.transfer(uint256 amount)
: envoie une quantité donnée de Wei à Address, lance en cas d’échectype(C).name
(string
): le nom du contrattype(C).creationCode
(bytes memory
): bytecode de création du contrat donné, voir Type Information.type(C).runtimeCode
(bytes memory
): le bytecode d’exécution du contrat donné, voir Type Information.type(I).interfaceId
(bytes4
): contenant l’identificateur d’interface EIP-165 de l’interface donnée, voir Type Information.type(T).min
(T
): la valeur minimale représentable par le type entierT
, voir Type Information.type(T).max
(T
): la valeur maximale représentable par le type entierT
, voir Type Information.
Note
Lorsque les contrats sont évalués hors chaîne plutôt que dans le contexte d’une transaction comprise dans un
bloc, vous ne devez pas supposer que block.*
et tx.*
font référence à des valeurs d’un bloc ou d’une transaction
d’un bloc ou d’une transaction spécifique. Ces valeurs sont fournies par l’implémentation EVM qui exécute le contrat et peuvent être arbitraires.
contrat et peuvent être arbitraires.
Note
Ne comptez pas sur block.timestamp
ou blockhash
comme source d’aléatoire,
à moins que vous ne sachiez ce que vous faites.
L’horodatage et le hachage du bloc peuvent tous deux être influencés par les mineurs dans une certaine mesure. De mauvais acteurs dans la communauté minière peuvent par exemple exécuter une fonction de paiement de casino sur un hash choisi et réessayer un autre hash s’ils n’ont pas reçu d’argent.
L’horodatage du bloc actuel doit être strictement plus grand que l’horodatage du dernier bloc, mais la seule garantie est qu’il se situera quelque part entre les horodatages de deux blocs consécutifs dans la chaîne canonique.
Note
Les hachages des blocs ne sont pas disponibles pour tous les blocs pour des raisons d’évolutivité. Vous ne pouvez accéder qu’aux hachages des 256 blocs les plus récents. autres valeurs seront nulles.
Note
Dans la version 0.5.0, les alias suivants ont été supprimés : suicide
comme alias pour selfdestruct
,
msg.gas
comme alias pour gasleft
, block.blockhash
comme alias pour blockhash
et
sha3
comme alias pour keccak256
.
Note
Dans la version 0.7.0, l’alias now
(pour block.timestamp
) a été supprimé.
Spécification de la Visibilité des Fonctions
function myFunction() <visibility specifier> returns (bool) {
return true;
}
public
: visible en externe et en interne (crée une fonction réceptrice pour les variables de stockage/d’état)private
: uniquement visible dans le contrat en coursexternal
: visible uniquement en externe (uniquement pour les fonctions) - c’est-à-dire qu’il ne peut être appelé que par message (viathis.func
)internal
: uniquement visible en interne
Modificateurs
pure
pour les fonctions : Interdit la modification ou l’accès à l’état.view
pour les fonctions : Interdit la modification de l’état.payable
pour les fonctions : Leur permet de recevoir de l’Ether en même temps qu’un appel.constant
pour les variables d’état : Ne permet pas l’affectation (sauf l’initialisation), n’occupe pas d’emplacement de stockage.immutable
pour les variables d’état : Permet exactement une affectation au moment de la construction et est constante par la suite. Est stockée dans le code.anonymous
pour les événements : Ne stocke pas la signature de l’événement comme sujet.indexed
pour les paramètres d’événements : Stocke le paramètre en tant que sujet.virtual
pour les fonctions et les modificateurs : Permet de modifier le comportement de la fonction ou du modificateur dans les contrats dérivés.override
: Indique que cette fonction, ce modificateur ou cette variable d’état publique change le comportement d’une fonction ou d’un modificateur dans un contrat de base.
Mots clés réservés
Ces mots-clés sont réservés dans Solidity. Ils pourraient faire partie de la syntaxe à l’avenir :
after
, alias
, apply
, auto
, byte
, case
, copyof
, default
,
define
, final
, implements
, in
, inline
, let
, macro
, match
,
mutable
, null
, of
, partial
, promise
, reference
, relocatable
,
sealed
, sizeof
, static
, supports
, switch
, typedef
, typeof
,
var
.