본문으로 건너뛰기

가스 수수료

Sui transaction은 실행의 연산 비용과 transaction이 생성하거나 변경하는 object를 저장하는 장기 비용을 모두 지불해야 한다.

Sui 가스 가격 메커니즘은 세 가지 결과를 달성한다:

  1. 예측 가능한 transaction fees를 제공한다.

  2. validators가 transaction 처리 작업을 최적화하도록 유도한다.

  3. 서비스 거부 공격을 방지한다.

이 가격 메커니즘은 현재 gas fees의 시장 가격을 예측할 필요 없이 최적의 사용자 경험을 제공한다. Validators가 각 epoch 시작 시 네트워크 전반의 참조 가격에 합의하므로, transactions를 제출할 때 참조 가격을 신뢰할 수 있는 기준점으로 사용할 수 있다. 또한 가격 설정 메커니즘은 우수한 validator 동작에 보상을 주어 SUI 토큰 보유자, validators, users 사이의 인센티브를 정렬한다.

Gas fee structure

모든 transaction의 gas fees는 다음과 같다:

total_gas_fees = computation_units × reference_gas_price + storage_units × storage_price

Sui 가스 가격 메커니즘의 고유한 특징은 사용자가 transaction 실행과 각 transaction에 연결된 데이터 저장에 대해 별도의 수수료를 지불한다는 점이다. 임의의 transaction τ와 관련된 gas fees는 다음과 같다:

GasFees[τ]=ComputationUnits[τ]×ComputationPrice[τ]+StorageUnits[τ]×StoragePriceGasFees[\tau] = ComputationUnits[\tau] \times ComputationPrice[\tau] + StorageUnits[\tau] \times StoragePrice

가스 함수 ComputationUnits[τ]ComputationUnits[\tau]StorageUnits[τ]StorageUnits[\tau]는 각각 τ와 연결된 데이터를 처리하고 저장하는 데 필요한 연산 및 저장 리소스의 양을 측정한다. 가스 가격 ComputationPrice[τ]ComputationPrice[\tau]StoragePriceStoragePrice는 각각 연산 비용과 저장 비용을 SUI 단위로 환산한다. gas units와 gas prices의 분리는 SUI 시장 가격이 수요와 공급에 따라 시간이 지나며 변동하기 때문에 유용하다.

Computation units

서로 다른 Sui transactions는 처리와 실행에 서로 다른 양의 연산 시간을 필요로 한다. Sui는 각 transaction을 computation units 기준으로 측정함으로써 이러한 상이한 운영 부하를 transaction fees로 환산한다. 일반적으로 더 복잡한 transactions일수록 더 많은 computation units가 필요하다.

Sui의 computation gas schedule은 bucketing approach를 사용해 대략적으로 구성된다. 비교적 유사한 두 transaction은 동일한 bucket에 속하면 정확히 같은 양의 computation units로 환산되며, 비교적 다른 두 transaction은 서로 다른 buckets에 속하면 서로 다른 양의 computation units로 환산된다. 가장 작은 bucket은 1,000 computation units에 매핑되며, 가장 작은 bucket에 속하는 모든 transactions는 1,000 computation units의 비용이 든다. 가장 큰 bucket은 5,000,000 computation units에 매핑되며, transaction에 이보다 더 많은 computation units가 필요하면 abort된다.

대략적인 bucketing은 두 가지 중요한 목표를 달성한다:

  • gas golfing을 통해 gas costs의 미세한 이득을 얻기 위해 스마트 계약을 최적화해야 하는 부담에서 벗어나게 한다. 대신 제품과 서비스의 비약적인 개선에 집중할 수 있다.
  • 상당한 개발 중단을 일으키지 않고 명령어별 gas costs를 조정하고 새로운 gas metering schemes를 실험할 수 있게 한다. 이는 자주 일어날 수 있으므로 명령어별 gas costs가 시간이 지나도 안정적으로 유지될 것이라고 기대하지 않는 것이 중요하다.
