Skip to main content
Version: v6
Attention!You are viewing unreleased ink! 6 docs. Click here to view the latest docs.

Gas Title Picture

What is "Gas" in ink!?

For ink!, the term Gas refers to the resources used by a contract call. It's important for smart contracts that the caller has to pay for any utilized resource.

Those resources can be either storage space (for storing data in the contract's storage) or computational time (for executing the contract and its logic). The term Gas encompasses both of these resources: Gas = (refTime, proofSize).

The terms hereby refer to:

refTime: The amount of computational time that can be used for execution, in picoseconds.

proofSize: The amount of storage in bytes that a transaction is allowed to read.

The term refTime comes from "reference time", referring to the Polkadot SDK Weights system, where computation time is benchmarked on reference hardware. You can read more details here.

The term proofSize is only relevant for parachains on the Polkadot or Kusama networks. It can be ignored for standalone chains (like Aleph Zero). On a high level, proofSize is the size of the proof that individual parachains send to the Polkadot or Kusama relay chain to allow re-executing their block for validation (this is called Proof of Validity). Phrased differently: Layer-1 chains send a proof of validity to a Layer-0 chain to validate the block. This Proof of Validity contains everything necessary to execute the block -- the code of each contract that is executed plus the storage each contract reads and writes.

info

Blockchains that support ink! are built using Polkadot SDK which uses the concept of Weight to describe the usage of resources. Specifically, the terms above come from the Polkadot SDK "Weights V2" system. For ink!, Gas is a synonym to the concept called "Weight" in this SDK. The Weights concept is similar to what smart contract developers might know from other ecosystems, but is more fine grained. It also tracks the utilized bandwidth, not just execution. For ink! smart contracts the utilized bandwidth is the proofSize explained above.

We decided on using the term "Gas" to make onboarding easier for developers from other smart contract ecosystems. So: Gas = Weight = (refTime, proofSize).