Announcement, Technology, Insights

메타버스에 적합한 블록체인은?

세 줄 요약?

  • 메타버스에서는 지연시간에 의해 사용자 경험이 크게 달라질 수 있음.여러 다른 블록체인 네트워크에서 지연시간을 측정하고 비교함.클레이튼이 가장 짧은 평균 지연시간을 보이며, 메타버스에 사용하기에 적합한 블록체인이라 할 수 있음.

개요

클레이튼팀은 클레이튼 2.0의 목표인 “모두를 위한 메타버스 블록체인”을 달성하기 위해 모든 영역에서 열심히 노력하며 앞으로 나아가고 있습니다. 메타버스에서 사용되는 블록체인은 어떠한 특성들을 갖추어야 할까요? 사용자들이 괴리감 없이 몰입하기 위해서는 메타버스 내 상호작용이 실시간으로 이뤄져야 합니다. 이러한 실시간 상호작용을 위해서는 사용자의 행동이 빠른 시간 내에 완결성있게 실행되어야 합니다.

사용자의 행동을 빠른 시간 내에 완결성있게 실행되기 위해서는 어떤 성능에 집중해야 할까요? 보통 성능이라 함은 크게 두 가지 지표(지연시간, 처리량)를 뜻합니다. 지연시간(latency)은 하나의 동작을 수행할 때 걸리는 시간을 나타내는 지표이며, 처리량(throughput)은 동일 시간 내에 얼마나 많은 동작을 수행할 수 있는지를 나타내는 지표입니다.

블록체인 산업에서 가장 흔히 통용되는 성능 지표는 TPS(Transactions Per Second)입니다. TPS는 1초에 처리되는 트랜잭션의 수를 나타냅니다. 하지만 이 TPS는 하나의 트랜잭션이 완료될 때까지의 실행시간에 대해서는 이야기하지는 못합니다. 예를 들어 비트코인의 처리량을 7 TPS라고 표현하지만, 하나의 트랜잭션이 처리될 수 있는 최소 시간은 10분입니다. 비트코인은 매 10분마다 블록이 하나 생성되며, 이 블록이 생성되어야 실제로 트랜잭션이 처리되었다고 말할 수 있기 때문입니다. 마찬가지로 이더리움도 20 TPS라고 이야기하지만, 하나의 트랜잭션이 처리될 수 있는 최소 시간은 12초 정도 입니다. 즉, 처리량(TPS)로는 사용자의 행동이 빠른 시간 내에 완결성 있게 실행되는지 파악하기에는 부족합니다.

이 글에서는 처리량보다 지연시간에 초점을 맞추어, 사용자의 행동이 얼마나 빠르게 완결될 수 있는지 각 블록체인 프로젝트에 직접 트랜잭션을 전송하여 확인해보고자 합니다. 각 블록체인 프로젝트의 메인넷에 트랜잭션을 전송하고 해당 트랜잭션이 담긴 블록이 생성될 때 까지의 시간을 측정하고, 그 결과를 사용하여 클레이튼과 다양한 블록체인을 비교해 보도록 하겠습니다.

비교할 블록체인 선정 및 실험 설계

빠른 처리속도를 표방하는 타 블록체인과 비교하기 위해서 2022년 5월 1일 기준 CoinMarketCap 50위권의 네이티브 토큰 중 블록 생성 시간이 10초 이내인 체인들을 총 11개 선정했습니다.Harmony는 50위권 밖이었지만 싸고 빠르다는 것을 강점으로 내세운 블록체인이어서 추가하였고, Hedera는 블록 생성 시간 개념을 사용하지 않지만 트랜잭션의 확정 시간이 짧기 때문에 추가하였습니다.

[표 1] 각 블록체인 별 블록 생성시간, finality time, CoinMarketCap 순위 (22.05.01 기준)

[표 1]은 각 블록체인 별 블록 생성시간, Finality Time, 그리고 CoinMarketCap 순위를 보여줍니다. 표에서 Finality Time이란 트랜잭션이 블록에 포함된 이후 블록이 확정될 때까지 걸리는 시간을 의미합니다. 블록 생성 시간과 Finality Time의 출처는 각 체인의 공식 문서이며, 문서가 부재한 경우 각 체인의 익스플로러의 통계 자료와 기사들을 참고하였습니다. 참고한 문서들은 References에서 확인하실 수 있습니다.

