vByte, 줄여서 vB는 비트코인 거래의 가상 크기를 나타내는 단위입니다. 거래 데이터의 각 부분에는 서로 다른 가중치가 적용됩니다. 지갑은 이 크기로 수수료를 계산합니다. 거래가 크거나 선택한 수수료율이 높을수록 총수수료도 높아집니다.
안나가 Bitcoin을 보내려고 하자 지갑이 2 sat/vB라는 수수료율을 제시합니다. sat는 비트코인의 최소 단위인 사토시이고, vB는 거래의 가상 크기입니다. 완성된 거래가 127 vB라면 이 수수료율에서 총수수료는 254 sat입니다. Fee Rate라고도 부르는 수수료율은 전송 비용 전체와 다릅니다. 이 예시는 계산법을 설명할 뿐, 현재 네트워크에서 사용할 수수료율을 권장하는 것은 아닙니다. 수수료를 냈다는 사실만으로 특정 시간 안의 확정이 보장되지도 않습니다. [3] [5] [7]
지갑은 잔액을 하나의 숫자로 지출하지 않습니다. 이전에 받은 거래 출력 중 아직 쓰지 않은 것, 즉 UTXO를 사용합니다. 사용한 출력마다 입력이 하나씩 추가되고, 남은 금액을 자신의 지갑으로 돌려주는 거스름돈 출력도 자주 만들어집니다. 그래서 여러 작은 수입을 모아 쓰는 거래가 한 번 받은 금액에서 더 큰돈을 보내는 거래보다 많은 데이터를 필요로 할 수 있습니다. 수수료는 입력 금액의 합에서 출력 금액의 합을 뺀 값입니다. 디지털 서명은 선택한 자금을 쓸 권한이 있음을 증명합니다. 서명을 만들기 전에는 크기를 추정하며, 실제 수수료율은 최종 수수료와 최종 크기로 정해집니다. [6] [7]
바이트는 데이터의 양을 나타내는 일반적인 단위입니다. 다만 비트코인 거래 수수료를 계산할 때는 모든 바이트에 같은 가중치를 적용하지 않습니다. SegWit은 자금을 쓸 권한을 증명하는 데이터 중 서명 등을 별도로 구분합니다. 이 부분을 witness라고 합니다. 거래 무게를 계산할 때 기본 데이터의 바이트는 4 WU, witness를 포함한 형식에서 추가된 바이트는 1 WU로 계산합니다. WU는 무게 단위입니다. 해당 표현 방식의 보조 필드인 marker와 flag에도 같은 할인이 적용됩니다. 서명은 여전히 검증해야 합니다. 무게가 작다고 검사를 생략해도 된다는 뜻은 아닙니다. [1] [2]
직렬화는 컴퓨터가 전송하고 읽을 수 있도록 거래를 정확한 바이트 순서로 기록하는 것입니다. witness가 없는 크기를 B, 전체 크기를 T라고 합시다. BIP 141은 무게를 W = 3 × B + T로 정의합니다. 기본 데이터는 이미 T에도 들어 있으므로 이 식은 기본 데이터를 네 번, 추가 witness 데이터를 한 번 계산합니다. 결제 금액이나 프로세서의 처리 시간을 측정하는 식은 아닙니다. [1]
가상 크기는 무게를 4로 나눈 뒤 정수로 올림한 값입니다. 식은 vsize = ceil(W / 4)이며, ceil은 올림을 뜻합니다. 따라서 무게가 401 WU인 거래는 101 vB입니다. 올림은 거래 전체의 결과에 적용합니다. 각 입력을 따로 올림한 다음 합하면 같은 크기가 나오지 않을 수 있습니다. [1]
예를 들어 B = 100, T = 208바이트라고 합시다. 식에 넣으면 W = 508 WU, vsize = 127 vB가 됩니다. 앞서 수수료 예시에 쓴 크기입니다. 그렇다고 전체 거래가 저절로 줄어든 것은 아닙니다. 완전한 직렬화 데이터는 여전히 208바이트를 전송합니다. 가상 크기는 용량과 수수료를 계산하기 위한 가중 척도이지, 파일 압축이 아닙니다. [1] [5]
블록 탐색기는 특정 네트워크의 거래와 블록을 조회하는 앱입니다. witness 데이터가 없는 거래는 B = T이므로 W = 4 × T입니다. 이 경우 기본 가상 크기는 전체 바이트 수와 같습니다. 탐색기의 두 크기 항목이 어떤 거래에서는 같고 다른 거래에서는 다른 이유입니다. SegWit 거래에서 전송되는 모든 바이트를 무조건 네 등분해서는 안 됩니다. 서로 다른 가중치는 데이터의 특정 부분에 적용됩니다. [1] [2]
노드는 거래와 블록을 검증하고 네트워크의 다른 참여자와 통신하는 소프트웨어입니다. Bitcoin Core v29.0은 일부 운영 정책에서 조정된 크기 ceil(max(W, sigop_cost × bytes_per_sigop) / 4)를 사용합니다. sigop_cost는 서명 연산의 가중 비용이고, bytes_per_sigop은 정책 매개변수입니다. max는 더 큰 값을 고릅니다. 유난히 많은 검증 작업이 필요한 거래는 이 정책에서 사용하는 크기가 커질 수 있습니다. BIP 141의 무게나 블록 유효성 규칙을 바꾸는 것은 아닙니다. 명시된 버전의 구현 세부 사항이며, 일반적인 결제에 필요한 추가 계산은 아닙니다. [1] [4]
아직 확정되지 않은 다른 거래의 출력을 사용하는 결제도 있습니다. 이런 패키지를 평가할 때는 관련 수수료의 합을 해당 가상 크기의 합으로 나눌 수 있습니다. 개별 수수료율의 단순 평균은 서로 다른 크기를 무시합니다. Bitcoin Core v29.0은 로컬 우선순위 조정도 반영하며, 이미 자신의 대기 공간에 있는 거래를 다시 세지 않습니다. 합산 수수료율이 높아도 다른 모든 규칙을 무시할 수는 없고, 수용이나 확정도 보장하지 않습니다. [4] [8]
보내기 전에 수수료율을 총수수료 및 추정 크기와 함께 확인하세요. 거래가 만들어진 뒤에는 decoderawtransaction으로 실제 size, vsize, weight 항목을 볼 수 있습니다. 각각 바이트 수, 가상 크기, 무게입니다. 일반 결제에서 식을 손으로 계산할 필요는 없습니다. 비슷한 이름인 CompactSize도 구분해야 합니다. 이는 정수를 가변 길이로 인코딩하는 방식이지, vByte의 다른 이름이나 거래를 줄이는 방법이 아닙니다. [5] [6]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Block Weight, Compact Blocks, Block Propagation, Initial Block Download, Bitcoin, SegWit. 다음 항목에서도 이 글을 참조합니다 Compact Blocks, Pruned Node, Block Weight, Package Relay.