지난 글에서는 블록체인의 속도 정의와 그 첫번째 구성요소인 TPS를 설명드렸습니다. 이번 글에서는 나머지 두 요소인 블록생성시간과 확정시간을 설명드리겠습니다.
TPS는 거래를 처리하는 모든 종류의 시스템에서 활용될 수 있는 범용적인 지표입니다. 예를들어 증권거래소에서 1초동안 몇개의 호가나 거래가 처리되어 기록될 수 있는지를 따져보는 것은 매우 유의미합니다.
하지만 블록생성시간과 확정시간은 블록체인에만 존재하는 독특한 요소입니다. 말하자면 블록체인의 탈중앙화라는 장점을 취하기 위해 지불하는 일종의 성능 비용 또는 부작용이라고 볼 수 있습니다. 블록체인이 상용스케일의 컴퓨팅 플랫폼으로 거듭나기 위해서 반드시 극복해야하는 과제이기도 합니다.
블록생성시간
블록생성시간도 블록체인 속도에 매우 큰 영향을 미칩니다. 블록생성시간은 트랜잭션이 처리되어 저장되는데에 걸리는 최소대기시간에 영향을 미칩니다. 네트워크에서 지연시간(Latency)과 같은 작용을 한다고 생각해봐도 좋습니다.
이를 수식으로 표현하면 아래와 같습니다.
평균대기시간 = 블록생성시간 / 2
예를들어 어떤 블록체인의 최대 TPS가 10이고, 현재 TPS는 1수준으로 과부하가 걸려있지 않은 상황이라고 가정해보겠습니다. 블록생성시간은 10분으로 일정하다고 가정합니다. 이 상황에서 제가 충분한 수수료와 함께 트랜잭션을 발생시키면 이것이 블록체인에 저장되기까지 기다려야하는 예상 대기시간은 얼마나 될까요?
정답은 5분입니다.
N번째 블록생성에 임박하여 트랜잭션을 발생시켰다면 두 가지 상황이 다 일어날 수 있습니다. N번째 블록에 포함이 되어 금방 저장되거나, 포함이 안되어 N+1번째 블록으로 넘어가거나. N+1번째 블록으로 넘어가게 되는경우에 블록생성시간 10분을 그대로 기다려야 합니다. 이러한 모든 경우의 수의 평균을 내면 10분/2 = 5분이 됩니다.
트랜잭션 자체가 많지 않은 상황에서는 TPS는 거의 의미가 없다는 점에도 주목을 해보시면 좋겠습니다.
정리하면 TPS가 아무리 높아도 블록생성시간이 짧아야만 블록체인의 속도가 빠르다고 할 수 있습니다.
확정시간
블록체인의 특성 상, 내 트랜잭션이 최신 블록에 포함되었다고하여 이것이 안전하게 저장되었다고 확신할 수 없습니다.
포크(블록체인이 갈라지는 것)의 가능성은 언제나 존재하며, 내 트랜잭션이 메이저포크에 들어있다는 것을 확신하기까지 기다려야합니다. 대부분 블록체인에서 메이저 포크에 들어있다는 보증은 사실 없습니다. 그냥 내 포크가 왠만큼 길어지기를 기다리는 수밖에 없죠.
거래소에서 암호화폐 입출금을 해보면 이를 경험할 수 있습니다. 블록익스플로러(예를들어 이더스캔)에서 트랜잭션이 성공적으로 블록에 포함되었다고 나와도, 거래소는 안전을 위해 자체적으로 정한 횟수 만큼 컨펌을 기다립니다. N번 컨펌이 되었다는 것은 내 블록을 포함하여 뒤에 N-1개의 블록이 더 붙었다는 뜻입니다. 이정도 길이가 되면 내 트랜잭션이 무효화 되는 일은 없을 것이라고 가정하는 것입니다.

예시로 비트파이넥스에 이더(ETH) 입금을 하려면 25컨펌을 기다려야 합니다.
이 경우 확정시간은 아래와 같은 공식으로 정리할 수 있습니다.
확정시간 = N(신뢰도) * 블록생성시간
확정이라는 개념이 대부분의 블록체인에서 실존하지 않고, 확률적으로 판단하는 것이기 때문에 컨펌수 N도 매번 다릅니다. 어떤 거래소를 25을, 어떤 거래소는 50을 확정 기준으로 삼을 수 있습니다. 분명한 것은 N이 커질 수록 신뢰도(무효가 되지 않을 확률)도 점점 100%에 수렴하게됩니다.
비트코인의 경우 6컨펌이 되면 지갑에서 잔액을 업데이트 해주고, 송금을 할 수 있게 허용한다고 합니다.
실제로 댑들이 나오게되는 시점을 미리 들여다보면 더 흥미롭습니다.
슈퍼마켓에서 천원짜리 아이스크림을 하나 샀다고 하면, 슈퍼마켓 주인은 2컨펌정도만 기다려도 될 것입니다. 무효화의 가능성을 0.001%로 만드려고 손님을 가게에서 기다리게 할 수는 없기 때문입니다.
반면에 자동차나 부동산을 거래한다고 생각을 해보시면 무효화 가능성을 충분히 작게 만들기 위해서 몇 시간, 아니 하루라도 기다릴 수 있을 것입니다.
포크로 인해 거래가 무효화되는 것은 매우 심각한 문제이기 때문에 단순히 속도이슈로 볼것은 아닙니다. 이더리움은 캐스퍼라는 알고리즘을 통해 일정수의 블록마다 최종확정성(Finality)을 부여하는 것이 계획입니다. 최종확정성이 부여되면 공식은 아래와 같이 바뀝니다.
최종확정시간(100%) = N(상수) * 블록생성시간
즉, 일정시간만 기다리면 100%확정이 된다는 뜻입니다. 최종확정성이 없는 경우에는 아무리 오래 기다려도 산술적으로 100%에 도달할 수 없는 것을 생각하면 이는 정말 엄청난 차이입니다.
정리
TPS가 아무리 빨라도 '블록생성시간/2' 만큼의 평균지연시간이 발생하기 때문에 고성능 블록체인이라고 부르려면 블록생성시간이 짧아야 합니다.
트랜잭션이 한번 블록체인에 저장이 되어도, 충분한 수의 컨펌을 받아야만 이것이 무효가 되지 않는다고 확신할 수 있습니다. 이 컨펌횟수는 거래의 액수나 성격에 따라 다르게 부여하게 될 것으로 예상됩니다. 최종확정성을 부여하게 되면 일정 수의 컨펌으로 100%의 신뢰도를 보장합니다.
최종확정성 부분은 단순히 속도 이상의 의미를 가지기 때문에 나중에 기회가 된다면 좀 더 자세히 설명하도록 하겠습니다.
다음 글에서는 그래서 EOS가 TPS, 블록생성시간, 확정시간 측면에서 어떻게 설계되었는지 살펴보고, 다른 블록체인 대비 얼마나 빠른것인지 비교해보도록 하겠습니다.