EVM 계열의 블록체인에서는 트랜잭션을 전송한 뒤 그 트랜잭션이 들어간 블록이 생성되면 receipt를 받을 수 있습니다. 여기서 receipt를 받았다는 것은 트랜잭션이 블록에 포함되었다는 것을 의미합니다.

트랜잭션 처리 시간 = 트랜잭션이 블록에 포함된 시간 — 트랜잭션을 블록체인 네트워크에 전송한 시간

이 실험에서는 서명 완료 후 블록체인 네트워크에 전송된 트랜잭션이 블록에 포함될 때까지의 시간을 트랜잭션 처리 시간으로 정의하였습니다. 각 블록체인이 제공하는 JavaScript SDK를 사용하여 value transfer 트랜잭션을 생성하고 서명을 한 뒤, 보낸 시점부터 블록에 포함 될 때 까지의 시간을 측정하는 부분을 작성하였습니다.

이외에도 트랜잭션 처리 시간에 영향을 줄 수 있는 블록체인 네트워크의 혼잡도나 실제 네트워크의 지연 등의 요인도 함께 고려하였습니다. 네트워크 혼잡도에 관련된 정보를 얻기 위해서 트랜잭션을 생성하기 전에 최신 블록의 가스 사용량과 트랜잭션의 갯수 정보를 수집하였습니다. 또한 실제 API를 불러올 때 지연시간이 각각의 API 엔드포인트 별로 다를 것이기 때문에, 하나의 간단한 쿼리(예: GetLatestBlockNumber())를 보내고 응답을 받기까지의 왕복 시간을 ping time으로 정의한 뒤 수집하였습니다. 마지막으로 트랜잭션의 가격 비교를 할 수 있도록 트랜잭션이 실행된 후에 해당 트랜잭션의 수수료 비용과 그 비용의 미국 달러 가격을 CoinGecko에서 제공하는 API를 사용해서 계산한 뒤 수집하였습니다.

트랜잭션 수수료 설정

각 블록체인별 트랜잭션 수수료는 공식 문서의 트랜잭션 생성 및 전송 튜토리얼에 나와있는 코드를 기반으로 설정하였습니다. 수수료의 관점에서는 트랜잭션의 우선순위를 높일 수 있는 체인들과 그렇지 않은 체인들로 나눌 수 있습니다.

먼저 트랜잭션의 우선순위를 설정할 수 있는 체인들의 경우 수수료를 어떻게 설정하였는지 설명하겠습니다. Polygon PoS Chain과 Avalanche C-Chain은 EIP-1559를 사용하고, 매 트랜잭션 마다 maxPriorityFeePerGas와 maxFeePerGas를 지정해야 합니다**.** Avalanche C-Chain에서는 AvalancheJS에서 제공하는 getMaxPriorityFeePerGas 메소드와 공식 문서에서 제공하는 방식을 사용했습니다. Polygon PoS Chain은 Gas Station 엔드포인트에서 비용 추정치를 제공합니다. 제공되는 값들(safeLow, standard, fast) 중 standard 값을 사용하였습니다. Priority fee가 없는 가스비를 사용하는 블록체인은 BNB Smart Chain, Harmony, Fantom이고, 가스비를 높게 설정하여 우선순위를 높일 수 있습니다. 이 세 개 모두 web3.js 라이브러리와 호환되고, web3.eth.getGasPrice를 사용하여 가스비를 설정했습니다. Elrond 또한 사용자가 가스비를 지정할 수 있지만 erdjs-cookbook을 참고하여 기본으로 제공되는 값을 사용하였습니다. Polkadot은 기본적으로 weight fee가 네트워크 혼잡도에 따라서 달라지고, 선택적으로 팁을 추가하여 트랜잭션에 우선순위를 높일 수 있습니다. 하지만 튜토리얼에서는 팁을 따로 설정하지 않았기 때문에 팁을 추가하지 않았습니다.

트랜잭션 수수료가 고정이거나 네트워크 혼잡도에 의해 자동적으로 정해지는 경우도 있습니다. Klaytn은 현재 250 ston의 고정 가스비용을 사용합니다. Solana와 NEAR Protocol은 네트워크 혼잡도에 따라서 가격이 자동적으로 달라집니다. Hedera는 USD로 트랜잭션 수수료가 정해져 있고, 전송 시의 HBAR-USD 환율에 따라서 계산된 HBAR 가격을 사용합니다. 이 네 개의 플랫폼들에서는 SDK를 사용하여 트랜잭션을 생성할 때 자동적으로 가스비가 계산되도록 구현하였습니다. 아래의 표 2에서 각 블록체인별로 어떻게 트랜잭션 수수료를 설정하였는지 요약하였으니 확인하시기 바랍니다.

