다차원 수수료 시장을 위한 가스 과잉 공급

이 기사는 기계로 번역되었습니다
원문 표시

다차원 수수료 시장을 위한 가스 과잉 공급

피드백과 주요 아이디어를 제공해 주신 비탈릭 부테린 에게 감사드립니다.

요약: 이 글에서는 이더리움 개선 제안(EIP)-7999 에 대한 "범용 오버플로"를 분석하여, 모든 이더리움 가상 머신(EVM) 가스를 가장 비싼 이더리움 가상 머신(EVM) 리소스 가격으로 책정하는 주요 비효율성을 피하면서 CALL 주변의 기존 스칼라 유지 가스 패턴을 유지하는 최소한의 방법을 살펴봅니다.

배경

다차원 수수료 시장은 자원 소비를 정밀하게 제어할 수 있게 해주는, 최종 단계 자원 가격 책정 메커니즘으로 가장 적합합니다. 실행, 상태 증가, 호출 데이터, 블롭 데이터와 같은 희소 자원 각각에는 기본 수수료가 부여되며, 트랜잭션은 이러한 자원에 걸쳐 실제로 소비된 양에 따라 비용을 지불합니다. 이를 통해 시장은 개발자가 안전하다고 판단한 목표와 한계에 따라 자원 가격을 공정하게 책정할 수 있으며, 이러한 한계 내에서 자원을 최대 용량으로 소비할 수 있습니다. 본 논문에서 고려하는 구현은 이더리움 개선 제안(EIP) -7706을 기반으로 구축된 이더리움 개선 제안(EIP) -7999 이며, 사용자가 단일 max_fee 설정할 수 있도록 하여 사용자 경험을 간소화하면서도 우수한 경제적 효율성을 유지합니다.

다차원 수수료 시장에서 가장 큰 문제는 가스 관찰 가능성(가스 인트로스펙션)을 어떻게 처리할 것인가입니다. 특히 일부 컨트랙트는 CALL 계열 오퍼코드(이하 CALL 로 약칭)의 gas 파라미터를 이용하여 호출자가 보유한 가스 중 일부만 전달하고, 나머지 작업은 호출 컨트랙트에서 완료해야 하므로 가스를 남겨둡니다. gas 파라미터는 다차원적이지 않기 때문에, gas 인트로스펙션에 의존하는 개발자는 리소스 차원에 따라 전달할 수 있는 가스의 양을 세밀하게 제어하기 어렵습니다. 일반적으로 gas 인트로스펙션을 지양하는 것이 바람직하지만, 현재로서는 개발자와 사용자 모두에게 수용 가능한 방식인지 불분명합니다.

이러한 이유로 이더리움 개선 제안(EIP)-7999는 가스 매개변수가 있는 서브콜을 처리하는 옵션을 제시합니다. 기본 접근 방식은 이더리움 가상 머신(EVM) 가스 매개변수 g_c g c 가 있는 기존 서브콜을 재해석하여 호출자의 남은 예산의 일부를 각 리소스 차원에서 전달하는 것입니다. 차원 j j 에서 호출자의 남은 예산이 g_j g j 이고 남은 총 가스량이 g_r := \sum_j g_j g r : = j g j 인 경우, 호출은 각 차원 j j에서 \lfloor g_j \cdot \min(1, g_c/g_r)\rfloor ⌊ g j min ( 1 , g c / g r ) 전달 합니다 .

사용자가 단일 트랜잭션 가스 한도를 지정하고 이더리움 가상 머신(EVM) 가스를 집계하는 방식을 사용하면 현재 이더리움 가상 머신(EVM) 에서와 마찬가지로 처리가 진행될 수 있습니다. 단점은 집계된 이더리움 가상 머신(EVM) 가스 한도가 가장 비싼 이더리움 가상 머신(EVM) 리소스에서 최종적으로 소모되지 않을 경우 사용자가 불필요하게 높은 max_fee 할당 값 지정해야 한다는 것입니다.

j 기본 수수료 b_j가상 리소스 별 제한 g_j 갖는 비결정적 이더리움 가상 머신(EVM) 리소스를 인덱싱하고, i 기본 수수료 b_i 갖는 결정적 가스 사용량 g_i 를 인덱싱합니다. 가장 비싼 이더리움 가상 머신(EVM) 리소스를 b_\text{max} := \max_j b_j b max : = max j b j 로 정의합니다. 총 트랜잭션 가스 제한 g_a g a ( 여기서 g_a = \sum_j g_j + \sum_i g_i g a = j g j + i g i) 는 개별 이더리움 가상 머신(EVM) 가스 제한 g_j g j 사용하는 것에 비해 실행 전 기본 수수료 충당에 필요한 양을 다음과 같이 증가시킵니다.

