|
22 | 22 | SCRIPTPUBKEY_OP_RETURN_MAX_LEN = 83 |
23 | 23 | SCRIPTPUBKEY_P2PKH_LEN = 25 |
24 | 24 | SCRIPTPUBKEY_P2SH_LEN = 23 |
| 25 | +SCRIPTPUBKEY_P2TR_LEN = 34 |
25 | 26 | HASH160_LEN = 20 |
26 | 27 | SCRIPTSIG_P2PKH_MAX_LEN = 140 |
27 | 28 |
|
28 | | -PK, PK_LEN = make_cbuffer('11' * 33) # Fake compressed pubkey |
| 29 | +PK, PK_LEN = make_cbuffer('02' * 33) # Fake compressed pubkey |
29 | 30 | PKU, PKU_LEN = make_cbuffer('11' * 65) # Fake uncompressed pubkey |
| 31 | +PKX, PKX_LEN = make_cbuffer('02' * 32) # Fake x-only pubkey |
30 | 32 | SH, SH_LEN = make_cbuffer('11' * 20) # Fake script hash |
31 | 33 | MPK_2, MPK_2_LEN = make_cbuffer('11' * 33 * 2) # Fake multiple (2) pubkeys |
32 | 34 | MPK_3, MPK_3_LEN = make_cbuffer('11' * 33 * 3) # Fake multiple (3) pubkeys |
@@ -124,15 +126,14 @@ def test_scriptpubkey_p2pkh_from_bytes(self): |
124 | 126 |
|
125 | 127 | # Valid cases |
126 | 128 | valid_args = [ |
127 | | - [(PK, PK_LEN, SCRIPT_HASH160, out, out_len),'76a9148ec4cf3ee160b054e0abb6f5c8177b9ee56fa51e88ac'], |
| 129 | + [(PK, PK_LEN, SCRIPT_HASH160, out, out_len),'76a91451814f108670aced2d77c1805ddd6634bc9d473188ac'], |
128 | 130 | [(PKU, PKU_LEN, SCRIPT_HASH160, out, out_len),'76a914e723a0f62396b8b03dbd9e48e9b9efe2eb704aab88ac'], |
129 | 131 | [(PKU, HASH160_LEN, 0, out, out_len),'76a914111111111111111111111111111111111111111188ac'], |
130 | 132 | ] |
131 | 133 | for args, exp_script in valid_args: |
132 | 134 | ret = wally_scriptpubkey_p2pkh_from_bytes(*args) |
133 | 135 | self.assertEqual(ret, (WALLY_OK, SCRIPTPUBKEY_P2PKH_LEN)) |
134 | | - exp_script, _ = make_cbuffer(exp_script) |
135 | | - self.assertEqual(args[3], exp_script) |
| 136 | + self.assertEqual(h(args[3]), utf8(exp_script)) |
136 | 137 | ret = wally_scriptpubkey_get_type(out, SCRIPTPUBKEY_P2PKH_LEN) |
137 | 138 | self.assertEqual(ret, (WALLY_OK, SCRIPT_TYPE_P2PKH)) |
138 | 139 |
|
@@ -173,6 +174,37 @@ def test_scriptpubkey_p2sh_from_bytes(self): |
173 | 174 | ret = wally_scriptpubkey_get_type(out, SCRIPTPUBKEY_P2SH_LEN) |
174 | 175 | self.assertEqual(ret, (WALLY_OK, SCRIPT_TYPE_P2SH)) |
175 | 176 |
|
| 177 | + def test_scriptpubkey_p2tr_from_bytes(self): |
| 178 | + """Tests for creating p2tr scriptPubKeys""" |
| 179 | + # Invalid args |
| 180 | + out, out_len = make_cbuffer('00' * SCRIPTPUBKEY_P2TR_LEN) |
| 181 | + invalid_args = [ |
| 182 | + (None, PK_LEN, 0, out, out_len), # Null bytes |
| 183 | + (PK, 0, 0, out, out_len), # Empty bytes |
| 184 | + (PK, PK_LEN, 0x8, out, out_len), # Unsupported flags |
| 185 | + (PK, PK_LEN+1, 0, out, out_len), # Invalid pubkey len |
| 186 | + (PK, PK_LEN, 0, None, out_len), # Null output |
| 187 | + (PK, PK_LEN, 0, out, out_len-1), # Short output len |
| 188 | + ] |
| 189 | + for args in invalid_args: |
| 190 | + ret = wally_scriptpubkey_p2tr_from_bytes(*args) |
| 191 | + if ret == (WALLY_OK, SCRIPTPUBKEY_P2TR_LEN): |
| 192 | + self.assertTrue(args[-1] < out_len) |
| 193 | + else: |
| 194 | + self.assertEqual(ret, (WALLY_EINVAL, 0)) |
| 195 | + |
| 196 | + # Valid cases |
| 197 | + valid_args = [ |
| 198 | + [(PK, PK_LEN, 0, out, out_len), '51203b6ec3adc4917224b2da531904a1d12c2ad47cabaa88fa54adc55aa2d7d29571'], |
| 199 | + [(PKX, PKX_LEN, 0, out, out_len), '51200202020202020202020202020202020202020202020202020202020202020202'], |
| 200 | + ] |
| 201 | + for args, exp_script in valid_args: |
| 202 | + ret = wally_scriptpubkey_p2tr_from_bytes(*args) |
| 203 | + self.assertEqual(ret, (WALLY_OK, SCRIPTPUBKEY_P2TR_LEN)) |
| 204 | + self.assertEqual(h(args[3]), utf8(exp_script)) |
| 205 | + ret = wally_scriptpubkey_get_type(out, SCRIPTPUBKEY_P2TR_LEN) |
| 206 | + self.assertEqual(ret, (WALLY_OK, SCRIPT_TYPE_P2TR)) |
| 207 | + |
176 | 208 | def test_scriptpubkey_multisig_from_bytes(self): |
177 | 209 | """Tests for creating multisig scriptPubKeys""" |
178 | 210 | # Invalid args |
@@ -303,14 +335,13 @@ def test_scriptsig_p2pkh(self): |
303 | 335 |
|
304 | 336 | # Valid cases |
305 | 337 | valid_args = [ |
306 | | - [(PK, PK_LEN, SIG_DER, SIG_DER_LEN, out, out_len), '4730450220'+'11'*32+'0220'+'11'*32+'0121'+'11'*33], |
| 338 | + [(PK, PK_LEN, SIG_DER, SIG_DER_LEN, out, out_len), '4730450220'+'11'*32+'0220'+'11'*32+'0121'+'02'*33], |
307 | 339 | [(PKU, PKU_LEN, SIG_DER, SIG_DER_LEN, out, out_len), '4730450220'+'11'*32+'0220'+'11'*32+'0141'+'11'*65], |
308 | 340 | ] |
309 | 341 | for args, exp_script in valid_args: |
310 | 342 | ret = wally_scriptsig_p2pkh_from_der(*args) |
311 | 343 | self.assertEqual(ret, (WALLY_OK, args[1] + args[3] + 2)) |
312 | | - exp_script, _ = make_cbuffer(exp_script) |
313 | | - self.assertEqual(args[4][:(args[1] + args[3] + 2)], exp_script) |
| 344 | + self.assertEqual(h(args[4][:(args[1] + args[3] + 2)]), utf8(exp_script)) |
314 | 345 |
|
315 | 346 | # From sig |
316 | 347 | # Invalid args |
|
0 commit comments