Limitações de tamanho de armazenamento e parâmetro do contrato inteligente?
1 responda
- votos
-
- 2020-02-20
1. Tamanhomáximo doparâmetroportransação
omáximo Número debytesportransaçãopara uma únicatransação é limitado várias constantes,em particular umtamanho superior de operações
max_operation_data_length
e os limites degás durapara operações e blocos (umbloco contém um conjunto de operações):"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",
Estas constantespodem ser obtidaspor uma chamada RPC se vocêtiver umnóem execução:
tezos-client rpc get /chains/main/blocks/head/context/constants | jq
Presumivelmente
max_operation_data_length
estáem bytes,o que significa que você tem um limite superior de ~ 16kbpara oparâmetropor transação. Vocêtambémteria que remover otamanhonecessário outros dados emtransação,como remetente,destinatário,etc.Os limites degás
hard_gas_limit_per_block
ehard_gas_limit_per_operation
Limiteindiretamentetanto o armazenamentomáximo etamanho detransação. Cada vez que um contratointeligente éinvocado,onó passapelas seguintesfases:- .
- Leia a representaçãobinária do código de contratointeligente +estado do contrato do disco
- código decodificado,armazenamentoe entradapara representaçãonãoencaixada
- Código de TipoCheck,armazenamentoe entrada
- código deexecução
- codifique o armazenamentopara reprovar a reprovação.
- (escreva armazenamento codificadopara disco - lotese amp; assíncrono)
Cada uma dessasfases consomegás. Parâmetromaior aumenta ogás consumonafase 2-4. Armazenamentomaior aumenta o consumo degásem Fases 1-5. Segue-se que otamanho de armazenamentoe parâmetro são limitadospor os limites degás duro. Noentanto,eunãotenhonenhumnúmero difícil,mas você poderia simular usando Tezos-Clientepara obterestimativas.
2. Tamanhomáximo de armazenamentopor contrato
Finalmente,para a sua segundapergunta,quejáestáparcialmente respondeupor 1. AFAIK,não há limitefixoexplícitono armazenamento de um Contratointeligente. Noentanto,depois de um certotamanho,o armazenamento de contratonãopodemais ser decodificado, Porqueisso superaria os limites degás dura. Outro limitador fator éfundos. O
costs_per_byte
é atualmenteem 1000 mutez. Isso significa que cada KB adicional custa ~ 1TZ (atualmente ~=3UUSD)para armazenar,pagopor o remetente detransação que aumenta o armazenamento.Tambémtemos que considerar a constante
hard_storage_limit_per_operation
. Sempre que umatransação é injetadona rede,eleestá associado a um limite de armazenamento. Normalmente,é definidopelo usuário,paragarantir que suatransação nãoprovoca uma quantidadenãointencional de queima de armazenamento. Se otamanho dotamanho dotamanho de armazenamento resultante da aplicação datransação excede o limite de armazenamento,então atransação é rejeitada. O constantehard_storage_limit_per_operation
dá omais alto limite de armazenamento quepode ser definidoe,portanto,também limita omáximo Aumento dotamanho do armazenamentoportransação. Segue-se que o O armazenamento de um contratonãopode aumentar commais de 60000bytes portransação. Note quetaltransação custaria ~ 180 USD hoje.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.-
Quando você diz "tal TXN custaria",vocêestá se referindo ataxas detransação?Ogásnãotem significadomonetário.A quantidade detaxa TXNtambém aumenta com o valor de armazenamentonecessário?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
-
Defato,ogásnãotem um custofixo.Mas a queimadura de armazenamentotem um custofixoporbyte.Veja aquiporexemplo: https://tezos.stackexchange.com/a/2165/1773e aqui http://tezos.gitlab.io/introduction/howtouse.htmlpara umaexplicação completa.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
Tem algumasperguntas sobre limitações de armazenamento do contratointeligente.
.- Qual é onúmeromáximo debytes de dados quepossoenviarpara uma únicatransação?
- Existe um limite detamanhopara o armazenamento de um contratointeligente?