- Tête thermostatique Danfoss Aero RA/V 015G4560 capteur intégré, rempli de gaz, protection contre le gelTête thermostatique Danfoss Aero RA/V 015G4560 adapté au boîtier de vanne Danfoss RAV peut être limité ou bloqué RAL9016 Plage de température 7 - 28 °C
- Tête thermostatique Danfoss 015G4550 capteur intégré, rempli de gaz, protection antigelTête thermostatique Danfoss 015G4550 adapté au corps de vanne Danfoss RAVL peut être limité ou bloqué Ral 9016 Plage de température 7 - 28 °C
- Tête thermostatique Danfoss 015G4590, remplie de gaz, capteur intégré, protection contre le gelTête thermostatique Danfoss 015G4590 peut être limité ou bloqué Convient à tous les boîtiers de vannes de la série RA 2000 et aux vannes intégrées de Danfoss dans les radiateurs à vannes RAL 9016 avec fermeture à pression Assemblage sans outils Plage de température 7 - 28 °C
Cet article devrait aider à mieux comprendre les mécanismes de base derrière les comptes, les transactions, le gaz et le rôle des mineurs dans la définition de la taille des blocs sur Ethereum.
Cet article est une traduction complète d’un article de Hudson Jameson par Simon Polrot (original ici). Remarque: il a été choisi pour traduire le mot d’origine gaz avec du gaz puisque c’est la traduction couramment observée. Cependant, il convient de noter que le mot original gas est plus couramment utilisé en anglais pour désigner l’essence ou un autre carburant, ce qui est plus logique en rapport avec la blockchain Ethereum.
EOA (ou CPE) contre. comptes de contrat
Il existe deux types de comptes sur Ethereum
- Comptes externes (ou comptes de propriétaires externes)
- Comptes de contrat
Cette distinction est supprimée (ou distrait) Dans la prochaine mise à jour du protocole (Metropolis).
Comptes de propriété externe (EOA) / Compte de propriétaire externe (CPE)
Un compte propriétaire externe (CEP)
- a un équilibre éther,
- peut envoyer des transactions (transfert d’éther ou déclencher l’exécution de code d’un contrat intelligent)
- est contrôlé par des clés privées,
- n’a pas de code associé.
Comptes de contrat
Accord
- a un équilibre éther,
- a un code associé,
- l’exécution du code est provoquée par l’envoi de transactions ou de messages (Appel) obtenus à partir d’autres contrats.
- lorsqu’il est exécuté, effectue des opérations de complexité arbitraire (code Turing-full) – possède son propre stockage persistant, c’est-à-dire peut avoir son propre état permanent – peut appeler d’autres contrats.
Toutes les actions sur la blockchain Ethereum sont initiées par des transactions envoyées depuis des comptes. Chaque fois qu’un compte de contrat reçoit une transaction, son code est exécuté tel que défini par ses paramètres d’initialisation envoyés avec la transaction. Le code de contrat est exécuté par Ethereum Virtual Machine (EVM) sur chaque nœud participant au réseau; cela fait partie de leur travail de vérification de nouveaux blocs.
transactions
Le terme « transaction » est utilisé sur Ethereum pour faire référence à un paquet de données signé contenant un message à envoyer d’un compte externe à un autre compte blockchain.
Les transactions contiennent
- le destinataire du message,
- une signature qui identifie l’expéditeur et indique son intention d’envoyer le message via la blockchain au destinataire;
- un champ
VALUE
– le montant en wei (section éther) à transférer de l’expéditeur au destinataire, - un champ de données facultatif qui peut contenir le message envoyé à un contrat;
- une valeur
GASLIMIT
, qui représente le nombre maximal d’étapes de calcul que la transaction est autorisée à effectuer, - une valeur
GASPRICE
, qui représente la commission que l’expéditeur est prêt à dépenser pour chaque unité de gaz. Une unité de gaz correspond à l’exécution d’une instruction atomique, c’est-à-dire une étape de calcul.
des postes
Les contrats peuvent envoyer des « messages » à d’autres contrats. Les messages sont des objets virtuels qui ne sont jamais sérialisés et n’existent que dans l’environnement d’exécution Ethereum. Ils peuvent être comparés aux appels de fonction.
Un message contient:
- l’expéditeur du message (implicitement).
- le destinataire du message
- un champ
VALUE
– le montant à transférer avec le message à l’adresse du contrat, - un champ de données optionnel, qui correspond aux informations effectivement envoyées au contrat
- un champ
GASLIMIT
, ce qui limite la quantité maximale de gaz que l’exécution du code causée par le message peut coûter.
En substance, un message est comme une transaction, sauf qu’il est produit par un contrat et non par un acteur externe. Un message est généré lorsque le contrat qui exécute le code exécute les opcodes CALL
ou DELEGATECALL
, Qui produit et diffuse un message. Les messages sont aussi parfois appelés «transactions internes». Comme une transaction, un message oblige le compte destinataire à exécuter le code. Les contrats peuvent donc être liés à d’autres contrats de la même manière que les acteurs externes. Notez que le terme transaction est souvent utilisé dans la pratique pour faire référence à un message. Il est donc possible que cette distinction sémantique finisse par disparaître.
Ethereum comprend un environnement d’exécution de blockchain appelé Ethereum Virtual Machine (EVM). Chaque nœud participant au réseau exécute EVM dans le cadre du nouveau processus de vérification de bloc. Ils exécutent les transactions dans le bloc qu’ils contrôlent et exécutent dans le code EVM dont l’exécution est demandée par la transaction correspondante. Tous les nœuds exécutent les mêmes instructions et stockent les mêmes valeurs. Bien sûr, le fait que l’exécution du contrat soit répliquée de manière redondante à chaque nœud rend l’exécution coûteuse en termes de puissance de calcul, cela devrait encourager à ne pas utiliser la blockchain pour les calculs qui peuvent être effectués en dehors de la chaîne. Pour chaque opération effectuée, un coût est identifié, exprimé en nombre d’unités de gaz. Chaque transaction contenue dans un contrat a une valeur de gaz définie. Ce document fait référence au coût du gaz de chaque code d’opération (opcode) sur la blockchain Ethereum – attention, il n’est pas entièrement mis à jour (FR).
Gaz et coût de transaction
Chaque transaction doit contenir une limite de gaz (parfois appelée StartGas – EN) et un prix qu’elle est prête à payer par unité de gaz. Les mineurs ont le choix d’inclure la transaction et de récupérer le prix ou non. En pratique, toutes les transactions se terminent aujourd’hui, mais le prix du gaz qu’un utilisateur choisit de payer a un effet sur le temps qui s’écoulera entre l’envoi, le choix et l’annulation de la transaction. dans un bloc. Si la quantité totale de gaz utilisée dans les étapes de calcul requises pour la transaction, y compris le message d’origine et tout autre sous-message pouvant être envoyé en relation avec l’exécution de la transaction, est inférieure ou égale au gaz limite défini par l’expéditeur, alors la transaction est traitée par le mineur. Si la quantité totale de gaz requise par la transaction dépasse la limite de gaz fixée par l’expéditeur, toutes les modifications sont annulées, mais la transaction est toujours valide et les frais sont toujours perçus par le mineur qui a effectivement effectué la transaction. La blockchain montre alors que l’exécution de la transaction a commencé, mais qu’elle ne prévoyait pas suffisamment de gaz et que les opérations ont été interrompues. Il convient également de noter que l’excédent de gaz non utilisé dans l’exécution de la transaction est remboursé à l’expéditeur en Ether. Étant donné que les calculs du coût du gaz sont des estimations précises, la plupart des utilisateurs fixent une limite de gaz délibérément élevée pour garantir que leur transaction est acceptée. C’est bon tant que l’excès de gaz est automatiquement remboursé.
Estimer les coûts de transaction
Le coût total d’Ether d’une transaction est basé sur deux facteurs:
gasUsed
: le gaz total utilisé par la transactiongasPrice
: le prix (en éther) d’une unité de gaz spécifiée dans la transaction
Coût total = gaz utilisé * gazPrix
gasUsed
Il y a un coût fixe de gaz pour chaque opération EVM. gasUsed
est la somme du gaz correspondant à toutes les opérations effectuées dans le cadre de la transaction.
Pour estimer la consommation de gaz, il existe une API d’estimation, qui fonctionne globalement mais avec quelques lacunes (EN).
EMBALLAGE
Un utilisateur crée et signe une transaction, et chaque utilisateur peut définir gasPrice
ils veulent payer, ce qui peut même être nul. Cependant, les clients Ethereum lancés au moment de Frontier (version actuelle d’Ethereum) ont un gasPrice
défaut de 0,05e12 wei. Parce que les mineurs optimisent leurs revenus, la plupart des transactions sont envoyées avec un gasPrice
0,05e12 wei, et il serait difficile de convaincre un mineur d’accepter une transaction avec un gasPrice
inférieur ou égal à zéro
Exemples de coût d’une transaction
Avec leur permission, j’emprunte cet exemple et cette analogie à l’excellent MyEtherWallet. Vous pouvez lire leur excellent guide sur le gaz ici. Ils ont également une excellente page Utilitaires où vous pouvez trouver un éther pour les convertisseurs de sous-unités.
Nous pouvons comparer la limite de gaz à un litre de carburant pour une voiture. Vous pouvez comparer le prix du gaz avec le coût d’un litre de carburant.
Avec une voiture, cela coûte 1,5 € (prix) par litre (unité). Avec Ethereum, c’est 20 GWEI (prix) par gaz (unité). Pour remplir le « réservoir », vous devez …
- 10 litres à 1,5 € = 15 $
- 21 000 unités de gaz à 20 GWEI = 0,00042 ETH.
En conséquence, le coût total de la transaction devient 0,00042 Ether.
L’envoi de jetons coûte environ ~ 50 000 à ~ 100 000, donc le coût total de transaction augmente de 0,001 ETH à 0,002 ETH.
La limite de gaz par bloc est la quantité maximale de gaz acceptée dans un bloc pour déterminer combien de transactions peuvent aller dans un bloc. Par exemple, disons que nous avons 5 transactions et que les transactions ont une limite de gaz de 10, 20, 30, 40 et 50. Si la limite de gaz du bloc est de 100, les quatre premières transactions peuvent être incluses dans le bloc. Les mineurs décident quelles transactions ils incluent dans un bloc. Un autre mineur peut essayer d’inclure les deux dernières transactions dans le bloc (50 + 40), auquel cas il n’y aurait de place que pour la première transaction (10). Si vous essayez d’inclure une transaction qui utilise plus de gaz que la limite de gaz en bloc actuelle, elle est rejetée par le réseau et votre client Ethereum envoie le message « La transaction dépasse la limite de gaz en bloc » (la transaction dépasse la limite de gaz par bloc). Cet exemple provient d’un article sur l’Ethereum Slack Exchange des « Ethers ».
La limite de gaz par bloc est de 4 712 357 gaz au moment de la rédaction de cet article, selon les statistiques d’ethstats.net (EN), ce qui signifie qu’environ 224 transactions ont chacune gasgräns 21 000 peuvent être inclus dans un bloc (produit toutes les 15-20 secondes en moyenne). Le protocole permet à un bloc de mineurs d’ajuster la limite de gaz du bloc d’un facteur 1/1024 (0,0976%) dans la direction souhaitée (augmentation ou diminution) (FR).
Qui détermine la limite de gaz par bloc?
Les mineurs du réseau déterminent la limite de gaz par bloc. En plus de cette limite de bloc de gaz réglable par protocole, une stratégie d’exploitation avec une limite standard de 4 712 388 est attendue par la plupart des clients (EN). Les mineurs peuvent choisir de modifier cette limite, mais la plupart ne le font pas et laisser le montant standard.
Comment la limite de gaz par bloc change-t-elle?
Les mineurs d’Ethereum utilisent un programme d’exploration de données, tel que ethminer, lui-même connecté à un nœud geth ou Parity. geth et Parity ont des alternatives que les mineurs peuvent changer. Les options d’exploration de Geth sont décrites ici et les options de parité ici.
Récemment, on a beaucoup parlé du ralentissement du réseau Ethereum, de la surcharge ou même de l’inutilisabilité. Ces commentaires décrivent ces ralentissements comme «DoS» pour le réseau Ethereum. Un événement « DoS » ou déni de service dans le réseau Ethereum se produit lorsque tous les blocs sont remplis et que de nombreuses transactions sont en attente sur le réseau. N’oubliez pas que les mineurs peuvent choisir d’inclure les transactions en fonction du prix du gaz qu’ils choisissent. S’il y a des centaines de milliers de transactions en attente (connues sous le nom de pool de transactions), cela peut créer des retards inhabituels dans les transactions qui comptent pour des heures. Le déni de service peut être nocif ou non.
DOS nocif
L’automne dernier, Ethereum a été attaqué par une personne ou un groupe de personnes lors de ce qu’on a appelé une attaque par spam. Cette attaque a été décrite ici (FR).
L’attaque DoS consistait à inonder le réseau de transactions avec différentes opérations dont le coût d’exécution ne correspondait pas à la charge de traitement réelle des nœuds du réseau.
Lors de cette attaque, les mineurs ont demandé de baisser la limite de gaz en bloc à 1,5 million (EN) puis à 2 millions à un autre moment (EN). Cette demande aux mineurs d’abaisser la limite de gaz par bloc lors d’attaques menées sur le réseau a été faite à plusieurs autres reprises.
Pas dangereux
Les incidents DoS accidentels sont simplement des incidents où le réseau a tellement de transactions en attente qu’il faut un temps anormalement long pour les traiter. Récemment, la popularité et la propagation des événements de distribution de jetons (appelés offres initiales de pièces (ICO) ou ventes de jetons) ont fait saturer le réseau de transactions. L’équipe INFURA a rédigé un article de blog décrivant les détails techniques de ces événements (EN).
Pourquoi la limite de gaz pour les blocs ne change-t-elle pas même lorsque les blocs sont pleins?
Raison principale: les mineurs n’utilisent pas la fonction d’ajustement dynamique des limites de gaz.
Le protocole Ethereum contient un mécanisme permettant aux mineurs de voter sur la limite de gaz bloqués, ce qui permet d’augmenter la capacité sans avoir besoin d’une fourche dure. À l’origine, ce mécanisme était lié à une stratégie standard selon laquelle les mineurs ont voté pour une limite de gaz au moins égale à 4,7 millions, mais viserait 150% de la moyenne de gaz utilisée (calculée sur une gamme moyenne exponentielle de 1024 blocs) si cette quantité est plus élevé, ce qui a permis d’augmenter la capacité organique avec la demande et en même temps inclure un toit pour des raisons de lutter contre le spam.
Comme décrit dans la section « DoS malveillant » ci-dessus, les mineurs ont souvent été invités à modifier ce comportement standard pour lutter contre les attaques de spam. Le problème est que certains pools d’exploration de données ne restaurent pas le paramètre par défaut, même après que les attaques ont été interrompues. Il y a environ un mois, les mineurs ont été invités à modifier la limite de gaz en bloc et le prix du gaz pour réintroduire cette fonction de frontière de gaz en évolution organique (EN), car les ventes récentes se sont rapidement remplies, provoquant une congestion importante de la blockchain.
La station-service ETH (EN) est une bonne ressource si vous recherchez des informations mises à jour sur les zones limites des blocs pour les opérations minières qui votent (EN).
Que devraient faire les mineurs pour résoudre le problème?
Les mineurs peuvent modifier leurs paramètres de nœud geth ou parité pour réactiver les limites de gaz adaptatives. Remarque: Les valeurs ci-dessous proviennent de cet enregistrement Reddit (EN) et peuvent en fait être sélectionnées beaucoup plus haut, comme expliqué dans cet autre enregistrement Reddit (EN).
Geth
Réglage suggéré
--gasprice 4000000000 --targetgaslimit 4712388
Explication
--targetgaslimit
définit la limite de gaz pour les blocs à briser (par défaut: « 4712388 »)
--gasprice
est le prix du gaz le plus bas pour avoir accepté d’annuler une transaction (par défaut: « 20000000000 »). Remarque: le prix du gaz est défini en wei.
Parité
Réglage suggéré
--gas-floor-target 4712388 --gas-cap 9000000 --gasprice 4000000000
Explication
--gas-floor-target
Quantité de gaz par bloc à peindre à la fin d’un bloc (par défaut: 4 700 000).
--gas-cap
Une limite pour augmenter la limite de gaz par bloc par rapport au volume de transaction (par défaut: 6283184).
--gasprice
est le prix du gaz le plus bas pour accepter de saper une transaction.
Remarque: gasprice
est défini de manière.
Note 2: --gasprice
est une « option obligatoire »
Autres options minières
Ces options sont disponibles sur les pages suivantes pour geth et Parity.