클레이튼이 죽었어요

들어가며

이 글은 2021년 11월 13일 ~ 16일 네트워크 중단 사건 이후 흔히 말하는 ‘클레이튼 네트워크 장애’에 관한 글입니다.

먼저 겪으시는 모든 장애 상황이 “클레이튼 자체의 문제가 없다”고 주장하는게 아닙니다.

다만, 대부분의 장애가 실제로 ‘클레이튼 네트워크의 장애’인지 아닌지 의심해볼 수 있게 여러 정보를 제공하고자 합니다.


정보를 제공하면서 주장합니다 “그건 클레이튼 네트워크 장애가 아니에요!”

어떤게 네트워크의 장애일까?

먼저 정확하게 ‘네트워크의 장애’를 정의할 필요가 있습니다.


이에 관해서 다양한 관점과 정의가 있겠지만 저는 아래와 같은 탈중앙 네트워크의 “합의 과정”에서 문제가 생겼을때를 네트워크의 장애라고 표현하고 싶습니다.

  1. 블록이 정상적으로 생성되지 않는 상황
  2. 블록체인이 정상적으로 연결되지 않는 상황

대표적인 예시는 아래와 같습니다

Transaction Per Second

먼저 두가지를 말씀드리겠습니다.

  • 네트워크 자체의 “빠르다”는 TPS를 기준으로 하겠습니다.
  • “블록체인 트릴레마에서 탈중앙성을 포기한거자나”, “그럼 중앙서버 만들지 뭐하러?” 이러한 의견은 다루지 않겠습니다.

8 Digital Payment Cryptos That Are Faster Than Bitcoin (2021년 9월) 글에 따르면

  • 이더리움 25TPS
  • 리플 1,500 TPS
  • 솔라나 50,000 TPS

솔라나가 압도적으로 높은 TPS인것을 확인할 수 있습니다.

앞서 말했듯 ‘탈중앙성’에 대한 이야기는 하지 않겠습니다.


클레이튼의 TPS는 링크 에서 “실시간” 확인 가능합니다.

  • 보통 이더리움과 비슷한 TPS를 처리하다가, 갑자기 2000 TPS를 처리하는 모습을 볼 수 있습니다.
  • 후려쳐서(?) MAX 2000 TPS 라고 하겠습니다

그렇다면 왜 클레이튼은 느려질까?

간단하게 말해서 가장 큰 이유는 각 서비스들이 위아래로 널뛰는 클레이튼의 TPS를 처리하지 못하는것이 원인입니다.


여기서 말하는 각 서비스란?

  • 클레이스코프
  • 거래소
  • 각종 Dapp

다시 정리하겠습니다.

  1. 노드로 이루어진, 클레이튼 네트워크는 정상 동작합니다.
  2. 하지만 평균 이상의 높은 TPS가 발생할때 각 서비스는 제시간에 블록 데이터를 ‘처리’하지 못하는것으로 추정됩니다.

왜 갑자기 TPS가 100배 이상 증가하나요?

이에 관해서는 봇 트랜잭션 분석 리포트를 첨부하겠습니다.

  • “클레이튼에 대량의 트랜잭션이 발생해서 처리시간이 길어지는 등 유저들이 불편을 겪고 있습니다.”
  • “대량 트랜잭션의 상당수는 차익거래 봇에 의해 생성된 것으로 추정.”
  • 트랜잭션 수수료 인상은 모든 클레이튼 사용자에게 영향을 끼칠 수 있기에 클레이튼 팀은… 클레이튼의 자원이 소수에게 독점되지 않고 다같이 사용될 수 있도록 많은 고민을 하고 있습니다.”

요약하면 수수료가 매우 저렴한(또는 고정된) 클레이튼 네트워크에 차익거래 트랜잭션으로 추정되는 트랜잭션들이 대량으로 발생하고 있는 것입니다.

‘저렴한 수수료’에 관해서는 아래에서 다시 다루겠습니다.


Q. 거래소는 왜 이렇게 자주 입출금을 멈추나요?

먼저, 거래소가 입출금을 중단할때 모든 이유가 블록체인 네트워크의 문제가 아닙니다.

