Limites de stockage et de paramétrage de la taille du contrat intelligent?
1 réponses
- votes
-
- 2020-02-20
1. Taillemaximale desparamètrespartransaction
lemaximum Nombre d'octetspartransactionpour une seuletransactionest limité plusieurs constantes,en particulier unetaille supérieure des opérations
max_operation_data_length
et les limites dugaz durpour les opérations et desblocs (unbloc contient unensemble d'opérations):"max_operation_data_length": 16384, "HARD_GAS_LIMIT_PER_OPERATION": "800000", "Hard_gas_limit_per_block": "8000000", "COST_PER_BYTE": "1000", "Hard_storage_limit_per_operation": "60000",
Ces constantespeuvent être obtenuespar un appel RPC si vous avez unnœuden cours:
Tezos-Client RPC Get/Chains/Main/Blocs/Tête/Contexte/Constantes| jq
Vraisemblablement
max_operation_data_length
esten octets,ce qui signifie que vous avoir une limite supérieure de ~ 16kbpour leparamètrepar transaction. Vous devrez également supprimer lataillenécessaire d'autres données Entransaction,tels que l'expéditeur,le destinataire,etc.Les limites degaz
hard_gas_limit_per_block
etHARD_GAS_LIMIT_PER_OPERATION
Limitezindirectement. ettaille detransaction. Chaquefois qu'un contratintelligentestinvoqué,lenœud passe àtravers lesphases suivantes:- Lire la représentationbinaire du code de contratintelligent + état contractuel du disque
- Code de décodage,stockageet entrée de la représentationnontypée
- Code de Typecheck,Stockageet entrée
- Code d'exécution
- encoder le stockage à une commandenontypée.
- (écriture de stockage codé sur disque - lotted & amp; async)
Chacune de cesphases consomme dugaz. Leparamètreplusgrand augmente legaz Consommationen phase 2-4. Le stockageplusgrand augmente la consommation degaz dans Phases 1-5. Il s'ensuit que le stockageet lataille desparamètres sont limitéspar les limites dugaz dur. Cependant,je n'aipas de chiffres difficiles,mais vous pourrait simuler à l'aide de Tezos-Clientpour obtenir desestimations.
2. Taille de stockagemaximalepar contrat
Enfin,pour votre deuxième question,quiest déjàpartiellementpartiellement répondupar 1. AFAIK,iln'y apas de limitefixeexplicite sur le stockage d'un contratintelligent. Cependant,après un certainetaille,le stockage du contratne peutplus être décodé, parce que cela dépasserait les limites dugaz dur. Une autre limitation facteurest desfonds. Le
Coûts_per_byte
est actuellement à 1000 muutez. Cela signifie que chaque KB supplémentaire coûte ~ 1TZ (actuellement ~=3USD) à stocker,payépar l'expéditeur detransaction qui augmente le stockage.Nous devons égalementenvisager la constante
HARD_STORAGE_LIMIT_PER_OPERATION
. Chaquefois qu'unetransactionest injecté sur le réseau,ilest associé à une limite de stockage. En règlegénérale,ilest définipar l'utilisateur,pour s'assurer que leurtransaction ne provoquepas une quantitéinattendue debrûlure de stockage. Si lataille de lataille de stockage diff résultant de l'application de latransaction dépasse la limite de stockage,latransactionest alors rejetée. Le constantehard_storage_limit_per_operation
donne leplus haut limite de stockagepouvant être définieet limite donc également lemaximum augmentation de lataille de stockagepartransaction. Il s'ensuit que le Le stockage d'un contratne peut augmenter avecplus de 60000 octets partransaction. Notez qu'unetelletransaction coûterait ~ 180 USD aujourd'hui.1. Maximum parameter size per transaction
The maximum number of bytes per transaction for a single transaction is limited several constants, in particular an upper size of for operations
max_operation_data_length
and the hard gas limits for operations and blocks (a block contains a set of operations):"max_operation_data_length": 16384, "hard_gas_limit_per_operation": "800000", "hard_gas_limit_per_block": "8000000", "cost_per_byte": "1000", "hard_storage_limit_per_operation": "60000",
These constants can be obtained by a RPC call if you have a running node:
tezos-client rpc get /chains/main/blocks/head/context/constants | jq
Presumably
max_operation_data_length
is in bytes, meaning that you have a an upper limit of of ~16kB for the parameter per transaction. You would also have to remove the size needed other data in transaction, such as sender, recipient, etc.The gas limits
hard_gas_limit_per_block
andhard_gas_limit_per_operation
indirectly limit both maximum storage and transaction size. Each time a smart contract is invoked, the node passes through the following phases:- Read binary representation of smart contract code + contract state from disk
- Decode code, storage and input to untyped representation
- Typecheck code, storage and input
- Run code
- Encode storage to untyped repr.
- (write encoded storage to disk – batched & async)
Each of these phases consumes gas. Larger parameter increases the gas consumption in phase 2-4. Larger storage increases gas consumption in phases 1-5. It follows that storage and parameter size are limited by the hard gas limits. However, I do not have any hard numbers, but you could simulate using tezos-client to obtain estimates.
2. Maximum storage size per contract
Finally, for your second question, which is already partially answered by 1. AFAIK, there is no explicit fixed limit on the storage of a smart contract. However, after a certain size, the storage of contract can no longer be decoded, because doing so would exceed the hard gas limits. Another limiting factor is funds. The
costs_per_byte
is currently at 1000 mutez. This means that each additional kB costs ~1tz (currently ~= 3usd) to store, payed by the sender of transaction that increase storage.We also have to consider the constant
hard_storage_limit_per_operation
. Whenever a transaction is injected on the network, it is associated with a storage limit. Typically, it is set by the user, to ensure that their transaction does not provoke an unintended amount of storage burn. If the size of the storage size diff resulting from applying the transaction exceeds the storage limit, then the transaction is rejected. The constanthard_storage_limit_per_operation
gives the highest storage limit that can be set, and thus also limits the maximum storage size increase per transaction. It follows that the storage of a contract cannot increase with more than 60000 bytes per transaction. Note that such a transaction would cost ~180 usd today.-
Lorsque vous dites "untel TXN coûterait",fais-vous référence auxfrais detransaction?Legazn'apas de sensmonétaire.La quantité defrais TXN augmente-t-elle également avec lemontant de stockagenécessaire?When you say "such a txn would cost", are you referring to transaction fees? Gas does not have monetary meaning. Does the amount of txn fee also increase with needed storage amount?
- 0
- 2020-02-20
- utdrmac
-
Eneffet,legazn'apas de coûtfixe.Mais labrûlure de stockage a un coûtfixepar octet.Voiriciparexemple: https://tezos.stackexchange.com/a/2165/1773et ici http://tezos.gitlab.io/introduction/howthouse.htmlpour uneexplication complète.Indeed, gas does not have a fixed cost. But storage burn has a fixed cost per byte. See here for instance: https://tezos.stackexchange.com/a/2165/1773 and here http://tezos.gitlab.io/introduction/howtouse.html for a full explanation.
- 0
- 2020-02-20
- arvidj
Vous avez quelques questions concernant les limitations de stockage du contratintelligent.