Preventing Out-of-Gas Exceptions by Typing
Luca Aceto, Daniele Gorla, Stian Lybech, Mohammad Hamdaqa
TL;DR
This work extends a minimal Solidity-inspired language, TinySol, with a gas mechanism and exception handling to realistically model Ethereum-style smart-contract execution. It introduces a small-step operational semantics and a termination-focused type system that upper-bounds the number of execution steps for any transaction, thereby preventing out-of-gas failures. The core contributions include unit-gas semantics, a formal type-theoretic framework with bounded and unbounded integer types, and a subject-reduction theorem ensuring termination for well-typed configurations. The proposed approach enables static termination guarantees for smart-contract transactions, with clear limitations such as disallowing general recursion and while loops, and it outlines viable future directions toward more expressive termination proofs and practical case studies.
Abstract
We continue the development of TinySol, a minimal object-oriented language based on Solidity, the standard smart-contract language used for the Ethereum platform. We first extend TinySol with exceptions and a gas mechanism, and equip it with a small-step operational semantics. Introducing the gas mechanism is fundamental for modelling real-life smart contracts in TinySol, since this is the way in which termination of Ethereum smart contracts is usually ensured. We then devise a type system for smart contracts guaranteeing that such programs never run out of gas at runtime. This is a desirable property for smart contracts, since a transaction that runs out of gas is aborted, but the price paid to run the code is not returned to the invoker.