[표 2] 각 블록체인 별 가스 가격 설정 기준

데이터 수집 및 결과

일정 시간 간격으로 트랜잭션을 생성하고 전송하도록 코드를 작성했습니다. 한달 동안 트랜잭션을 보냈을 때 총 수수료가 200 USD 부근으로 맞춰질 수 있도록 시간 간격을 설정했습니다. [표 3]에서 계산된 수수료 가격들은 5월 17일 가격을 기준으로 계산되었습니다. BNB Smart Chain은 10분에 한 번씩, Avalanche C-Chain, Polkadot은 30분에 한 번씩 트랜잭션을 전송하였고, 다른 체인들은 모두 1분에 한번씩 트랜잭션을 전송하였습니다. 데이터 수집에 사용된 코드는 Github에 오픈소스로 공개되어 있으니, 관심 있으신 분들은 확인을 부탁드리겠습니다.

[표 3] 각 블록체인 별 데이터 수집 간격 및 한달 트랜잭션 수수료

현재 데이터는 계속 수집 중이며, 이 페이지에서 더 자세하게 보실 수 있습니다. 웹페이지에 있는 그래프들은 지난 일주일 간의 데이터를 사용해 그려진 것들 입니다. 그래프를 보시면 가끔 빈부분이 생긴다는 것을 알 수 있습니다. 이렇게 데이터가 없이 끊긴 부분들이 생긴 데에는 여러가지 이유가 있습니다. 그래프 모두에서 공통적으로 끊기는 현상의 경우, 이 실험을 돌리는 스크립트 상의 문제가 있어서 동시에 멈춘 것입니다. 또 다른 이유로는 블록체인 네트워크의 장애가 있을 수 있습니다. 예를 들어, Solana의 경우 네트워크 장애가 발생했던 4월 30일 약 8시간 동안, 6월 1일 약 4시간 동안 데이터를 수집하지 못 하였습니다. 또한 RPC Endpoint에 연결 시에 문제가 생길 수도 있습니다. 예를 들면 Hedera에서 5월 31일 부터 6월 2일까지 Error: failed to find a healthy working node 에러 때문에 데이터를 수집하지 못하였습니다.

[그림 1–5]는 6월 8일부터 6월 15일 사이의 실험 결과를 나타낸 그래프들 입니다. [그림 1]의 그래프는 그래프에서 각 블록체인 별 평균 트랜잭션 처리 시간과 표준편차를 보실 수 있습니다. [그림 2–5]는 각 블록체인 프로젝트별 트랜잭션 처리 시간 데이터를 사용해서 그린 그래프 입니다.

[그림 1] 블록체인 별 평균 트랜잭션 처리 시간 (에러 바: 표준편차)
[그림 2] Klaytn 트랜잭션 처리 시간
[그림 3] Solana 트랜잭션 처리 시간
[그림 4] Polygon PoS Chain 트랜잭션 처리 시간
[그림 5] NEAR Protocol 트랜잭션 처리 시간

클레이튼의 트랜잭션 처리 시간의 평균값은 약 2.1초로 비교 대상들 중에서 트랜잭션 처리 시간이 가장 짧다는 것을 알 수 있었습니다. 가장 평균 값이 큰 블록체인은 Solana였고, 약 2–30초 사이에 값이 분포되어 있습니다. Polygon PoS Chain의 경우 평균값은 10.9초 정도 이지만, 주기적으로 100초 이상 나오는 현상을 볼 수 있었습니다. 또한 클레이튼 다음으로 평균 처리 시간이 작았던 NEAR Protocol에서는 대부분 2–5초 사이의 값을 가진다는 것을 알 수 있었습니다. 이 페이지에서 다른 체인들의 그래프를 확인하실 수 있습니다.

Discussion & Future research

메타버스를 사용하는 사용자의 경험 측면에서 트랜잭션의 처리 시간 만큼이나 트랜잭션이 완결될 때까지의 시간(Time-To-Finality)도 매우 중요합니다. 트랜잭션이 완결(finalize)된다는 것은 해당 트랜잭션이 되돌려지거나 변경되지 않는 비가역적 상태를 의미합니다. 사용자가 최신 블록에서 정보를 얻는다고 가정해 보겠습니다. 만약 그 최신 블록이 완결되지 않았다면 그 정보는 되돌려질 수 있고, 그렇기 때문에 사용자는 그 정보가 정확한지 확신할 수 없습니다. 메타버스 환경에서 이 문제는 사용자의 실시간 상호작용에 치명적으로 작용할 수 있습니다. 디지털 자산 거래가 완결되었는지 확신할 수 없는 상태에서 그 다음 행동을 계획하고 실행하는 것은 불가능하기 때문입니다.

