본문으로 건너뛰기

Gas Smashing

Sui의 모든 Transaction은 성공적으로 실행되기 위해 가스 수수료를 지불해야 한다. Gas smashing은 단일 코인 대신 여러 코인을 사용해 이 수수료를 지불할 수 있도록 한다. 이는 소액 코인이 많거나 계정의 코인 수를 줄이고자 할 때 유용하다. Gas smashing은 GasCoin이 programmable transaction block (PTB) 인자로 함께 사용할 때 가장 강력하다.

Smashing gas

Gas smashing은 여러 코인을 가스 수수료로 제공할 경우 Transaction 내에서 자동으로 발생한다. Sui가 Transaction을 실행할 때, Sui는 가스를 지불하기 위해 제공된 모든 코인을 하나의 코인으로 병합(smashes)한다. 이 병합은 코인의 금액이나 Transaction에 지정된 가스 예산과 관계없이(최소 및 최대 가스 예산 범위 내에서라면) 발생한다. Sui는 Transaction의 실행 결과와 상관없이 단일 코인에서 가스 수수료를 공제한다. 특히, 실행 오류 등으로 인해 Transaction이 실패하더라도 가스 코인으로 제공된 코인들은 Transaction 실행 후에도 병합된 상태로 유지된다.

핵심 요점:

  • Transaction은 실행 성공 여부와 관계없이 병합된 코인에서 가스를 공제한다.
  • 실행이 실패하더라도 가스 코인들은 Transaction 이후 병합된 상태로 남는다.
  • 병합된 코인은 가스 공제 후 남은 SUI를 전송하는 등 동일한 PTB 내에서 다른 작업에 사용할 수 있다.

이 설계는 Gas smashing을 코인 관리와 가스 지불을 동시에 수행할 수 있는 실용적인 방법으로 만든다. 예를 들어, 여러 개의 소액 코인을 병합하면서 동시에 별개의 작업을 하나의 PTB에서 실행할 수 있다.

제한사항 및 영향:

  • 하나의 PTB에서 최대 256개의 코인만 병합할 수 있다. 256개를 초과하는 가스 코인을 가진 Transaction은 실패한다.
  • 첫 번째 코인을 제외한 나머지 코인들은 삭제되며, 이 과정에서 storage rebate가 발생할 수 있다.
  • Rebate는 동일한 Transaction 내에서 가스 지불에 사용할 수 없으며, 대신 실행 완료 후 첫 번째 코인에 rebate와 가스 공제 후 잔액이 함께 적립된다.

Running out of gas with a refund

병합은 항상 발생하기 때문에, storage rebate로 인해 Transaction이 가스를 소진하면서도 순 환급(net refund)을 발생시키는 특이한 결과가 생길 수 있다.

예시:

  • Transaction T의 가스 예산은 5000이다.
  • 다음 다섯 개의 코인을 각각 해당하는 잔액과 함께 제공한다: C1 = 1000, C2 = 2000, C3 = 3000, C4 = 4000, C5 = 5000.
  • 코인당 storage rebate는 2000이다.
  • 가스 비용이 5000 예산을 초과하면 TOutOfGas로 실패한다.

그러나 병합과 rebate 이후에는 다음과 같다:

Final balance in C1 =
(1000 + 2000 + 3000 + 4000 + 5000) // 모든 코인 잔액
- 5000 // 가스 비용
+ (2000 * 4) // 삭제된 코인에 대한 rebate
= 15000 - 5000 + 8000
= 18000

이 경우 T는 실패하지만 여전히 순 환급 3000을 받게 된다.