본문으로 건너뛰기

가스

네트워크로 보내는 모든 트랜잭션에 대해 NEAR는 수수료(일명 가스 수수료)를 청구합니다. 이 수수료는 네트워크 인프라를 유지하는 사람들에게 간접적으로 지불되고, 스마트 컨트랙트 개발자에게 인센티브를 제공하는 데 사용됩니다.

가스는 NEAR 생태계의 모든 사람에게 영향을 미치는 매력적인 주제입니다. 간략한 요약은 다음과 같습니다.

  1. 총 토큰 공급량의 일부를 소각하여 밸리데이터에게 간접적으로 지불하기 위해 모든 거래에 약간의 수수료가 부과됩니다.
  2. 이 수수료는 쓸모없는 트랜잭션으로 네트워크에 스팸을 보내는 것을 방지합니다.
  3. 읽기 전용 메서드는 사용자에게 수수료를 부과 하지 않으며, 대신 밸리데이터가 비용을 부담합니다.
  4. 컨트랙트가 포함된 트랜잭션에서 수수료의 30%는 개발자 인센티브의 형태로 컨트랙트로 갑니다.
  5. 수수료는 가스 단위로 측정 되지만, $NEAR로 지불됩니다.
  6. 가스 단위는 결정론적입니다. 동일한 트랜잭션동일한 가스비를 사용합니다.
  7. 가스 단위는 가스 가격을 곱하여 $NEAR로 변환됩니다 .
  8. 가스 가격은 블록마다 유연하게 변합니다.
  9. 가스는 벽 시간으로 생각할 수 있습니다: 1 Tgas1 ms의 계산 시간을 의미합니다.
  10. 트랜잭션에 **최대 300Tgas**를 포함할 수 있습니다.
  11. 여분의 가스를 추가한다고 해서 트랜잭션 실행이 더 빨라지는 것은 아닙니다. 사용하지 않은 가스는 단순히 반환됩니다.
  12. 컨트랙트 개발자는 사용자를 위해 가스를 선불로 지불할 수 있습니다.

소개

NEAR 네트워크에 트랜잭션을 보낼 때 서로 다른 밸리데이터들은 자체 인프라를 사용하여 트랜잭션을 처리합니다.

인프라를 가동 및 실행 상태로 유지하는 것은 네트워크를 건강하게 유지하는 데 중요하지만, 밸리데이터들에게는 상당한 비용이 드는 행위입니다.

다른 많은 네트워크와 마찬가지로, NEAR는 밸리데이터들에게 작업에 대한 비용을 지불합니다. 또한 다른 많은 네트워크와 마찬가지로, 사용자는 모든 거래 에서 약간의 수수료 (일명 가스 수수료)를 지불해야 합니다. 그러나 밸리데이터에게 가스 수수료를 제공하는 대신, NEAR의 밸리데이터는 가스 수수료 말고 별도의 보상을 받습니다. 이 항목은 밸리데이터 섹션에서 자세히 설명할 것입니다.

또한 NEAR는 가스 수수료와 관련하여 두 가지 고유한 기능을 구현합니다.

  1. 개발자와 수수료 공유
  2. 무료 트랜잭션 허용

1. 개발자 인센티브로서의 가스

NEAR의 고유한 점은 GAS가 밸리데이터에게 지급되지 않는다는 것입니다. 컨트랙트를 호출하면 가스 수수료가 발생하는데, 이러한 트랜잭션에서 수수료는 실제로 다음과 같이 나뉩니다.

  • 30%는 스마트 컨트랙트로 갑니다.
  • 70%는 소각됩니다.

이러한 방식으로 NEAR는 가스를 사용하여 생태계에서 dApp 개발을 장려합니다.

2. 무료 트랜잭션

NEAR의 또 다른 고유한 기능은, 심지어 NEAR 계정이 없어도 스마트 컨트랙트의 read-only 메서드를 무료로 호출할 수 있다는 것입니다.

이 경우 가스 비용을 부담하는 것은 밸리데이터입니다.


가스 단위 & 가스 가격

모든 트랜잭션에서 NEAR 사용자는 선불로 지불해야 하는 소액의 $NEAR 수수료를 청구받습니다. 그러나 트랜잭션 수수료는 $NEAR 단위로 계산되는 것이 아닙니다.

가스 단위

내부적으로 계산은 결정론적인 가스 단위 를 사용하여 수행됩니다. 즉, 동일한 작업에는 항상 동일한 양의 가스가 필요합니다.

가스 가격

실제 $NEAR 수수료를 결정할 때, 트랜잭션에 의해 수행된 모든 작업의 ​​가스가 합산되고, 여기에 가스 가격이 곱해집니다.