\sum_j (b_\text{max} - b_j)g_j.
j ( b max b j ) g j .

확정적 자원 i i 를 포함한 자금 지원 수표의 기본 수수료 부분은 다음과 같습니다.

m \ge (g_a-\sum_i g_i) b_\text{max} + \sum_i b_i g_i.
m ( g a i g i ) b max + i b i g i .

이 문제를 완화하기 위한 방안으로 다음과 같은 것들이 제시되었습니다:

  • 거래 후 검사에서 거래 총 수수료가 max_fee 를 초과한 것으로 나타나면 해당 블록 무효화합니다.
  • 블록 생성자 거래 실행 후 점검의 일환으로 누락된 자금을 보충할 수 있는 권한과 책임을 부여하십시오.
  • 거래자가 원할 경우 모든 차원에 대한 제한을 설정할 수 있는 기능을 제공하십시오.

마지막 옵션은 하이브리드 이더리움 가상 머신(EVM) 가스 설계입니다. 이는 이더리움 개선 제안(EIP)-7999에 제시된 옵션 중 가장 만족스러운 방식입니다. 가스 매개변수를 사용하는 CALL 호출 사용자는 집계된 이더리움 가상 머신(EVM) 가스를 사용할 수 있으며, 다른 모든 사용자는 리소스별로 개별 제한을 설정할 수 있습니다. 일부 사용자는 특정 리소스에 대해서만 집계를 적용할 수 있습니다. 그러나 집계된 이더리움 가상 머신(EVM) 가스를 사용하는 사용자의 경우 불필요하게 높은 max_fee 할당 문제가 여전히 남아 있습니다.

범용 오버플로우

"하이브리드 이더리움 가상 머신(EVM) 가스"를 개선하기 위한 한 가지 아이디어는 "범용 오버플로우"입니다. 이는 가스 매개변수를 사용하는 CALL 과 같은 일반적인 사용 사례에서 가장 비싼 이더리움 가상 머신(EVM) 리소스로 가격이 책정되어야 하는 가스의 비율을 줄입니다. 비탈릭은 다음과 같은 설계를 제안했습니다.

우리는 n+1 차원의 가스를 가지고 있으며, 여기서 n+1은 "전체 오버플로"입니다. 모든 연산은 의도된 형태의 가스를 소비하려고 시도하며, 해당 가스가 고갈되면 전체 오버플로에서 소비를 시작합니다. GAS 연산 코드는 남은 전체 오버플로를 반환하고, CALL 연산 코드는 지정된 전체 오버플로를 제외한 모든 새로운 가스 차원을 전달합니다.

즉, 기존 CALL 나머지 일반 다차원 가스 제한을 모두 전달하는 반면, 스칼라 가스 매개변수는 전체 오버플로가 얼마나 전달될지만 제어합니다. 이는 기존 가스 관찰 가능성의 핵심 사용 사례인 유지 가스 방식을 그대로 유지합니다. 호출자는 스칼라 가스 값을 사용하여 CALL 후 버퍼를 예약할 수 있으며, 대부분의 실행은 다차원 단위로 가격이 책정됩니다. 그림 1은 전체 오버플로가 녹색으로, 일반 가스 제한이 빨간색으로 표시된 하위 호출을 보여줍니다.

범용 오버플로우
범용 오버플로우 1920×937 63.4KB

그림 1. 녹색으로 표시된 유니버설 오버플로는 일반적인 다차원 리소스 제한(빨간색)과 함께 추가 트랜잭션 매개변수로 지정됩니다. 기존 CALL 남은 모든 일반 다차원 제한을 전달하는 반면, 스칼라 가스 매개변수는 공유 유니버설 오버플로를 얼마나 전달할지 결정합니다. 리소스의 일반 제한이 소진되면 트랜잭션은 유니버설 오버플로를 사용합니다.

이 설계에서는 실행 전 기본 수수료 자금 검사에서 max_fee 가 트랜잭션의 모든 이더리움 가상 머신(EVM) 가스에 대해 가장 비싼 리소스를 충당하도록 요구하지 않고, 범용 오버플로 금액만 충당하도록 합니다. 일반적으로 이는 호출자가 CALL 실행 후 보유하려는 가스이므로 트랜잭션에 할당된 총 이더리움 가상 머신(EVM) 가스의 작은 비율만 차지할 수 있어 경제적 효율성이 크게 향상됩니다. 범용 오버플로 한도 o_u 모든 이더리움 가상 머신(EVM) 리소스 j j 에 사용할 수 있으므로 실행 전 기본 수수료 자금 검사에는 다음이 필요합니다.

m \ge \sum_j b_j g_j + o_u b_\text{max} + \sum_i b_i g_i.
m j b j g j + o u b max + i b i g i .