또한 클레이튼의 높은 TPS로 인해 발생하는 지연도 ‘클레이튼 네트워크의 장애’라고 볼 수 없습니다. 간단하게 말해서 “그렇다면 솔라나는 언제나 네트워크 장애(지연)가 발생하고 있는 상황”입니다.

물런 실제로 솔라나는 네트워크 장애가…


해결방법은?

  • 디앱과 거래소는 본인과 관련이 없는 from, to address라면 처리하지 않고, skip 하면 됩니다.
  • 그래도 느리다면? 간단합니다 더 좋은 컴퓨터를 사면 됩니다 (농담이지만 정말 그렇습니다.)
  • 물런 이러한 이슈를 하루 아침에 ‘해결’하라는것이 아닙니다. (개발자 눈물흘려요…)
  • 다만, 높은 TPS에서 발생하는 문제 상황을 해결할 필요는 1차적으로 각 서비스 업체에 있다고 이야기하고 싶습니다.

Q. 그렇다면 클레이스코프는 왜 몇시간씩 지연되나요?

안타깝게도 디앱과 거래소는 각자에 맞는 ‘트랜잭션’을 처리하면 문제가 간단해집니다. 하지만 클레이스코프는 ’모든 트랜잭션‘을 처리하고 보여줘야 합니다.


예를들어 클레이스코프는 하나의 블록에 있는 모든 트랜잭션에 대해 여러가지 처리를 한 후 화면에 띄워주게 됩니다. (트레이싱이라는 무거운 작업을 포함합니다)

  • 트레이싱이란? 간단하게 말해서 transaction reciept(결과)만을 처리하는게 아니라, EVM을 통해 직접 해당 트랙잭션을 다시 실행함을 의미합니다.

이를 회피할 수 있는 방법은 없습니다. 좋으나 싫으나 어차피 ‘모든 트랜잭션’의 결과를 보여줘야하기 때문입니다.


정리하겠습니다. 이는 단순한 ‘트릭’으로 해결할 수 없는 문제이며 근본적인 개선책이 필요합니다. (수평확장이라는…) 다시 말해 구조적 개선이 필요한 작업입니다. 몇주전에 비해 클레이스코프는 점점 성능이 좋아지고 있으며 v2를 도입하기도 했습니다.


문제가 없다고 말씀드리지 않습니다. 개선 작업이 필요하다 또는 진행중이라고 이야기합니다.


“아니 그러면 공식 Explorer가 느려지는게 클레이튼 네트워크 장애(지연)가 아니라고요?”

  • 네 아닙니다

어쨋거나, 빠른시일내 클레이스코프가 높은 TPS를 처리할 수 있기를 기원합니다. 🙏


아래 Kakao If 2021 영상에서 클레이스코프의 구조에 대해 더 자세하게 학습 가능합니다.


Q. 카이카스가 장애가 생긴다면?

카이카스 또한 ‘단일 지점’에 의존하고 있습니다.

  • 이는 Kaikas 지갑 네트워크 설정 중 ‘RPC URI’을 통해 확인 가능합니다.
  • 만약 의존하고 있는 단일한 노드(= 아마 API에 가깝겠지만)에 장애가 생긴다면 ‘네트워크 장애’와 상관없이 지갑 사용에 문제가 생길 겁니다.
  • 그럼, 모든 카이카스 이용자는 클레이튼 네트워크를 사용하지 못하는 상황이 되겠죠. (이때는 해당 RPC URI 설정을 변경함으로 문제 해결 가능합니다.)

그래서 요약하면?

  1. 클레이튼에 대량의 트랜잭션이 발생해서 처리시간이 길어지는 등 지연이 발생하는것은 사실이다.
  2. 그러나 이는 ‘네트워크 장애 발생’이라고 말하기에는 뭔가 꺼림칙함이 있다.
  3. 탈중앙 네트워크에서는 높은 TPS는 각 서비스가 일차적으로 해결해야 한다고 주장합니다.