가스 가격은 고정되어 있지 않습니다: 이는 네트워크 수요에 따라 각 블록마다 다시 계산됩니다. 이전 블록이 절반 이상 차면 가격이 올라가고 그렇지 않으면 내려갑니다.

가격은 각 블록당 1% 이상 변경될 수 없으며 네트워크에서 구성한 가격(현재 1억 yocto NEAR)으로 최소값이 설정되어 있습니다.---

가스를 컴퓨팅 리소스로 변환하기

가스 단위는 생각하기 쉬운 숫자로 계산되도록 신중하게 설정되었습니다.

  • 1 TGas (10¹² 가스 단위) ≈ 1 밀리초 만큼의 계산 시간.
  • 이는 0.1 milliNEAR를 나타냅니다(최소 가스 가격을 사용했을 때).

1ms는 단순하지만 유용한 근사치입니다. 한편 가스 단위는 컴퓨팅/CPU 시간뿐만 아니라 대역폭/네트워크 시간 및 스토리지/IO 시간도 캡슐화합니다.

거버넌스 메커니즘을 통해 시스템 매개변수가 조정되어 향후 TGas와 밀리초 사이의 매핑이 전환될 수도 있습니다.

매 초 블록 생산 NEAR 는 블록이 약 1초마다 생성되도록 블록당 최대 가스량을 부과합니다. :::

일반적인 Action의 비용

NEAR의 비용에 대해 예상할 수 있는 시작점을 제공하기 위해, (최소 가스 가격 내) 아래 표에는 TGas 및 milliNEAR의 일부 일반적인 Action의 비용이 나열되어 있습니다.

작업TGas수수료 (mN)수수료 (Ⓝ)
계정 생성0.420.0424.2⨉10⁻⁵
자금 전송0.450.0454.5⨉10⁻⁵
스테이킹0.500.0505.0⨉10⁻⁵
전체 액세스 키 추가0.420.0424.2⨉10⁻⁵
키 삭제0.410.0414.1⨉10⁻⁵
이 숫자는 어디에서 왔나요?

NEAR는 기본 비용으로 구성되어 있습니다. 예시는 다음과 같습니다:

  transfer_cost: {
send_sir: 115123062500,
send_not_sir: 115123062500,
execution: 115123062500
}

여기서 "sir"는 "수신자가 발신자와 같음"을 의미합니다. 맞습니다! 이 숫자들은 모두 동일하지만, 향후 변경될 수 있습니다.

자금 전송을 요청하면 NEAR는 즉시 계좌에서 해당 send 금액을 인출합니다. 그런 다음 NEAR의 비동기식 샤드 설계를 용이하게 하는 내부 장부 관리 메커니즘인 Receipt 를 생성합니다 (Ethereum에 익숙한 경우, Ethereum의 Receipt에 대해 알고 있는 내용과는 완전히 다르기 때문에 잊어버리세요). Receipt 생성에는 자체 관련 비용이 있습니다.

  action_receipt_creation_config: {
send_sir: 108059500000,
send_not_sir: 108059500000,
execution: 108059500000
}

protocol_config RPC 엔드포인트를 사용하여 이 값을 조회할 수 있고, action_receipt_creation_config을 검색할 수 있습니다.

이 Receipt를 생성하는 데 드는 적절한 send 금액도 계정에서 즉시 차감됩니다.

"전송" Action은 다음 블록까지 완결되지 않습니다. 이 시점에서, 각 Action에 대한 execution 금액은 계정에서 차감될 것입니다(이 다음 블록의 가스 단위는 가스 가격이 각 블록에서 다시 계산되기 때문에 최대 1% 다른 가스 가격으로 곱해질 수 있음을 기억하세요). 이를 모두 다 더하면 전체 트랜잭션 수수료를 계산해낼 수 있습니다.

    (transfer_cost.send_not_sir  + action_receipt_creation_config.send_not_sir ) * gas_price_at_block_1 +
(transfer_cost.execution + action_receipt_creation_config.execution) * gas_price_at_block_2

가스는 어떻게 구매할 수 있나요?

가스는 직접 구매하는 것이 아닙니다; 단순히 트랜잭션에 토큰을 포함시키는 형태면 충분합니다.

Ethereum에 익숙하다면, 트랜잭션을 더 빨리 처리하기 위해 더 높은 가스 가격을 지불한다는 생각에도 익숙할 것입니다. NEAR에서 가스 비용은 결정론적이며 추가 비용은 지불할 수 없습니다.

전송과 같은 기본 Action의 경우 필요한 가스를 미리 쉽게 계산할 수 있으므로, 가스비는 자동으로 트랜잭션에 포함될 것입니다.