몇몇 체인들의 경우 완결성(finality)을 확보하기 위해서 트랜잭션이 블록에 담긴 후 트랜잭션이 완결될 때까지 추가적인 시간이 필요합니다. ([표1] 참고) 예를 들어 Polygon은 블록이 완결 되는 데 20번의 확정(confirmation)이 필요하고, 시간으로는 5분이 소요됩니다. 이는 트랜잭션이 블록에 포함된 이후 추가적으로 5분이 더 지나야 트랜잭션이 완결된다는 것을 뜻합니다. 또한 Polkadot의 경우 트랜잭션이 완결될 때까지 약 12–60초가 소요됩니다. [그림 1]에 따르면 평균 트랜잭션 처리 시간은 약 5초지만, 트랜잭션이 완결될 때까지는 최대 10배 가까이의 시간이 필요하다는 것을 의미합니다.

클레이튼은 즉각적 완결성을 보장합니다. 즉각적 완결성은 블록이 생성되고 나면 그 블록은 되돌릴 수 없고, 추가적인 확정이 필요하지 않다는 것을 의미합니다. 즉, 클레이튼은 가장 빠른 트랜잭션 처리 시간을 가졌을 뿐만 아니라 트랜잭션의 완결성을 보장하기 위해 추가적인 확정이 필요없다는 점에서 강점을 가진다고 할 수 있습니다.

이 글에서는 지연시간에 집중해서 알아보았지만, TPS도 중요한 성능지표라는 것은 변함이 없습니다. 메타버스에서 수 많은 사람들이 동시에 자산을 교환하는 상황을 가정해 볼 때, 처리량(TPS)에 대해서도 많은 고민이 필요합니다. 메인넷에서 TPS를 실험하기 위해서는 많은 돈이 필요함은 물론이고, 다른 환경적인 요소들 때문에 동일한 조건에서 TPS를 측정하기 어렵습니다. 공정하게 TPS를 측정하기 위해서는 동일한 성능을 가진 노드 네트워크를 구성하고 동일한 계산 시간을 가지는 트랜잭션을 충분히 생성하여 네트워크에 전파해야 합니다.

이런 식의 TPS 비교는 별도의 블록체인 네트워크를 띄우는 방법을 제공하는 체인들에 한해서 네트워크를 구축하고, 트랜잭션을 대량으로 전송하는 방법으로 시행해 볼 수 있을 것입니다. 추가적으로 FT(Fungible Token)과 NFT(Non-Fungible Token)를 전송하는 트랜잭션을 통해 자산을 주고 받는 실제 사용자 시나리오를 고려한 TPS 측정도 가능하리라 생각합니다. 이러한 실험들에 대해 추가적으로 계획하고 있으니 많은 관심 부탁드리겠습니다.

Conclusion

이번 포스팅에서는 지연시간이 짧은 블록체인들의 트랜잭션 실행 시간을 실제 메인넷을 대상으로 측정해 보았습니다. 그 결과 클레이튼 메인넷의 평균 트랜잭션 처리 시간이 가장 짧았으며, 완결성까지 고려했을 때에도 가장 짧은 지연시간을 보여주었습니다. 이를 통해 클레이튼이 메타버스 환경에 가장 접목하기 좋은 블록체인이라는 것을 확인할 수 있었습니다. 향후에도 데이터 수집을 지속하여 결과를 꾸준히 누적시키고자 합니다. 또한 TPS를 측정하는 실험들도 고민하고 계획하고 있으니 많은 관심 부탁드리겠습니다.

이 글에서 사용한 11개의 블록체인 이외에도 추가적으로 분석을 원하시는 블록체인이 있다면 직접 코드를 작성하여 klaytn/tx-latency-measurement에 PR을 올리실 수 있습니다. 또는 Discord나 클레이튼 포럼으로 문의주시면 추가적인 실험을 해 볼 수 있도록 하겠습니다. 감사합니다.

References

  1. 코드: GitHub — klaytn/tx-latency-measurement
  2. 실험 결과: Dashboard
  3. 블록 생성 시간 관련 문서
  1. Finality 관련 문서
  1. Gas Price 설정 관련 문서

6. CoinGecko: Crypto API Documentation