|
4 | 4 | # file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
5 | 5 | """Useful util functions for testing the wallet"""
|
6 | 6 | from collections import namedtuple
|
| 7 | +import unittest |
7 | 8 |
|
8 | 9 | from test_framework.address import (
|
9 | 10 | byte_to_base58,
|
@@ -159,3 +160,38 @@ def __enter__(self):
|
159 | 160 | def __exit__(self, *args):
|
160 | 161 | _ = args
|
161 | 162 | self.wallet.walletlock()
|
| 163 | + |
| 164 | + |
| 165 | +class TestFrameworkWalletUtil(unittest.TestCase): |
| 166 | + def test_calculate_input_weight(self): |
| 167 | + SKELETON_BYTES = 32 + 4 + 4 # prevout-txid, prevout-index, sequence |
| 168 | + SMALL_LEN_BYTES = 1 # bytes needed for encoding scriptSig / witness item lenghts < 253 |
| 169 | + LARGE_LEN_BYTES = 3 # bytes needed for encoding scriptSig / witness item lengths >= 253 |
| 170 | + |
| 171 | + # empty scriptSig, no witness |
| 172 | + self.assertEqual(calculate_input_weight("", None), |
| 173 | + (SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) |
| 174 | + # small scriptSig, no witness |
| 175 | + scriptSig_small = "00"*252 |
| 176 | + self.assertEqual(calculate_input_weight(scriptSig_small, None), |
| 177 | + (SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR) |
| 178 | + # large scriptSig, no witness |
| 179 | + scriptSig_large = "00"*253 |
| 180 | + self.assertEqual(calculate_input_weight(scriptSig_large, None), |
| 181 | + (SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR) |
| 182 | + # large scriptSig, empty witness stack |
| 183 | + scriptSig_large = "00"*253 |
| 184 | + self.assertEqual(calculate_input_weight(scriptSig_large, []), |
| 185 | + (SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR + SMALL_LEN_BYTES) |
| 186 | + # empty scriptSig, 5 small witness stack items |
| 187 | + self.assertEqual(calculate_input_weight("", ["00", "11", "22", "33", "44"]), |
| 188 | + ((SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 5 * SMALL_LEN_BYTES + 5) |
| 189 | + # empty scriptSig, 253 small witness stack items |
| 190 | + self.assertEqual(calculate_input_weight("", ["00"]*253), |
| 191 | + ((SKELETON_BYTES + SMALL_LEN_BYTES) * WITNESS_SCALE_FACTOR) + LARGE_LEN_BYTES + 253 * SMALL_LEN_BYTES + 253) |
| 192 | + # small scriptSig, 3 large witness stack items |
| 193 | + self.assertEqual(calculate_input_weight(scriptSig_small, ["00"*253]*3), |
| 194 | + ((SKELETON_BYTES + SMALL_LEN_BYTES + 252) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 3 * LARGE_LEN_BYTES + 3*253) |
| 195 | + # large scriptSig, 3 large witness stack items |
| 196 | + self.assertEqual(calculate_input_weight(scriptSig_large, ["00"*253]*3), |
| 197 | + ((SKELETON_BYTES + LARGE_LEN_BYTES + 253) * WITNESS_SCALE_FACTOR) + SMALL_LEN_BYTES + 3 * LARGE_LEN_BYTES + 3*253) |
0 commit comments