함수 호출은 더 복잡하며, 최대 3⨉10¹⁴ 가스 단위(300 Tgas)까지 명시적인 양의 가스를 트랜잭션에 추가해야 합니다.

이 선불 가스의 이 최대값은 변경될 수 있지만, protocol_config RPC 엔드포인트를 사용하여 이 값을 조회할 수 있고 max_total_prepaid_gas를 검색할 수 있습니다. :::
Details

이 단위에는 몇 개의 토큰이 들까요?__ NEAR 토큰이나 yoctoNEAR이 아닌 최대 수의 가스 _단위_에 녹색 불이 켜집니다.

이러한 단위는 처리되는 블록 내의 가스 가격과 곱해집니다. 함수 호출이 교차 컨트랙트 호출을 수행하는 경우, 함수의 일부가 다른 블록에서 처리되고, 다른 가스 가격을 사용할 수 있습니다. 해당 숫자의 출처에 설명된 대로, 함수는 완결되려면 최소 두 블록을 기다려야 합니다.

전체 운영 중 시스템의 최소 가스 가격이 1억 yoctoNEAR로 유지된다고 가정하면, 3⨉10¹⁴의 최대 가스는 3⨉10²² yN의 최대 지출을 허용하는 것처럼 보입니다. 그러나 샤드 혼잡을 방지하기 위해 비관적으로 생각하면 약 6.4 정도가 곱해질 수도 있습니다 .

이 세 가지 숫자를 모두 곱하면 가스 가격이 최소로 유지되는 경우 최대 가스 단위로 약 0.2Ⓝ를 Action에 사용할 수 있음을 알 수 있습니다. 가스 가격이 최소값보다 높으면, 이 요금이 더 높을 수 있습니다.

시작 블록에서는 가스 가격이 최소였지만, 작업을 완료하는 데 여러 블록이 걸리고 후속 블록의 가스 가격이 더 높으면 어떻게 됩니까? 요금이 ~0.2Ⓝ 이상일 수 있나요? 아닙니다. 비관적 승수(pessimistic multiplier)는 이러한 가능성에 대해 설명합니다.


여분의 가스는 환불됩니다!

컨트랙트를 호출하는 데 필요한 가스의 양은 메서드의 복잡성과 컨트랙트의 상태에 따라 다릅니다. 이것은 매번 미리 예측하기 어렵습니다.

이 때문에 가스를 충당하는 데 필요한 것보다 더 많은 토큰을 수수료로 사용하면, 남은 수수료를 환불받을 수 있습니다!

이는 기본 Action에서도 마찬가지입니다. 비용 섹션에서 $NEAR 수수료가 자동으로 계산되어 첨부된다고 언급한 바 있습니다. 이러한 작업이 적용되는 동안 가스 가격이 조정될 수 있으므로 약간의 추가 금액이 부과되며 필요한 금액을 초과하면 환불됩니다.


선불 가스(prepaid gas)는 어떠한가요?

NEAR 팀은 개발자가 사용자에게 최상의 온보딩 경험을 제공하기를 원한다는 것을 이해합니다. 이 비전을 실현하기 위해, 최초 사용자가 개발자가 관리하는 계정에서 직접 가스를 구매하기 위한 자금을 인출할 수 있는 방식으로 애플리케이션을 설계할 수 있습니다. 일단 온보딩되면 사용자는 플랫폼 사용에 대한 지불로 전환할 수 있습니다.

이러한 의미에서 선불 가스는 신규 사용자 온보딩을 위한 자금 계정 및 관련 컨트랙트들을 사용하여 실현될 수 있습니다.

그렇다면 개발자는 NEAR에서 어떻게 사용자의 가스 요금을 지불할 수 있나요?

  • 사용자는 이 dApp의 가스비에 적합한 개발자 계정에서 직접 자금을 사용할 수 있습니다. 그런 다음, 개발자는 계정 이름 대신 서명자의 키를 기반으로 사용자를 구분해야 합니다.

  • 함수 호출을 사용하면 계정이 없는 새 사용자가 dApp과 온체인 컨트랙트를 사용하도록 허용할 수 있습니다. 백엔드는 컨트랙트 계정에서 사용자를 위한 새로운 액세스 키를 생성하고, 컨트랙트를 가리킵니다. 이제 사용자는 지갑을 거치지 않고 즉시 웹 앱을 사용할 수 있습니다.

NEAR 프로토콜은 개발자 자금 사용에 대한 제한 기능을 제공하지 않습니다. 개발자는 특정 사용자에 해당하는 액세스 키에 대해 접근 권한을 설정할 수 있습니다. 이는 특정 접근권이 있는 새 사용자당 하나의 FunctionCall 액세스 키를 의미합니다.