Bucket lower thresholdBucket upper thresholdComputation units
01,0001,000
1,0015,0005,000
5,00110,00010,000
10,00120,00020,000
20,00150,00050,000
50,001200,000200,000
200,0011,000,0001,000,000
1,000,0015,000,0005,000,000
5,000,001Infinitytransaction aborts

Storage units

마찬가지로 Sui transactions는 온체인 storage에 새로 기록되는 데이터 양에 따라 달라진다. Variable storage units는 storage에 보관되는 bytes 양을 storage units로 매핑해 이러한 차이를 포착한다. 현재 Sui schedule은 선형이며 각 byte를 100 storage units로 매핑한다. 예를 들어 25 bytes를 저장하는 transaction은 2,500 storage units의 비용이 들고 75 bytes를 저장하는 transaction은 7,500 units의 비용이 든다.

Sui의 storage fund 모델에서는 사용자가 데이터를 영구적으로 저장하는 비용을 미리 지불하지만 해당 데이터가 삭제되면 이전에 저장된 데이터에 대해 부분 리베이트를 받을 수도 있다. 따라서 사용자가 지불하는 storage fees 양은 rebateable amount와 non-rebateable amount로 나눌 수 있다. 초기에는 rebateable amount가 storage fees의 99%와 같고, non-rebateable amount는 나머지 1%와 같다.

Storage rebates

Sui storage mechanics는 transaction이 이전에 저장된 objects를 삭제할 때마다 storage fee rebates를 제공한다. 따라서 사용자가 지불하는 net fees는 gas fees에서 data deletion과 관련된 rebates를 뺀 값과 같다:

net_gas_fees = computation_gas_fee + storage_gas_fee - storage_rebate

Net gas fees 정보는 각 transaction block에 대해 Sui network explorer에 표시된다:

Gas Fees displayed on a Sui network explorer

Computation gas prices

Computation gas price ComputationPrice[τ]ComputationPrice[\tau]는 SUI 단위에서 연산 한 단위의 비용을 나타낸다. 이 가격은 transaction 수준에서 설정되며, 사용자가 transaction의 gas price로 제출한다. 개념적으로 이 gas price를 두 부분으로 나누어 생각하는 것이 유용하다:

ComputationPrice[τ]=ReferencePrice+Tip[τ]ComputationPrice[\tau] = ReferencePrice + Tip[\tau]

Sui 네트워크에서는 각 epoch 동안 단일한 ReferencePriceReferencePrice가 존재하며, Sui validators는 각 epoch 경계에서 ReferencePriceReferencePrice를 갱신한다. 따라서 실제로 사용자가 ReferencePriceReferencePrice보다 높은 gas price를 제출한다면, 그 차이는 더 높은 우선순위를 얻기 위해 네트워크에 지불하는 tip이라고 생각하면 된다. 네트워크가 정상적으로 작동하는 시기에는 users가 tips를 지불할 것으로 예상되지 않으며, 대부분의 transactions는 gas prices가 ReferencePriceReferencePrice와 같다.

Sui 가스 가격 메커니즘은 ReferencePriceReferencePrice를 네트워크에 transactions를 제출할 때 참조할 수 있는 신뢰 가능한 기준점으로 만들어 주며, 참조 가격과 같거나 가까운 gas prices로 제출된 transactions가 적시에 실행된다는 합리적인 확신을 제공한다. 이는 세 가지 핵심 단계를 통해 달성된다.

Gas price survey

epoch 시작 시 모든 validators를 대상으로 설문이 이루어지며, 각 validator는 자신의 reservation price를 제출한다. 즉, 각 validator는 transactions를 처리할 의향이 있는 최소 gas price를 명시한다. 프로토콜은 이 quotes를 정렬하고 stake 기준 2/3 percentile을 reference price로 선택한다. Gas price survey의 목표는 quorum의 validators가 transactions를 신속하게 처리할 의사가 있는 참조 가격을 설정하는 것이다.

Tallying rule

