트랜잭션 크기란?
트랜잭션 크기는 암호화폐 트랜잭션이 차지하는 데이터의 양으로, 보통 바이트 또는 가상 바이트 단위로 측정합니다. 데이터가 많을수록 네트워크에 저장하고 전송해야 할 양도 늘어납니다. 이모티콘 하나를 넣어 이메일을 보내는 것과 사진 앨범 전체를 보내는 것의 차이라고 생각하면 됩니다.
“암호화폐를 더 많이 보내면 트랜잭션 크기도 커진다.” 사실이 아닙니다. 크기는 코인의 수량이 아니라 트랜잭션에 포함된 입력, 출력, 서명의 개수에 따라 달라집니다.
트랜잭션 크기의 작동 방식
비트코인으로 간단히 송금하는 과정을 살펴보겠습니다.
- 1단계: 지갑이 입력값을 선택합니다. 입력값은 과거에 받은 코인입니다. 일반적으로 입력값이 많을수록 바이트 수가 늘어납니다.
- 2단계: 수신자에게 보낼 출력값을 만들고, 대개 잔돈을 돌려받을 출력값도 생성합니다. 출력값 하나마다 데이터가 조금씩 추가됩니다.
- 3단계: 서명과 스크립트를 추가합니다. 다중 서명 트랜잭션과 같은 복잡한 기능은 서명에 더 많은 키가 필요하므로 바이트 수가 늘어납니다.
- 4단계: 지갑은 크기에 현재 수수료율을 곱해 비용을 추정합니다. 여기서 트랜잭션 수수료가 발생합니다.
- 5단계: 채굴자는 바이트당 수수료가 높은 트랜잭션을 우선 처리하므로, 총수수료가 같다면 트랜잭션 크기가 작을수록 더 빨리 승인될 수 있습니다.
괜찮죠? 데이터가 적을수록 더 원활하게 전송됩니다.
트랜잭션 크기가 중요한 이유
여러분은 속도와 비용에 관심이 있고, 채굴자도 마찬가지이기 때문입니다.
- 장점: 트랜잭션 크기가 작으면 같은 승인 목표를 유지하면서 수수료를 줄일 수 있는 경우가 많습니다.
- 상황: 네트워크 혼잡 시 수수료 경쟁이 치열해져, 비대해진 트랜잭션을 처리하는 데 비용이 많이 듭니다.
- 관련성: 블록에 더 많은 트랜잭션을 담으면 전체 처리량이 늘어나므로 확장성과도 관련이 있습니다.
세그윗(SegWit)을 지원하는 주소와 지갑을 사용하세요. 세그윗은 수수료에 가장 큰 영향을 주는 데이터의 크기를 줄여 가상 바이트 기준 트랜잭션 크기를 낮춥니다.
트랜잭션 크기의 주요 특징
크기를 키우거나 줄이는 요소는 다음과 같습니다.
- 입력값: 입력값이 늘어나면 서명과 스크립트가 추가되어 바이트 수가 늘어납니다.
- 출력값: 수신자와 잔돈 출력값이 추가되면 크기가 커지지만, 대개 입력값만큼 크게 늘지는 않습니다.
- 스크립트: 복잡한 스크립트나 지출 조건을 사용하면 포함해야 하는 데이터가 늘어납니다.
- 증인 데이터: 세그윗을 사용하면 데이터 일부가 가상 바이트로 계산될 때 할인됩니다.
- 재사용: 수수료가 낮을 때 소액 코인을 통합하면 향후 트랜잭션 크기를 줄일 수 있습니다.
트랜잭션 크기는 어떻게 계산하나요?
비트코인에서는 데이터를 바이트 단위로 직렬화합니다. 세그윗을 사용하면 크기를 무게와 가상 바이트로 나타내는 경우가 많습니다.
- 무게: 증인 데이터가 아닌 바이트 수에 4를 곱한 값에 증인 데이터 바이트 수를 더합니다.
- 가상 바이트: vbyte는 무게를 4로 나눈 뒤 올림한 값입니다.
예를 들어 증인 데이터가 아닌 부분이 180바이트이고 증인 데이터가 100바이트라면, 무게는 180에 4를 곱한 뒤 100을 더한 820이고, vbyte는 820을 4로 나눈 205입니다.
표현 방식
크기를 나타내는 방식은 여러 가지입니다.
- 바이트: 할인을 적용하지 않은 직렬화 데이터의 원래 길이입니다.
- Vbyte: 세그윗 할인을 적용한 뒤 수수료 시장에서 사용하는 가상 바이트입니다.
- 무게: 증인 데이터와 증인 데이터가 아닌 부분에 서로 다른 계산 기준을 적용한 내부 측정값입니다.
보내는 비트코인의 수량은 트랜잭션 크기를 바꾸지 않습니다. 트랜잭션의 구조가 크기를 결정합니다.
예시
입력값과 출력값이 각각 하나인 트랜잭션으로 친구 한 명에게 보내면 크기가 가상 바이트 기준 수백 바이트 정도일 수 있지만, 소액 입력값 다섯 개를 사용하면 트랜잭션 크기와 수수료가 크게 늘어날 수 있습니다.
재미있는 사실
세그윗은 기존의 1메가바이트 한도를 바꾸지 않고도 블록에 더 많은 트랜잭션을 담을 수 있도록 무게와 가상 바이트 개념을 도입했습니다. 암호화폐의 역사와 영리한 코드가 만나는 지점입니다.
마무리
트랜잭션 크기를 비용을 발생시키는 데이터 규모라고 생각해 보세요. 가능할 때 크기를 줄여 두면 나중에 수수료를 낼 때 도움이 됩니다.