Technology

트랜잭션 급증에 대응하기 위한 기술적 조치

봇 트랜잭션 분석 리포트에서 공유드린 것과 같이 최근 클레이튼 메인넷에 갑작스러운 트랜잭션 급증 현상이 종종 발생하고 있습니다. 많은 클레이튼 사용자들이 이 현상으로 인해 불편함을 느끼고 있으며, 네트워크가 멈추었거나 장애가 있다고 오해하는 경우도 많았습니다. 실제로는 네트워크는 정상적으로 블록을 생성하고 있지만 급격히 증가된 트랜잭션을 처리하는 과정에서 시간이 걸리는 상황이었습니다. 이 글에서는 이 현상을 극복하기 위한 기술적인 시도와 고민들을 공유하고자 합니다.

Spam Throttler 구현

Spam Throttler 는 2021년 말에 발생한 봇 트랜잭션을 고려하여 개발되었습니다. 대량의 봇 트랜잭션은 소수의 주체가 발생시킨 것으로 분석되었고, 수 시간동안 네트워크를 거의 독점하는 현상도 발생하였습니다. 이들은 다양한 송신 주소를 사용했지만 수신 주소의 수는 한정되어 있었습니다. 또한, 99% 이상의 트랜잭션이 의도적으로 Revert 처리되도록 만들어지고 있었습니다. Spam Throttler는 지속적으로 Revert 처리되는 트랜잭션들이 전파되는 속도를 제한함으로써 여러 사용자들의 정상 트랜잭션이 블록에 담길 기회를 더 많이 제공하기 위한 목적으로 개발되었습니다.

특정 계정이나 주소에서 발생하는 트랜잭션에 대해서 네트워크 사용을 제한하는 블랙리스트 방식보다는 최신 블록들을 분석하여 알고리즘에 의해 판단하는 방식을 택하였습니다. 네트워크 리소스가 특정 사용자에게 쏠리지 않고 다수의 사용자들에게 분배될 수 있도록 고민을 하였습니다. 스팸에 대한 판단도 대량으로 Revert 되는 경우만을 고려하였습니다.

성능을 제약하는 기능은 본래의 취지와는 다르게 악용될 수도 있습니다. 악의적으로 Spam Throttler 기능을 이용하여 정상 서비스를 마비시킬 수도 있기 때문에 다음과 같은 보안책도 설정되어 있습니다. 이 보안책들이 Spam Throttler로 발생할 수 있는 부작용을 억제할 것입니다.

  1. Spam Throttler는 클레이튼 네트워크에 트랜잭션이 과도할 때만 전파 속도를 제한한다.
  2. Throttle List 들도 일정 수준의 TPS를 보장한다. (현재 설정값: 100 TPS)
  3. 비상 상황을 대비하여 정상 서비스를 White Listing할 수 있는 기능

Spam Throttler는 2022년 1월초에 메인넷에 적용되었으며, 적용 직후 네트워크에 Revert 트랜잭션의 수가 급격하게 감소되었습니다. 또한, 과도하게 Revert 트랜잭션이 발생하는 경우 이들이 네트워크를 장악하지 못하도록 조절하는 것을 확인할 수 있었습니다. 그러나, 이 기능이 과도한 봇 트랜잭션을 완전히 방지하지는 못했습니다. 기능 적용 이후 일부 봇 트랜잭션들은 의도적으로 Revert 처리되던 것을 피하고, 정상처리되는 형태로 진화하였습니다. 즉, Spam Throttler는 Revert 트랜잭션의 수를 줄이기는 했지만 전체 트랜잭션 수를 감소시키지는 못하였습니다.

봇 트랜잭션으로 인한 문제들과 기술적 조치

클레이튼 팀은 Spam Throttler 이외에도 과도한 트랜잭션을 방지하기 위한 여러 기술적 시도를 적용 및 검토하고 있습니다. 클레이튼 사용자들이 느끼는 불편함을 크게 3가지로 구분하고, 각 불편함을 해소하기 위한 기술적인 방안을 적용하고 있습니다.

  1. Endpoint Node(EN) 사용 시 에러가 발생하거나 새로운 트랜잭션 배포를 못하는 문제이 문제는 순간적으로 대량의 트랜잭션이 발생하여 EN이 가질 수 있는 트랜잭션 수를 넘어서게 만들 때 발생합니다. Kaikas를 사용하실 때 “Txpool is full” 과 같은 에러 메세지를 경험하셨다면 이 경우에 해당합니다. 클레이튼 팀은 이런 현상을 완화하기 위해 각 노드가 트랜잭션을 보관할 때, 외부로부터 전파받은 트랜잭션의 수를 제한하는 기능을 마련하고 있습니다. 2022년 1월초에는 이와 관련한 실험적인 기능들이 Kaikas EN을 포함한 일부 EN들에 적용되었고, 이후에 Kaikas EN에서 “Txpool is full” 에러를 경험하신 사용자 수는 많이 줄었을 것입니다. 이 기능들은 여러 실험을 통해 적절한 외부 트랜잭션 수를 설정할 수 있도록 발전될 것입니다.
  2. 특정 사용자/서비스가 네트워크를 독점하는 문제Spam Throttler가 풀고자 했던 문제이며, 기술적으로 해결하기 가장 어려운 문제입니다. 장기적으로는 네트워크 처리량을 향상시키는 방안을 연구하고 있습니다. 또, 한편으로는 한정된 네트워크 사용량을 공정하게 활용하는 기술적 조치들을 연구 중입니다. 각 노드에 도착한 시간 순서대로 트랜잭션이 전파되거나 블록에 담기는 기능, 각 노드가 여러 사용자의 트랜잭션을 공평하게 관리하는 방안 등이 검토되고 있습니다. 기술적인 조치 이외에 트랜잭션 비용 상승과 같은 정책적인 방안 또한 검토되고 있습니다.
  3. 네트워크 부하 상황에서 우선순위를 높일 수 없는 문제클레이튼의 고정 가스 비용 정책은 개발자에게 있어 많은 편의성을 주고 있습니다. 하지만, 네트워크 과부하 상황에서 중요한 트랜잭션의 우선순위를 높이지 못한다는 단점도 가지고 있습니다. 클레이튼 팀은 이런 문제 인식을 통하여 현재 클레이튼의 비용 정책을 재검토하고 있습니다. 이는 유동 수수료 모델, 차등 수수료 모델, 수수료 소각 모델 등 모든 가능성을 검토하고 있습니다. 이 변화를 생태계에 많은 영향을 줄 수 있기에 충분한 준비와 소통을 통해 진행될 것입니다.

클레이튼 팀은 이 이외에도 생태계와 협력하여 더 적극적으로 관련 문제를 개선하고자 합니다. 클레이튼 사용자들이 거래소 입출금 지연문제, NFT/DeFi 프로젝트 런칭 시점에 발생하는 봇 트랜잭션 이슈 등으로 인해 많은 불편함을 느끼고 있다 생각합니다. 이런 문제들은 클레이튼 제품 자체만으로 해결될 수 있는 문제가 아니지만 생태계와의 적극적인 협력과 지원을 통해 개선될 수 있도록 노력하겠습니다. 또한, 클레이튼의 개발은 오픈소스로 진행되고 있습니다. GithubDiscordForum 등에서 함께 개발에 참여해주시고 의견을 주시면 감사하겠습니다.