Gas Smashing
Every transaction on Sui has a gas fee associated with its execution that must be paid to successfully execute the transaction. Gas smashing enables you to pay for this gas fee using multiple coins instead of just one. This mechanism is especially helpful in scenarios where you might have a number of coins with smaller denominations, or if you simply want to minimize the number of SUI coins under your account. Gas smashing is generally a useful tool for coin management, especially when coupled with the GasCoin
programmable transaction block (PTB) argument.
Smashing gas
Gas smashing happens automatically in a transaction if you provide multiple coins to pay for the gas fee. When Sui executes a transaction, Sui combines, or "smashes", all of the coins you provide to pay for the gas into a single coin. The smashing occurs regardless of coin amounts or the gas budget provided with the transaction (as long as it is within the minimum and maximum gas budgets). Sui deducts the gas fee from the single coin regardless of the execution status of the transaction. In particular, this means that even if the transaction fails to execute for some reason (such as an execution error) the coins that you provided as gas coins remain smashed after the transaction's execution.
Gas smashing is an efficient way to perform coin management, and to combine many smaller coins into one single coin that you can use to not only pay for gas fees, but also for other operations in the transaction that smashes the coins. In particular, you can use gas smashing to combine multiple coins to pay for the gas fee of the PTB, and then that same PTB can withdraw from the GasCoin
. A special argument is available in PTBs that references the coin used to pay gas after Sui deducts the gas fee from it, which you can use to transfer the remaining SUI to another address. Because gas smashing happens automatically in a transaction if you provide multiple gas coins, you can combine multiple coins as part of other transactions to perform coin management in parallel with non-coin-management specific transactions.
Sui has a maximum of 256 coins that you can smash in a single PTB - the transaction is not processed if the number of gas coins exceeds this amount. Additionally, when you smash gas coins, Sui deletes all but the first coin. Because of this, there is often a storage rebate associated with the deletion of these coins. As with other storage rebates, you can't use the resulting refund to pay for the gas fee of the transaction (and isn't credited to the coin until after the execution of the transaction), but it might result in a refund after the execution of the transaction. This refund, along with the remaining balance after the transaction's gas fee, resides in the first gas coin you provide in the transaction after execution.
Running out of gas with a refund
Because coins are smashed regardless of the execution status, storage rebates can lead to seemingly odd cases where a transaction can both run out of gas and end up with a negative gas and storage fee (you get a refund from the transaction). As an example of how this might happen, take a transaction T
that has a gas budget of 5000
, and you provide coins C1
, C2
, C3
, C4
, C5
with values of 1000
, 2000
, 3000
, 4000
, and 5000
to pay for gas. If the storage rebate for a coin object is 2000
, and the gas fee for T
execution is more than the provided gas budget of 5000
(so, T
runs out of gas), this results in an execution status of OutOfGas
. The C1
coin has a balance of 1000
+ 2000
+ 3000
+ 4000
+ 5000
- 5000
+ 2000
* 4
= 15000
- 5000
+ 8000
= 18000
and T
ends up with a negative gas and storage fee (a refund) of 3000
.