개선 사항은 b_\text{max}가 이상 전체 이더리움 가상 머신(EVM) 가스 제한 \sum_j g_j j g j 에 적용되지 않는다는 데 있습니다. 보수적인 블록 유효성 사전 검사에서는 o_u o u가 단일 이더리움 가상 머신(EVM) 리소스에 완전히 소모될 가능성에 대비하여 용량을 확보해야 합니다(예: 각 이더리움 가상 머신(EVM) 차원에서 o_u o u 여유 공간을 확보).

두 번째 특징은 유용할 수도 있고 그렇지 않을 수도 있는데, 여러 분기가 있는 복잡한 거래는 범용 오버플로를 보다 대체 가능(fungible) 가스 버퍼로 활용할 수 있다는 점입니다. 다만, 가장 비용이 많이 드는 리소스에 따라 해당 버퍼에 더 많은 자금을 미리 할당해야 한다는 단점이 있습니다.

한 가지 제약 사항은 유니버설 오버플로가 전체 실행 용량을 나타내는 지표로서 GAS 보존하지 못한다는 점입니다. 이더리움 가상 머신(EVM) 일반적인 다차원 제한을 추적하지만, 기존 GAS 오퍼코드는 스칼라 CALL 매개변수로 제어할 수 있는 유니버설 오버플로만 보고합니다. 따라서 각 차원에 남은 일반 가스량을 알아야 하는 컨트랙트는 새로운 다차원 인트로스펙션 메커니즘이 필요하거나, 스칼라 인터페이스가 유용하게 사용될 수 있도록 충분한 유니버설 오버플로가 필요할 수 있습니다.

오버플로우 벡터

실행 전 자금 검사에서 최악의 경우 항인 o_u b_\text{max} o u b max 제거하는 것이 이상적입니다. 따라서 유니버설 오버플로에 대한 잠재적인 확장 방안은 단일 유니버설 오버플로 대신 n 개의 이더리움 가상 머신(EVM) 리소스 각각에 대한 구성 요소를 갖는 "오버플로 벡터" \mathbf{o} o 를 사용하는 것입니다. 가능한 레거시 관찰 규칙 중 하나는 o_r := \sum_j o_j o r : = j o j 로 설정하고 GAS opcode가 o_r o r 을 반환하도록 하는 것입니다. o_r>0 또는 o r > 0 인 경우, 가스 매개변수 g_c g c 를 사용한 CALL 각 리소스 차원 j j 에서 \lfloor o_j \cdot \min(1, g_c/o_r)\rfloor o j min ( 1 , g c / o r ) 오버플로 가스를 전달합니다. o_r=0 또는 o r = 0 인 경우 벡터 오버플로를 전달하지 않습니다. 유니버설 오버플로와 달리, 이 집계는 리소스별 벡터의 스칼라 투영일 뿐이므로, 유지된 가스 혼합물이 충분한지 여부를 판단하는 데 있어 런타임 신호로서 적합하지 않을 수 있습니다. 일반적인 다차원 제한은 그대로 전달됩니다.

그림 2는 일반적인 사용 사례를 보여줍니다. 하위 호출은 일반적인 다차원 제한 내에서 실행되지만, 후속 호출자 측 처리는 유지된 오버플로 벡터를 사용할 수 있습니다.

오버플로우 벡터
오버플로우 벡터 1762×1374 84.4KB

그림 2. 노란색은 오버플로 벡터이고, 빨간색은 일반 다차원 리소스 제한당 하나의 추가 오버플로를 나타냅니다. 서브콜에 전달되는 오버플로 벡터의 양은 오버플로 벡터의 총 가스량에 대한 CALL gas 매개변수에 따라 결정됩니다. 리소스의 일반 제한이 소진되면 트랜잭션은 연결된 오버플로를 사용합니다. 예시에서 호출자는 나중에 사용할 전체 오버플로 벡터를 예약합니다. 서브콜은 전달된 일반 다차원 제한 내에서 실행되고, 이후 호출자 측 처리에서는 예약된 오버플로 벡터를 사용할 수 있습니다.

사용자가 각 리소스 차원에서 트랜잭션의 초과 사용량에 대한 신뢰할 수 있는 예측치를 가지고 있다면, 초과 사용량 벡터를 통해 과도한 max_fee 할당을 방지할 수 있습니다. 각 초과 사용량 구성 요소는 별도로 지정되고 가격이 책정되므로, 사전 자금 확인 시 가장 비싼 리소스에 초과 사용량 예산이 실제로 할당되지 않는 한 해당 예산을 부과할 필요가 없습니다.

m \ge \sum_j b_j (g_j + o_j) + \sum_i b_i g_i.
m j b j ( g j + o j ) + i b i g i .