Epoch 동안 validators는 다른 validators의 운영에 대한 signals를 획득한다. 각 validator는 이러한 signals를 사용해 다른 모든 validator의 성능에 대한 주관적 평가를 구성한다. 구체적으로 각 validator는 다른 모든 validator의 stake rewards에 대한 multiplier를 구성하여, 잘 동작한 validators는 rewards가 증가하고 그렇지 않은 validators는 rewards가 줄어들게 한다. Tallying rule의 목표는 validators가 reference gas price를 지키도록 장려하는 공동체 기반 메커니즘을 만드는 것이다.

Incentivized stake reward distribution rule

Epoch 끝에서 validators 전반의 stake rewards 분배는 tallying rule의 정보를 사용해 조정된다. 구체적으로 tallying rule 동안 구성된 개별 multipliers 집합 중 stake 가중 median 값을 사용해 각 validator에 대한 global multiplier를 만든다. 다른 조건이 동일하다면 성능이 좋았던 validators는 일반적인 stake rewards를 받는 반면, reference gas price에서 충분한 성능을 보이지 못한 validators는 slash된 rewards를 받는다. Stake rewards는 각 validator가 보유한 stake 양의 영향을 받으므로, validators는 gas fees를 낮추고 비효율적인 validators를 가격 경쟁에서 밀어내며 더 많은 stake를 확보하도록 유도된다. 이는 stake reward distribution rule이 validators로 하여금 더 비용 효율적인 네트워크를 제공하도록 장려하므로 Sui end users에게 이익이 된다.

Storage gas prices

Storage gas price StoragePriceStoragePrice는 SUI 단위에서 storage 한 단위를 영구적으로 감당하는 비용을 나타낸다. 이 가격은 governance proposals를 통해 설정되며 자주 변경되지 않는다. 목표는 Sui users가 온체인 data storage 사용에 대한 비용을 storage fund에 예치함으로써 지불하게 하고, 이후 이 fees를 미래 validators에게 재분배하는 것이다. Computation gas price와 달리 storage prices는 storage price가 갱신될 때까지 epoch 내부와 epoch 사이 모두에서 모든 transactions에 대해 고정되고 동일하다.

StoragePriceStoragePrice는 off-chain 달러 기준 data storage 비용을 목표로 하기 위해 governance proposal을 통해 외생적으로 설정된다. 장기적으로 storage costs는 기술 개선으로 하락하고 SUI token의 달러 가격은 변동하므로, governance proposals는 새로운 달러 목표 가격을 반영하도록 가격을 갱신한다.

Gas prices as a coordination mechanism

현재 epoch의 ReferencePriceReferencePrice와 같거나 가까운 computation gas prices, 그리고 목표 StoragePriceStoragePrice인 storage gas prices로 transactions를 제출하면 가장 좋은 사용자 경험을 얻게 된다. Sui 가스 가격 메커니즘은 transactions 제출을 위해 신뢰할 수 있는 reference prices를 제공한다. Validators가 자신의 진정한 reservation prices를 드러내고 이 quotes를 준수하도록 인센티브를 주기 때문에, 사용자는 자신의 transactions가 적시에 처리될 것이라고 신뢰성 있게 가정할 수 있다.

Sui가 horizontal scaling을 활성화한 이후에는 validators가 온체인 activity 수요 증가에 맞춰 더 많은 workers를 추가할 수 있다. 이는 네트워크 활동 속도에 맞춰 비용을 선형적으로 증가시키면서도 같은 낮은 gas prices로 더 많은 transactions를 처리할 수 있게 한다. Validators가 충분히 빠르게 확장할 수 없는 극심한 네트워크 혼잡 상황에서는 tip의 존재가 시장 기반 congestion pricing 메커니즘을 제공하여, 거래 비용을 높임으로써 추가적인 수요 급증을 억제한다.

장기적으로 Sui 가스 가격 메커니즘은 validators가 자신의 하드웨어와 운영을 최적화하도록 인센티브를 만든다. 더 효율적으로 운영되도록 투자하는 validators는 더 낮은 gas prices를 유지하고 stake reward boost를 얻을 수 있다. 따라서 Sui validators는 혁신하고 end users의 경험을 개선하도록 장려된다.

Gas budgets