물런 언제나, 모든 상황에서 클레이튼 CN노드와 EN노드가 ‘정상적’으로 블록과 트랜잭션을 전파하는것은 아닐겁니다. 하지만 여러분이 말하시는 ‘클레이튼 네트워크 장애’가 대체로는 이렇습니다.


현재 ‘클레이튼 네트워크’의 상태는 링크에서 “실시간” 확인 가능합니다.

  • 만약 정상적으로 블록이 쌓이고 트랜잭션이 처리 중이라면 (= TPS 확인) 네트워크의 상태는 정상입니다.
  • 해당 Grafana 링크에 대한 설명 첨부합니다.

물런 이 Grafana가 의존하고 있는 ‘노드’도 장애로 인해 멈출 수 있지만… 그것조차 네트워크 전체의 장애는 아닙니다. 적어도 이 노드는 다른 외부 요청을 처리하고 있지는 않을태니 그럴 확률은 낮을 겁니다…


어쨋든 현재 클레이튼 네트워크의 여러 디앱과 인프라가 과거에 비해 이슈가 생기고 있음은 분명해보입니다.

그러면 클레이튼은 정말 아무 문제가 없나요?

아닙니다. 일단 높은 TPS가 발생할 수 있는 원인은 클레이튼의 저렴한 수수료입니다.

  • 하지만, 이는 각 서비스가 높은 TPS를 처리하지 못하기 때문에 발생하는 여러 지연 문제가 ‘네트워크의 장애’로 변환됨은 아닙니다.

그럼 저렴한 수수료가 원인이네! 그걸 해결하면 이전처럼 아무 지연없이 쓸 수 있는거 아니야?


봇 트랜잭션 분석 리포트에서 ”트랜잭션 수수료 인상은 모든 클레이튼 사용자에게 영향을 끼칠 수 있기에 클레이튼 팀은… 클레이튼의 자원이 소수에게 독점되지 않고 다같이 사용될 수 있도록 많은 고민을 하고 있습니다.”


말하는 바를 요약해보자면, ‘클레이튼에서 높아진 TPS를 다시 줄이것에는 가스 비용을 올리는 것 외에 쉽지 않아보입니다. 하지만 그렇게 해볼려고 하고 있습니다’

조금 더 디테일하게 EN노드 속으로…

먼저 각 서비스의 운영자는 EN노드를 시스템 요구 성능을 지키며 실행해야 합니다.

그렇지 않음으로 발생하는 문제는…


그리고 대체로 노드의 요구 성능은 지속적으로 증가합니다.

  • 한번 더 후려쳐서 말하면 싫으면 네트워크에 참여하지 않거나 하드포크하면 됩니다.

위에서 말한 내용은 노드가 동기화한 블록과 트랜잭션 데이터를 처리하는 ‘애플리케이션’에 대해서 입니다.


그렇다면 노드가 겪고 있는 문제점은 무엇이 있을까요? 제가 보기에는 txpool(mempool) 설정 문제로 추정됩니다. (모든 문제가 그렇다는게 아니라, 필자가 보기에 그렇게 추정된다는 것입니다.)

  1. 대량의 Transaction이 Local Node의 Mempool에 들어온다.
  2. 한계값에 이르면, 더 이상 새로운 Transaction을 Local Mempool에 담지 못한다.
  3. 그로 인해 서비스가 처리하길 원하는 트랜잭션은 Local Node에서 정상 전파되지 못한다.

먼저 해결 방법은 간단합니다. 공식 문서에서는 아래와 같은 설정을 권장하고 있습니다

// 2021.01.27
TXPOOL_EXEC_SLOTS_ALL=4096
TXPOOL_NONEXEC_SLOTS_ALL=4096
TXPOOL_EXEC_SLOTS_ACCOUNT=4096
TXPOOL_NONEXEC_SLOTS_ACCOUNT=4096

“아니 트랜잭션이 한번에 수천개씩 들어오는게 문제인데 왜 설정 이야기를 하시나요?”

  • 늘리라는 이야기입니다… (참고로 새로운 클레이튼 클라이언트 버전에서는 해당 문제를 효과적으로 해결할 수 있는 기술을 포함한다고 합니다)

Written by@Juna
I love Node.js