Pourquoi une transaction contient-elle un vidage de stockage?
1 réponses
- votes
-
- 2019-03-05
En réalité,cen'estpas le stockage complet,mais seulement lapartienon-big_map.Normalement,cettepartiene devraitpastropgrandir,par rapport à lapartie Big_MAP.
Maisen effet,ilpeuttoujours être coûteux de répéter ce stockage danstoutes les résultats detransaction,notammentpartiels.Dans lenœud,transaction_results sont stockés dans lesblocs,elles-mêmes stockées dans labase de données
store
.Avec unnœud roulant ,c'est-à-dire unnœud quine conservepastous lesblocs,ce stockage sera récupéré lorsque lesblocs seront oubliés.Mettre le stockage dans les résultats de latransaction augmente également la largeur debande desnœuds,caril rend lesblocsplusgrands,demanière aussi longue àtransmettre.Jepense que l'idée était que c'était unpetit coût depayerpar rapport à l'avantage des développeurs de DAPPSpourpouvoir surveillerfacilement le stockage de leurs contratsintelligents.
Actually, it is not the full storage, but only the non-big_map part. Normally, that part should not grow too much, compared to the big_map part.
But indeed, it can still be expensive to repeat that storage in all transaction results, especially partial ones. In the node, transaction_results are stored in the blocks, themselves stored in the
store
database. With a rolling node, i.e. a node that does not keep all the blocks, this storage will be recovered when the blocks will be forgotten. Putting the storage in the transaction results also increases the bandwidth of the nodes, since it makes the blocks bigger, so longer to transmit.I think the idea was that it was a small cost to pay compared to the benefit for the developers of Dapps to be able to easily monitor the storage of their smart contracts.
-
Quels sont les avantagespour les développeurs DAPPS?Cela ressembleplus à unmode de débogagepour DAPPS,qui (commeje pense)ne devraitpas êtreen production dutout.Pourriez-vous donner quelquesexemples quandilest vraimentnécessaire d'avoir unepartie du stockage dans chaque opération?What are the benefits for dapps developers? This is more like a debug mode for dapps, which (as I think) should not be in production at all. Could you give some examples when is really needed to have a part of the storage in each operation?
- 0
- 2019-03-05
- Groxan
-
Si vousne fournissezpas le stockage après chaque opération,vousne pouvez l'interroger quepar RPCentre deuxblocs.Vousne serez doncpasen mesure d'observer des étatsintermédiaires lorsqueplusieurstransactions dans lemêmeblocmodifient lemême stockage.Jen'aipas d'exempleparticulier d'utilisation à l'esprit,maisparfois,une caractéristique quiestinutilepour denombreusespersonnestrouvent une utilisationintéressanteet inattendue.If you don’t provide the storage after each operation, you can only query it by RPC between two blocks. So, you won’t be able to observe intermediate states when several transactions in the same block alter the same storage. I don’t have a particular example of use in mind, but sometimes, a feature that is useless for many people find an interesting and unexpected usage.
- 0
- 2019-03-05
- lefessan
-
Ilme semble que la simulation hors chaîne de la requête de stockageet de RPC du stockageest labonne chose àfaireen production afin demaintenir les ressources dunœud.La commodité de suivi de l'état d'un contratpeut être résoluepar l'outillage alors que leprix àpayerpour un stockage supplémentaire dans lenœud completestpermanent.seems to me off-chain simulation of the storage and RPC query of the storage are the right thing to do in production in order to maintain node resources. The convenience of tracking the state of a contract can be solved by tooling whereas the price to pay for extra storage in the full node is permanent.
- 0
- 2019-03-06
- Ezy
-
Quoi qu'ilen soit,comme vouspouvez le constater,denombreux contrats utilisent `map» au lieu de `BIG_MAP»pour stocker certaines données sur leurs appelants.Il s'agit d'une vulnérabilitégrave,carje peux spamnertous ces contrats denombreuses adressesjusqu'à ce que le stockage devienne siimportant quepersonnene puisseenvoyer unetransaction au contraten raison de la limite detaille defonctionnement.Anyway, as you can see, there are many contracts that use `map` instead of `big_map` to store some data about their callers. This is a serious vulnerability, because I can spam all these contracts from many addresses until the storage becomes so large that no one can send a transaction to the contract due to operation size limit.
- 0
- 2019-03-07
- Groxan
-
Deplus,cette vulnérabilitén'estpas évidentepour les développeursnovices.Jepense quetout dans lemonde devrait être aussi simpleet évident quepossible afin que les débutantsne perdentpas leur argent.Moreover, this vulnerability is not obvious to novice developers. I think that everything in the world should be as simple and obvious as possible so that newbies do not lose their money.
- 0
- 2019-03-07
- Groxan
-
@Groxan Les résultats de l'opérationne contribuentpas à lataille de l'opération ou dubloc.Ils sont calculéspar desnœuds des données deblocbruts,dans ce casen exécutant l'interprète Michelson.Toutefois,vous êtes correct qu'un contrat avec une carte dont la croissancen'estpas étranglée seraprobablement vulnérable à DOS -en raison de la limite degaz,et non de la limite detaille OP.@Groxan The operation results do not contribute to the operation or block size. They are computed by nodes from the raw block data, in this case by running the Michelson interpreter. However, you are correct that a contract with a map whose growth is not throttled somehow will likely be vulnerable to DoS -- due to the gas limit, not the op size limit.
- 0
- 2019-03-28
- Tom
J'aiexaminé quelquestransactions avec des contratsintelligentset j'ai constaté qu'ils stockent une vidage de stockage de contrat.
Parexemple:
https://mainnet.tezrpc.me/chains/Main/Blocs/246869/Opérations/3/0 https://mainnet.ezrpc.me/chains/main/blocks/328655/Opérations/3/0
Quelest lepoint defaire ça?Ilfautbeaucoup demémoire,surtout si le stockage du contratestgrand.