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