|
|
@ -356,8 +356,10 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
# normal P2PKH and P2PK with compressed keys should always be spendable |
|
|
|
# normal P2PKH and P2PK with compressed keys should always be spendable |
|
|
|
spendable_anytime.extend([p2pkh, p2pk]) |
|
|
|
spendable_anytime.extend([p2pkh, p2pk]) |
|
|
|
# P2SH_P2PK, P2SH_P2PKH, and witness with compressed keys are spendable after direct importaddress |
|
|
|
# P2SH_P2PK, P2SH_P2PKH with compressed keys are spendable after direct importaddress |
|
|
|
spendable_after_importaddress.extend([p2wpkh, p2sh_p2wpkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
spendable_after_importaddress.extend([p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
|
|
|
|
# P2WPKH and P2SH_P2WPKH with compressed keys should always be spendable |
|
|
|
|
|
|
|
spendable_anytime.extend([p2wpkh, p2sh_p2wpkh]) |
|
|
|
|
|
|
|
|
|
|
|
for i in uncompressed_spendable_address: |
|
|
|
for i in uncompressed_spendable_address: |
|
|
|
v = self.nodes[0].validateaddress(i) |
|
|
|
v = self.nodes[0].validateaddress(i) |
|
|
@ -373,7 +375,7 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
spendable_anytime.extend([p2pkh, p2pk]) |
|
|
|
spendable_anytime.extend([p2pkh, p2pk]) |
|
|
|
# P2SH_P2PK and P2SH_P2PKH are spendable after direct importaddress |
|
|
|
# P2SH_P2PK and P2SH_P2PKH are spendable after direct importaddress |
|
|
|
spendable_after_importaddress.extend([p2sh_p2pk, p2sh_p2pkh]) |
|
|
|
spendable_after_importaddress.extend([p2sh_p2pk, p2sh_p2pkh]) |
|
|
|
# witness with uncompressed keys are never seen |
|
|
|
# Witness output types with uncompressed keys are never seen |
|
|
|
unseen_anytime.extend([p2wpkh, p2sh_p2wpkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
unseen_anytime.extend([p2wpkh, p2sh_p2wpkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
|
|
|
|
|
|
|
|
for i in compressed_solvable_address: |
|
|
|
for i in compressed_solvable_address: |
|
|
@ -384,10 +386,10 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
solvable_after_importaddress.extend([bare, p2sh, p2wsh, p2sh_p2wsh]) |
|
|
|
solvable_after_importaddress.extend([bare, p2sh, p2wsh, p2sh_p2wsh]) |
|
|
|
else: |
|
|
|
else: |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
# normal P2PKH and P2PK with compressed keys should always be seen |
|
|
|
# normal P2PKH, P2PK, P2WPKH and P2SH_P2WPKH with compressed keys should always be seen |
|
|
|
solvable_anytime.extend([p2pkh, p2pk]) |
|
|
|
solvable_anytime.extend([p2pkh, p2pk, p2wpkh, p2sh_p2wpkh]) |
|
|
|
# P2SH_P2PK, P2SH_P2PKH, and witness with compressed keys are seen after direct importaddress |
|
|
|
# P2SH_P2PK, P2SH_P2PKH with compressed keys are seen after direct importaddress |
|
|
|
solvable_after_importaddress.extend([p2wpkh, p2sh_p2wpkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
solvable_after_importaddress.extend([p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
|
|
|
|
|
|
|
|
for i in uncompressed_solvable_address: |
|
|
|
for i in uncompressed_solvable_address: |
|
|
|
v = self.nodes[0].validateaddress(i) |
|
|
|
v = self.nodes[0].validateaddress(i) |
|
|
@ -403,7 +405,7 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
solvable_anytime.extend([p2pkh, p2pk]) |
|
|
|
solvable_anytime.extend([p2pkh, p2pk]) |
|
|
|
# P2SH_P2PK, P2SH_P2PKH with uncompressed keys are seen after direct importaddress |
|
|
|
# P2SH_P2PK, P2SH_P2PKH with uncompressed keys are seen after direct importaddress |
|
|
|
solvable_after_importaddress.extend([p2sh_p2pk, p2sh_p2pkh]) |
|
|
|
solvable_after_importaddress.extend([p2sh_p2pk, p2sh_p2pkh]) |
|
|
|
# witness with uncompressed keys are never seen |
|
|
|
# Witness output types with uncompressed keys are never seen |
|
|
|
unseen_anytime.extend([p2wpkh, p2sh_p2wpkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
unseen_anytime.extend([p2wpkh, p2sh_p2wpkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh]) |
|
|
|
|
|
|
|
|
|
|
|
op1 = CScript([OP_1]) |
|
|
|
op1 = CScript([OP_1]) |
|
|
@ -496,6 +498,8 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
spendable_after_addwitnessaddress = [] # These outputs should be seen after importaddress |
|
|
|
spendable_after_addwitnessaddress = [] # These outputs should be seen after importaddress |
|
|
|
solvable_after_addwitnessaddress=[] # These outputs should be seen after importaddress but not spendable |
|
|
|
solvable_after_addwitnessaddress=[] # These outputs should be seen after importaddress but not spendable |
|
|
|
unseen_anytime = [] # These outputs should never be seen |
|
|
|
unseen_anytime = [] # These outputs should never be seen |
|
|
|
|
|
|
|
solvable_anytime = [] # These outputs should be solvable after importpubkey |
|
|
|
|
|
|
|
unseen_anytime = [] # These outputs should never be seen |
|
|
|
|
|
|
|
|
|
|
|
uncompressed_spendable_address.append(self.nodes[0].addmultisigaddress(2, [uncompressed_spendable_address[0], compressed_spendable_address[0]])) |
|
|
|
uncompressed_spendable_address.append(self.nodes[0].addmultisigaddress(2, [uncompressed_spendable_address[0], compressed_spendable_address[0]])) |
|
|
|
uncompressed_spendable_address.append(self.nodes[0].addmultisigaddress(2, [uncompressed_spendable_address[0], uncompressed_spendable_address[0]])) |
|
|
|
uncompressed_spendable_address.append(self.nodes[0].addmultisigaddress(2, [uncompressed_spendable_address[0], uncompressed_spendable_address[0]])) |
|
|
@ -514,9 +518,8 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
premature_witaddress.append(script_to_p2sh(p2wsh)) |
|
|
|
premature_witaddress.append(script_to_p2sh(p2wsh)) |
|
|
|
else: |
|
|
|
else: |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
# P2WPKH, P2SH_P2WPKH are spendable after addwitnessaddress |
|
|
|
# P2WPKH, P2SH_P2WPKH are always spendable |
|
|
|
spendable_after_addwitnessaddress.extend([p2wpkh, p2sh_p2wpkh]) |
|
|
|
spendable_anytime.extend([p2wpkh, p2sh_p2wpkh]) |
|
|
|
premature_witaddress.append(script_to_p2sh(p2wpkh)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i in uncompressed_spendable_address + uncompressed_solvable_address: |
|
|
|
for i in uncompressed_spendable_address + uncompressed_solvable_address: |
|
|
|
v = self.nodes[0].validateaddress(i) |
|
|
|
v = self.nodes[0].validateaddress(i) |
|
|
@ -538,10 +541,11 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
premature_witaddress.append(script_to_p2sh(p2wsh)) |
|
|
|
premature_witaddress.append(script_to_p2sh(p2wsh)) |
|
|
|
else: |
|
|
|
else: |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
[p2wpkh, p2sh_p2wpkh, p2pk, p2pkh, p2sh_p2pk, p2sh_p2pkh, p2wsh_p2pk, p2wsh_p2pkh, p2sh_p2wsh_p2pk, p2sh_p2wsh_p2pkh] = self.p2pkh_address_to_script(v) |
|
|
|
# P2SH_P2PK, P2SH_P2PKH with compressed keys are seen after addwitnessaddress |
|
|
|
# P2SH_P2PK, P2SH_P2PKH with compressed keys are always solvable |
|
|
|
solvable_after_addwitnessaddress.extend([p2wpkh, p2sh_p2wpkh]) |
|
|
|
solvable_anytime.extend([p2wpkh, p2sh_p2wpkh]) |
|
|
|
premature_witaddress.append(script_to_p2sh(p2wpkh)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.mine_and_test_listunspent(spendable_anytime, 2) |
|
|
|
|
|
|
|
self.mine_and_test_listunspent(solvable_anytime, 1) |
|
|
|
self.mine_and_test_listunspent(spendable_after_addwitnessaddress + solvable_after_addwitnessaddress + unseen_anytime, 0) |
|
|
|
self.mine_and_test_listunspent(spendable_after_addwitnessaddress + solvable_after_addwitnessaddress + unseen_anytime, 0) |
|
|
|
|
|
|
|
|
|
|
|
# addwitnessaddress should refuse to return a witness address if an uncompressed key is used |
|
|
|
# addwitnessaddress should refuse to return a witness address if an uncompressed key is used |
|
|
@ -558,8 +562,8 @@ class SegWitTest(BitcoinTestFramework): |
|
|
|
witaddress = self.nodes[0].addwitnessaddress(i) |
|
|
|
witaddress = self.nodes[0].addwitnessaddress(i) |
|
|
|
assert_equal(witaddress, self.nodes[0].addwitnessaddress(witaddress)) |
|
|
|
assert_equal(witaddress, self.nodes[0].addwitnessaddress(witaddress)) |
|
|
|
|
|
|
|
|
|
|
|
spendable_txid.append(self.mine_and_test_listunspent(spendable_after_addwitnessaddress, 2)) |
|
|
|
spendable_txid.append(self.mine_and_test_listunspent(spendable_after_addwitnessaddress + spendable_anytime, 2)) |
|
|
|
solvable_txid.append(self.mine_and_test_listunspent(solvable_after_addwitnessaddress, 1)) |
|
|
|
solvable_txid.append(self.mine_and_test_listunspent(solvable_after_addwitnessaddress + solvable_anytime, 1)) |
|
|
|
self.mine_and_test_listunspent(unseen_anytime, 0) |
|
|
|
self.mine_and_test_listunspent(unseen_anytime, 0) |
|
|
|
|
|
|
|
|
|
|
|
# Check that createrawtransaction/decoderawtransaction with non-v0 Bech32 works |
|
|
|
# Check that createrawtransaction/decoderawtransaction with non-v0 Bech32 works |
|
|
|