mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-03 02:35:20 +00:00
rewrite from_addr, allow to select addr from wallet
This commit is contained in:
parent
a41d3d6a82
commit
8757adac40
2 changed files with 30 additions and 26 deletions
|
@ -191,7 +191,7 @@ if __name__ == '__main__':
|
|||
print "payto <recipient> <amount> [label]"
|
||||
print "create and broadcast a transaction."
|
||||
print "<recipient> can be a bitcoin address or a label"
|
||||
print "options: --fromaddr, --changeaddr"
|
||||
print "options: --fee, --fromaddr, --changeaddr"
|
||||
elif cmd2== 'sendtx':
|
||||
print "sendtx <tx>"
|
||||
print "broadcast a transaction to the network. <tx> must be in hexadecimal"
|
||||
|
@ -210,7 +210,7 @@ if __name__ == '__main__':
|
|||
elif cmd2 == 'mktx':
|
||||
print "create a signed transaction. password protected"
|
||||
print "syntax: mktx <recipient> <amount> [label]"
|
||||
print "options: --fromaddr, --changeaddr"
|
||||
print "options: --fee, --fromaddr, --changeaddr"
|
||||
elif cmd2 == 'seed':
|
||||
print "show generation seed of your wallet. password protected."
|
||||
elif cmd2 == 'eval':
|
||||
|
@ -303,27 +303,25 @@ if __name__ == '__main__':
|
|||
wallet.save()
|
||||
|
||||
elif cmd in ['payto', 'mktx']:
|
||||
is_temporary = False
|
||||
if options.from_addr:
|
||||
#temporally import key and remove the other addresses
|
||||
addr = options.from_addr
|
||||
if addr.find(":") == -1:
|
||||
addr = addr + ":" + getpass.getpass('Private key:')
|
||||
wallet.imported_keys = {}
|
||||
if not wallet.import_key(options.from_addr,password):
|
||||
print "invalid key pair"
|
||||
exit(1)
|
||||
addr = wallet.imported_keys.keys()[0]
|
||||
wallet.history[addr] = interface.retrieve_history(addr)
|
||||
wallet.synchronize()
|
||||
wallet.update_tx_history()
|
||||
wallet.addresses = []
|
||||
wallet.change_addresses = []
|
||||
change_addr = addr
|
||||
save = False
|
||||
from_addr = options.from_addr
|
||||
if from_addr not in wallet.all_addresses():
|
||||
if from_addr.find(":") == -1:
|
||||
keypair = from_addr + ":" + getpass.getpass('Private key:')
|
||||
else:
|
||||
keypair = from_addr
|
||||
from_addr = keypair.split(':')[0]
|
||||
if not wallet.import_key(keypair,password):
|
||||
print "invalid key pair"
|
||||
exit(1)
|
||||
is_temporary = True
|
||||
else:
|
||||
save = True
|
||||
from_addr = None
|
||||
|
||||
if options.change_addr:
|
||||
change_addr = options.change_addr
|
||||
|
||||
for k, v in wallet.labels.items():
|
||||
if v == to_address:
|
||||
to_address = k
|
||||
|
@ -333,9 +331,10 @@ if __name__ == '__main__':
|
|||
change_addr = k
|
||||
try:
|
||||
tx = wallet.mktx( to_address, amount, label, password,
|
||||
fee = options.tx_fee, change_addr = change_addr, save = save )
|
||||
except BaseException, e:
|
||||
print e
|
||||
fee = options.tx_fee, change_addr = change_addr, from_addr = from_addr )
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
tx = None
|
||||
|
||||
if tx and cmd=='payto':
|
||||
|
@ -344,6 +343,10 @@ if __name__ == '__main__':
|
|||
else:
|
||||
print tx
|
||||
|
||||
if is_temporary:
|
||||
wallet.imported_keys.pop(from_addr)
|
||||
wallet.save()
|
||||
|
||||
elif cmd == 'sendtx':
|
||||
tx = args[1]
|
||||
r, h = wallet.sendtx( tx )
|
||||
|
|
|
@ -574,13 +574,14 @@ class Wallet:
|
|||
return conf, unconf
|
||||
|
||||
|
||||
def choose_tx_inputs( self, amount, fixed_fee ):
|
||||
def choose_tx_inputs( self, amount, fixed_fee, from_addr = None ):
|
||||
""" todo: minimize tx size """
|
||||
total = 0
|
||||
fee = self.fee if fixed_fee is None else fixed_fee
|
||||
|
||||
coins = []
|
||||
for addr in self.all_addresses():
|
||||
domain = [from_addr] if from_addr else self.all_addresses()
|
||||
for addr in domain:
|
||||
h = self.history.get(addr)
|
||||
if h is None: continue
|
||||
for item in h:
|
||||
|
@ -687,10 +688,10 @@ class Wallet:
|
|||
default_label = 'at: ' + o_addr
|
||||
tx['default_label'] = default_label
|
||||
|
||||
def mktx(self, to_address, amount, label, password, fee=None, change_addr=None, save=True):
|
||||
def mktx(self, to_address, amount, label, password, fee=None, change_addr=None, from_addr= None):
|
||||
if not self.is_valid(to_address):
|
||||
raise BaseException("Invalid address")
|
||||
inputs, total, fee = self.choose_tx_inputs( amount, fee )
|
||||
inputs, total, fee = self.choose_tx_inputs( amount, fee, from_addr )
|
||||
if not inputs:
|
||||
raise BaseException("Not enough funds")
|
||||
outputs = self.choose_tx_outputs( to_address, amount, fee, total, change_addr )
|
||||
|
|
Loading…
Add table
Reference in a new issue