스마트 계약의 저장 및 매개 변수 크기 제한?
1 대답
- 투표
-
- 2020-02-20
1. 거래 당 최대 매개 변수 크기
최대 단일 트랜잭션에 대한 트랜잭션 당 바이트 수가 제한됨 여러 상수,특히 작업의 상위 크기
max_operation_data_length
및 작업에 대한 하드 가스 제한 및 블록 (블록에는 일련의 작업이 포함됨) :"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",
이 상수는 실행중인 노드가있는 경우 RPC 호출로 얻을 수 있습니다.
tezos-client rpc get /chains/main/blocks/head/context/constants | jq
아마도
max_operation_data_length
는 바이트 단위입니다. 매개 변수의 상한은 ~ 16kB입니다. 트랜잭션. 다른 데이터가 필요한 크기도 제거해야합니다. 발신자,수신자 등과 같은 거래에서가스 제한
hard_gas_limit_per_block
및hard_gas_limit_per_operation
은 두 최대 저장 용량을 간접적으로 제한합니다. 거래 규모. 스마트 계약이 호출 될 때마다 노드는 다음 단계를 거칩니다.- 스마트 계약 코드 + 계약 상태의 이진 표현 읽기 디스크에서
- 코드 디코딩,저장 및 형식화되지 않은 표현 입력
- 유형 검사 코드,저장 및 입력
- 코드 실행
- 저장소를 형식화되지 않은 재현으로 인코딩합니다.
- (인코딩 된 스토리지를 디스크에 쓰기 – 일괄 및 비동기)
각 단계는 가스를 소비합니다. 매개 변수가 클수록 가스가 증가합니다. 2-4 단계에서 소비. 더 큰 저장은 가스 소비를 증가시킵니다 단계 1-5. 저장 및 매개 변수 크기는 다음으로 제한됩니다. 경질 가스 한계. 하지만 난 어려운 숫자는 없지만 추정치를 얻기 위해tezos-client를 사용하여 시뮬레이션 할 수 있습니다.
2. 계약 당 최대 저장 크기
마지막으로 두 번째 질문은 이미 부분적으로 1. AFAIK에 의해 답변되었습니다. 스마트 계약. 그러나 특정 크기,계약 저장을 더 이상 해독 할 수 없습니다. 그렇게하면 경질 가스 한계를 초과 할 수 있기 때문입니다. 또 다른 제한 요인은 자금입니다.
costs_per_byte
는 현재 1000입니다. 무테 즈. 즉,각 추가 kB는 저장하는 데 ~ 1tz (현재 ~=3usd)의 비용이 듭니다. 저장 용량을 늘리는 거래 발신자우리는 또한 상수를 고려해야합니다.
hard_storage_limit_per_operation
. 거래가있을 때마다 네트워크에 삽입되면 스토리지 제한과 관련됩니다. 일반적으로 사용자가 설정하여 거래가 의도하지 않은 양의 스토리지 화상을 유발하지 않습니다. 크기가 트랜잭션 적용으로 인한 스토리지 크기 차이 저장 한도를 초과하면 트랜잭션이 거부됩니다. 그만큼 상수hard_storage_limit_per_operation
은 가장 높은 설정할 수있는 저장 한도,따라서 최대 트랜잭션 당 스토리지 크기가 증가합니다. 그것은 다음과 같습니다 계약 저장 용량은 60000 바이트 이상 증가 할 수 없습니다. 거래 당. 그러한 거래는 오늘 ~ 180 USD의 비용이 듭니다.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.-
"이런txn은 비용이 듭니다"라고 말할 때 거래 수수료를 말하는 것입니까?가스는 금전적 의미가 없습니다.txn 수수료도 필요한 스토리지 양에 따라 증가합니까?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
-
실제로 가스에는 고정 비용이 없습니다.그러나 스토리지 굽기에는 바이트 당 고정 비용이 있습니다.예를 들어 여기를 참조하십시오 : https://tezos.stackexchange.com/a/2165/1773 및 여기 http://tezos.gitlab.io/introduction/howtouse.html에서 전체 설명을 확인하십시오.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
스마트 계약의 저장 제한에 대해 몇 가지 질문이 있습니다.