|
|
|
|
@ -388,23 +388,21 @@ class Abstract_Wallet(PrintError):
|
|
|
|
|
def get_address_index(self, address): |
|
|
|
|
raise NotImplementedError() |
|
|
|
|
|
|
|
|
|
def get_redeem_script(self, address): |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def export_private_key(self, address, password): |
|
|
|
|
""" extended WIF format """ |
|
|
|
|
if self.is_watching_only(): |
|
|
|
|
return [] |
|
|
|
|
index = self.get_address_index(address) |
|
|
|
|
pk, compressed = self.keystore.get_private_key(index, password) |
|
|
|
|
if self.txin_type in ['p2sh', 'p2wsh', 'p2wsh-p2sh']: |
|
|
|
|
pubkeys = self.get_public_keys(address) |
|
|
|
|
redeem_script = self.pubkeys_to_redeem_script(pubkeys) |
|
|
|
|
else: |
|
|
|
|
redeem_script = None |
|
|
|
|
return bitcoin.serialize_privkey(pk, compressed, self.txin_type), redeem_script |
|
|
|
|
|
|
|
|
|
txin_type = self.get_txin_type(address) |
|
|
|
|
redeem_script = self.get_redeem_script(address) |
|
|
|
|
serialized_privkey = bitcoin.serialize_privkey(pk, compressed, txin_type) |
|
|
|
|
return serialized_privkey, redeem_script |
|
|
|
|
|
|
|
|
|
def get_public_keys(self, address): |
|
|
|
|
sequence = self.get_address_index(address) |
|
|
|
|
return self.get_pubkeys(*sequence) |
|
|
|
|
return [self.get_public_key(address)] |
|
|
|
|
|
|
|
|
|
def add_unverified_tx(self, tx_hash, tx_height): |
|
|
|
|
if tx_height in (TX_HEIGHT_UNCONFIRMED, TX_HEIGHT_UNCONF_PARENT) \ |
|
|
|
|
@ -1896,12 +1894,10 @@ class Imported_Wallet(Simple_Wallet):
|
|
|
|
|
self.add_address(addr) |
|
|
|
|
return addr |
|
|
|
|
|
|
|
|
|
def export_private_key(self, address, password): |
|
|
|
|
def get_redeem_script(self, address): |
|
|
|
|
d = self.addresses[address] |
|
|
|
|
pubkey = d['pubkey'] |
|
|
|
|
redeem_script = d['redeem_script'] |
|
|
|
|
sec = pw_decode(self.keystore.keypairs[pubkey], password) |
|
|
|
|
return sec, redeem_script |
|
|
|
|
return redeem_script |
|
|
|
|
|
|
|
|
|
def get_txin_type(self, address): |
|
|
|
|
return self.addresses[address].get('type', 'address') |
|
|
|
|
@ -2079,9 +2075,6 @@ class Simple_Deterministic_Wallet(Simple_Wallet, Deterministic_Wallet):
|
|
|
|
|
def get_pubkey(self, c, i): |
|
|
|
|
return self.derive_pubkeys(c, i) |
|
|
|
|
|
|
|
|
|
def get_public_keys(self, address): |
|
|
|
|
return [self.get_public_key(address)] |
|
|
|
|
|
|
|
|
|
def add_input_sig_info(self, txin, address): |
|
|
|
|
derivation = self.get_address_index(address) |
|
|
|
|
x_pubkey = self.keystore.get_xpubkey(*derivation) |
|
|
|
|
@ -2119,6 +2112,10 @@ class Multisig_Wallet(Deterministic_Wallet):
|
|
|
|
|
def get_pubkeys(self, c, i): |
|
|
|
|
return self.derive_pubkeys(c, i) |
|
|
|
|
|
|
|
|
|
def get_public_keys(self, address): |
|
|
|
|
sequence = self.get_address_index(address) |
|
|
|
|
return self.get_pubkeys(*sequence) |
|
|
|
|
|
|
|
|
|
def pubkeys_to_address(self, pubkeys): |
|
|
|
|
redeem_script = self.pubkeys_to_redeem_script(pubkeys) |
|
|
|
|
return bitcoin.redeem_script_to_address(self.txin_type, redeem_script) |
|
|
|
|
@ -2126,6 +2123,11 @@ class Multisig_Wallet(Deterministic_Wallet):
|
|
|
|
|
def pubkeys_to_redeem_script(self, pubkeys): |
|
|
|
|
return transaction.multisig_script(sorted(pubkeys), self.m) |
|
|
|
|
|
|
|
|
|
def get_redeem_script(self, address): |
|
|
|
|
pubkeys = self.get_public_keys(address) |
|
|
|
|
redeem_script = self.pubkeys_to_redeem_script(pubkeys) |
|
|
|
|
return redeem_script |
|
|
|
|
|
|
|
|
|
def derive_pubkeys(self, c, i): |
|
|
|
|
return [k.derive_pubkey(c, i) for k in self.get_keystores()] |
|
|
|
|
|
|
|
|
|
|