모든 transactions는 gas budget과 함께 제출해야 한다. 이는 사용자가 지불하는 gas fees의 양에 상한을 제공하며, 특히 transaction을 Sui 네트워크에 제출하기 전에 비용을 완벽하게 예측하기 어려울 수 있기 때문에 중요하다.

Sui transaction의 gas budget은 SUI 단위로 정의되며, 다음을 만족하면 transactions는 성공적으로 실행된다:

gas_budget >= max{computation_fees, total_gas_fees}

Gas budget이 이 조건을 충족하지 못하면 transaction은 실패하고 gas budget의 일부가 청구된다. gas_budgetcomputation_fees를 충당하기에 부족한 경우 gas_budget 전체가 청구된다. gas_budgetcomputation_fees를 충당하기에는 충분하지만 total_gas_fees는 충당하지 못하는 경우에는 computation_fees와 transaction의 input objects를 변경하는 데 관련된 fees에 해당하는 gas_budget의 일부가 청구된다.

궁극적으로 성공적인 transaction은 end user가 transaction의 total_gas_fees를 지불해야 한다. 그러나 transaction이 처리되기 전에 computation time을 완벽하게 예측하는 것은 어렵기 때문에, gas_budget 조건은 transaction이 abort되는 경우를 대비해 gas_budget이 transaction의 computation_fees 이상이도록 요구하기도 한다. 일부 경우, 특히 storage rebates가 커서 net storage fees가 음수가 되는 경우에는 사용자가 실제로 지불하는 total gas fees보다 gas budget이 더 높을 수 있다.

Minimum gas budget은 2,000 MIST (0.000002 SUI)이다. 이는 gas budget이 잘못 지정되어 transaction이 abort되더라도 validators가 최소 2,000 MIST를 보상받도록 한다. 또한 이는 아주 작은 gas budgets를 가진 많은 transactions로 Sui 네트워크가 스팸되는 것을 막는다. Maximum gas budget은 50 billion MIST 또는 50 SUI이다. 이는 내부 곱셈 오버플로우와 서비스 거부 공격을 위한 gas limits 악용으로부터 네트워크를 보호한다.

앞서 언급했듯이 storage rebate는 현재 원래 지불한 storage fees의 99%와 같다. Gas budget은 전체 gas fees에 적용되므로, 사용자가 최종적으로 지불하는 net gas fees보다 gas budget이 훨씬 높아야 transaction이 통과하는 경우가 자주 있다.

Gas budget examples

다음 표는 Sui 네트워크의 gas accounting 예시를 제공한다. 처음 두 행과 마지막 두 행에서는 transactions가 동일한 bucket에 속하기 때문에 computation units가 같다. 그러나 마지막 두 transactions는 처음 두 transactions보다 더 복잡하므로 더 높은 bucket에 속한다. 마지막 transaction에서는 storage rebate가 transaction gas fees를 완전히 상쇄하고 실제로 사용자에게 양의 SUI를 돌려준다.

이 예시들은 gas budget의 중요성을 보여준다. Minimum gas budget은 transaction이 성공적으로 실행되도록 지정할 수 있는 가장 작은 양이다. Storage rebate가 있을 때 minimum gas budget은 사용자가 최종적으로 지불하는 net gas fees보다 더 크다. 이는 마지막 예시에서 transaction을 실행한 사용자에게 양의 금액이 돌아오는 경우에 특히 두드러진다. 이는 minimum gas budget이 transaction의 computation fees보다 커야 하기 때문이다.

Reference gas priceComputation unitsStorage priceStorage unitsStorage rebateMinimum gas budgetNet gas fees
Simple transaction storing 10 bytes1,000 MIST1,00075 MIST1,0000 MIST1,075,000 MIST1,075,000 MIST
Simple transaction storing 10 bytes and deleting data500 MIST1,00075 MIST1,000100,000 MIST500,000 MIST475,000 MIST
Complex transaction storing 120 bytes1,000 MIST5,000200 MIST12,0000 MIST7,400,000 MIST7,400,000 MIST
Complex transaction storing 120 bytes and deleting data500 MIST5,000200 MIST12,0005,000,000 MIST2,500,000 MIST-100,000 MIST