오버플로우 벡터의 향상된 경제적 효율성이 복잡성 증가를 고려할 때 유니버설 오버플로우보다 우선시될 만한 가치가 있는지는 불분명합니다. 사용자가 오버플로우 벡터에만 의존할 경우, 계약은 일반적으로 GAS 에서 반환된 총 가스량을 기준으로 런타임에 남은 오버플로우 가스가 리소스별로 적절히 혼합되어 의도된 실행(예: 서브콜 이후에 실행되도록 설정된 연산)에 충분한지 여부를 판단할 수 없습니다. 이러한 이유로 아래에서 논의할 하이브리드 방식이 필요합니다. 즉, 보유 가스의 리소스 혼합 비율이 불확실한 경우, 사용자는 불확실한 부분에 대해서는 유니버설 오버플로우를 사용하고, 사전에 알려진 리소스 사용량에 대해서는 오버플로우 벡터를 계속 사용할 수 있습니다.

다른 변형

가스 예약

CALL 호출 시 지정된 가스량에 비례하여 가스 제한 벡터를 전달하는 방식(이전에 살펴본 기본 접근 방식)과 지정된 가스량에 비례하여 오버플로 벡터를 전달하는 방식의 차이점은 오버플로 벡터를 호출자의 일반 가스 제한 벡터와 다른 리소스 구성 으로 지정할 수 있다는 점입니다. 이는 호출하는 컨트랙트가 CALL 후 작업(예: 정리, 회계 처리, 로그 생성)에 필요한 가스량을 수신 컨트랙트가 수행하는 작업량과 다르게 예약하려는 경우에 유용할 수 있습니다. 즉, 리소스 구성이 달라질 수 있다는 의미입니다. 오버플로 벡터를 사용하면 전달된 것과 다른 리소스 구성을 예약할 수 있습니다.

보다 침습적이지만 잠재적으로 더 깔끔한 이더리움 가상 머신(EVM) 변경 방법은 계약이 런타임에 특정 가스 벡터를 명시적으로 예약할 수 있도록 하는 것입니다. 개념적으로 이는 호출자의 남은 예산을 사용 가능한 (전달 가능한) 벡터와 CALL 실행 후 유지가 보장되는 예약된 (전달 불가능한) 벡터로 나눕니다. 이는 (a) 사용 가능한 벡터에서 예약된 벡터로 가스를 이동시키고 나중에 선택적으로 해제하는 오퍼코드를 사용하거나, (b) 전달된 가스 벡터와 예약된 가스 벡터를 모두 인수로 받는 다차원 CALL 변형을 통해 구현할 수 있습니다.

하이브리드 오버플로우

이 글에서 제안된 두 가지 접근 방식은 오버플로 벡터 o 와 범용 오버플로 o_u 를 모두 허용함으로써 결합할 수도 있습니다. 리소스에 대한 일반 가스 한도가 소진되면 프로토콜은 먼저 해당 리소스의 오버플 로 벡터 구성 요소 o_j 남아 있는 가스를 사용하고, 그 후에야 범용 오버플 o_u 에서 가스를 사용합니다. 이에 해당하는 기본 수수료 자금 조달 검사는 다음 같습니다.

m \ge \sum_j b_j (g_j + o_j) + o_u b_\text{max} + \sum_i b_i g_i.
m j b j ( g j + o j ) + o u b max + i b i g i .

하지만 이러한 하이브리드 방식에는 기존 관측 가능성 규칙도 필요합니다. 가장 간단한 규칙은 GAS opcode가 o_u o u 만 반환하고, 기존 CALL 가스 매개변수는 유니버설 오버플로가 얼마나 전달될지만 제어한다는 것입니다. 따라서 오버플로 벡터는 기존 가스 관측 가능성을 통해 노출되지 않으며, 기존 CALL 방식에서는 하위 호출 이후에 발생하는 모든 처리 과정에서 호출자에게 남아 있습니다.

결론

유니버설 오버플로는 CALL 중심으로 하는 기존 스칼라 유지 가스 패턴을 유지하면서도, 모든 이더리움 가상 머신(EVM) 가스 가격을 가장 비싼 이더리움 가상 머신(EVM) 리소스 가격으로 책정하는 주요 비효율성을 피하는 최소한의 방법을 제공합니다. 가장 비싼 가스에 대한 펀딩 요구 사항을 명시적으로 제공되는 유니버설 오버플로로 제한함으로써, 계약에 익숙한 유지 가스 버퍼를 제공하면서도 대부분의 실행에 대해 다차원 가격 책정 방식을 포기하지 않습니다. 오버플로 벡터 및 하이브리드 솔루션은 유용한 개선점을 제공할 수 있습니다. 그럼에도 불구하고, 유니버설 오버플로는 가스 관찰 가능성과 다차원 수수료 시장을 조화시키는 직관적인 기준선을 제공합니다.


출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트