메인 콘텐츠로 건너뛰기
모든 콜렉션이오스(EOS)가 처음이신가요?EOS의 실제활용
안텔로프(Antelope) 기반 블록체인 사용 시 트랜잭션 비용 절감방법
안텔로프(Antelope) 기반 블록체인 사용 시 트랜잭션 비용 절감방법

높은 트랜잭션 수수료(CPU 10ms 초과)의 원인은 주관적 청구(subjective billing) 때문일 수 있습니다.

Dario Cesaro avatar
작성자: Dario Cesaro
최소 1년 전에 업데이트됨

1. 소개

트랜잭션에 서명 시 CPU가 부족하다는 오류 메시지와 함께 10~30ms 또는 그 이상의 CPU를 지불하라는 메시지가 사용자에게 표시되는 경우가 종종 있습니다. 이러한 종류의 시스템 작동은 주관적 청구와 관련이 있을 수 있습니다. 이 글에서는 이러한 상황을 처리하는 방법을 안내해드리겠습니다.

2. 주관적 청구

주관적 청구는 노드 운영자가 나머지 네트워크와 청구 정보를 공유하지 않고, 실패한 트랜잭션에 사용된 리소스에 대해 해당 노드에서 로컬로 계정에 청구할 수 있는 안텔로프 블록체인의 기능입니다.

주관적 청구는 CPU 사용량을 줄이기 위해 도입되었지만, 트랜잭션이 지속적으로 실패하거나 트랜잭션이 손실되는 경우가 종종 발생합니다.

3. 안텔로프 블록체인의 트랜잭션 라이프 사이클

안텔로프 블록체인은 P2P 네트워크 연결을 채택해 네트워크 전체에 트랜잭션을 전달합니다. 트랜잭션이 한 노드에서 다른 노드로 이동할 때, 트랜잭션이 이동하는 경로는 노드의 구성과 네트워크 지연 시간(latency)에 따라 달라집니다.

그림 1: ENF 웹사이트

그림 1은 안텔로프 블록체인에서 트랜잭션의 라이프 사이클을 보여줍니다.

  • 트랜잭션은 사용자가 API를 사용해 노드에 제출할 때 존재합니다(1.1).

  • API 노드는 제출된 트랜잭션을 P2P 프로토콜로 전달합니다(1.2).

  • 이 프로토콜은 트랜잭션이 현재 BP(블록 생산자)에게 도달할 때까지(1.4) 한 노드에서 다른 노드로 트랜잭션을 전달합니다(1.3).

  • 그런 다음 BP는 트랜잭션을 현재 블록에 포함시키고 리소스 사용에 대한 비용을 계정에 청구합니다.

네트워크 내의 모든 노드는 내부 검사를 수행해 트랜잭션을 다음 노드로 전달해야 하는지 아니면 리소스 초과 사용으로 인해 트랜잭션을 거부할 지 여부를 결정합니다.

트랜잭션이 주관적 청구가 활성화된 노드에 도착하면 노드는 서명을 확인하고 트랜잭션이 어느 계정에 속해 있는지 식별합니다. 계정이 주관적 청구 한도를 초과하는 경우, 노드는 트랜잭션이 현재 BP에게 도달하지 않도록 트랜잭션 전달을 중지합니다.

주관적 청구은 추가적이며, 계정에서 노드에 트랜잭션이 도착하면 노드는 리소스를 활용하기 위해 계정에 요금을 부과합니다. 노드를 통해 트랜잭션을 전달하려면 계정에 해당 노드의 주관적 청구를 감당할 수 있는 충분한 리소스가 있어야 합니다. 주관적 청구는 24시간마다 갱신됩니다.

4. 트랜잭션 수수료가 과다 청구될 수 있는 상황

각 블록체인 노드는 계정과 관련된 CPU 사용량을 추적합니다. 특정 노드에서 트랜잭션이 실패할 때마다 해당 노드의 사용량이 증가합니다. 그러나 실패한 트랜잭션은 다른 노드의 사용량에는 영향을 미치지 않습니다. 따라서 연결된 노드는 트랜잭션에 부과된 수수료에 대한 정보를 제공합니다.

한 노드에서 부과하는 수수료는 네트워크 내의 다른 노드에서 부과하는 수수료와 무관하므로, 일부 노드는 다른 노드보다 더 많이 또는 더 적게 부과할 수 있습니다.

특정 노드와 트랜잭션을 계속 시도했다가 실패하면 해당 노드에서 시도한 트랜잭션마다 더 많은 수수료를 지불해야 합니다.

5. 트랜잭션에 많은 비용을 지불하지 않는 방법

무료 파워업으로 더 이상 트랜잭션 비용을 지불하기에 충분하지 않거나 연결된 API가 주관적 청구로 인해 매우 높은 요금을 청구하는 경우, 그림 2와 같이 이 상황을 개선할 수 있는 세 가지 옵션이 있습니다.

그림2: Sukanta Manna

옵션 1: 만약 원하는 트랜잭션이 지연되서는 안되는 경우, 페이노드(paynode)는 지불할 금액을 요청합니다. EOS 계정에 리소스를 추가하는 방법을 확인해보세요.

옵션 2: 다른 노드 사용 시 주관적 청구는 연결된 노드에서의 주관적 청구보다 훨씬 적을 수 있습니다. 따라서 API를 변경하면 트랜잭션에 대한 주관적 청구를 줄일 수 있습니다. API를 변경하는 방법은 여기를 참조하세요.

옵션 3: 주관적 청구는 24시간마다 갱신됩니다. 따라서 24시간 후, 계정에 무료 파워업을 진행 한 후 다시 시도하세요.

6. 결론

연결된 노드에 실패한 트랜잭션을 여러 번 전송하면 주관적 청구의 누적 특성으로 인해 과도한 요금이 부과될 수 있습니다. 이 경우 연결된 노드에 실패한 트랜잭션 전송을 중지하는 것이 가장 좋습니다.

중요한 트랜잭션인 경우, 노드에서 청구한 리소스를 지불하는 것이 좋습니다. 다른 노드로 API를 전환하는 것도 좋은 방법일 수 있습니다. 그러나 트랜잭션이 급하지 않은 경우 24시간을 기다렸다가 계정을 파워업 후 다시 시도하는 것이 가장 좋은 해결책입니다.


작성자: Sukanta Manna

편집자: Markus Hinrichs; Randall Roland

옮긴이: Terry Jin

출처 및 참고문헌

답변이 도움되었나요?