[test] add get_vsize util for more programmatic testing

This commit is contained in:
gzhao408
2020-09-16 07:13:31 -07:00
parent 2233a93a10
commit 23c35bf005
3 changed files with 16 additions and 6 deletions

View File

@@ -22,6 +22,7 @@ from codecs import encode
import copy
import hashlib
from io import BytesIO
import math
import random
import socket
import struct
@@ -67,6 +68,8 @@ MSG_WITNESS_TX = MSG_TX | MSG_WITNESS_FLAG
FILTER_TYPE_BASIC = 0
WITNESS_SCALE_FACTOR = 4
# Serialization/deserialization tools
def sha256(s):
return hashlib.new('sha256', s).digest()
@@ -537,6 +540,13 @@ class CTransaction:
return False
return True
# Calculate the virtual transaction size using witness and non-witness
# serialization size (does NOT use sigops).
def get_vsize(self):
with_witness_size = len(self.serialize_with_witness())
without_witness_size = len(self.serialize_without_witness())
return math.ceil(((WITNESS_SCALE_FACTOR - 1) * without_witness_size + with_witness_size) / WITNESS_SCALE_FACTOR)
def __repr__(self):
return "CTransaction(nVersion=%i vin=%s vout=%s wit=%s nLockTime=%i)" \
% (self.nVersion, repr(self.vin), repr(self.vout), repr(self.wit), self.nLockTime)