Skip to content

Commit f7308d9

Browse files
committed
Fixes
1 parent c32098b commit f7308d9

3 files changed

Lines changed: 59 additions & 18 deletions

File tree

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,17 @@ python3 -m pip install electrum-scripting
3131
## Get Started
3232

3333
```python
34-
from electrum_scripting.wallet import WalletScripting as ws
34+
> from electrum_scripting.wallet import WalletScripting as ws
3535

3636
# Call electrum command
37-
ws.call('listunspent')
37+
> unspents = ws.call('listunspent')
38+
[{'address': 'bc1q9tguzkmqul768z9hxkeg8hd6yrrhexymwmykygwk4m6g4t8msheq3z0rxm', 'value': '0.00258', 'prevout_n': 1, 'prevout_hash': '18810325792ff18d52fa65f1724d13750a584bfec8f44a4670f7baecac6d1510', 'height': 587939, 'coinbase': False}]
39+
40+
> tx = ws.call('paytomany', unsigned=True, password="password", outputs=[['address1', 'amount1']])
41+
{'hex': '45505446ff000200000000010110156dacecbaf770464af4c8fe4b580a75134d72f165fa528df12f79250381180100000000fdffffff02a0860100000000002200202ad1c15b60e7fda388b735b283ddba20c77c989b76c96221d6aef48aacfb85f2164d020000000000220020ab8433b505b64af499a5561951404ad86c7ae93b894febc457acf6420fce75a6feffffffffd0ef0300000000000000050001ff01ff01fffd0201534c53ff02aa7ed301638c8c3b80000001cb70696dad3ba23bc1899b72be25bf489eb954fb61e5f7037bad5ed00366f37f036317daa8d96ef7023909f3551853df43a40999505bd846d377f04f5b523e2def000000004c53ff02aa7ed3015c8338c880000001657348468a9482ae1bc5090b8823e8628e6fbaf0673d98777eec1407b5ed43ee0272c445a9a82c43c69eb091b26f3872bcb46449387392bee44a1b4b7951d7ec85000000004c53ff02aa7ed301bc696fad8000000152b96b078f8ee0f02603dc6852ad00cc1a9083ddc0901499cb36da1732d79b570222b0d8e6260969dfc02f8090c875c865a75da175c02b5dc054f6d2ae9f0d78100000000053ae7ef90800', 'complete': False, 'final': False}
42+
43+
# Other utils
44+
> ws.qr(tx, 'unsigned_tx.png')
3845

3946
```
4047

electrum_scripting/wallet.py

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import os
22
import sys
33
import warnings
4-
4+
import qrcode
5+
import qrcode.image.svg
56

67
MIN_PYTHON_VERSION = "3.6.1" # FIXME duplicated from setup.py
78
_min_python_version_tuple = tuple(map(int, (MIN_PYTHON_VERSION.split("."))))
@@ -19,6 +20,7 @@ def check_imports():
1920
import ecdsa
2021
import certifi
2122
import qrcode
23+
import qrcode.image.svg
2224
import google.protobuf
2325
import jsonrpclib
2426
import aiorpcx
@@ -41,11 +43,13 @@ def check_imports():
4143
from electrum import SimpleConfig
4244
from electrum.wallet import Wallet
4345
from electrum.storage import WalletStorage, get_derivation_used_for_hw_device_encryption
44-
from electrum.util import print_msg, print_stderr, json_encode, json_decode, UserCancelled
46+
from electrum.util import print_msg, print_stderr, json_encode, json_decode, UserCancelled, bfh
4547
from electrum.util import InvalidPassword
4648
from electrum.commands import get_parser, known_commands, Commands, config_variables
4749
from electrum import daemon
4850
from electrum import keystore
51+
from electrum.transaction import Transaction
52+
from electrum.bitcoin import base_encode
4953

5054
_logger = get_logger(__name__)
5155

@@ -229,41 +233,62 @@ def init_plugins(config, gui_name):
229233

230234

231235
class WalletScripting(object):
236+
# Default configurations, overwrite from setup or call
237+
config_options = {
238+
'verbosity': '',
239+
'verbosity_shortcuts': '',
240+
'portable': False,
241+
'testnet': False,
242+
'regtest': False,
243+
'simnet': False,
244+
'cwd': os.getcwd()
245+
}
246+
232247
@classmethod
233-
def setup(cls):
234-
pass
248+
def setup(cls, **kwargs):
249+
cls.config_options.update(kwargs)
235250

236251
@classmethod
237252
def call(cls, command, *args, **kwargs):
238253
# command line
239254
config_options = {
240-
'verbosity': '',
241-
'verbosity_shortcuts': '',
242-
'portable': False,
243-
'testnet': False,
244-
'regtest': False,
245-
'simnet': False,
246255
'cmd': command
247256
}
248-
config_options['cwd'] = os.getcwd()
257+
config_options.update(cls.config_options)
258+
config_options.update(kwargs)
259+
260+
# print(config_options)
249261
config = SimpleConfig(config_options)
250262
cmdname = config.get('cmd')
251263

252264
server = daemon.get_server(config)
253265
init_cmdline(config_options, server)
266+
254267
if server is not None:
255-
print("goes online")
256268
result = server.run_cmdline(config_options)
257-
print(result)
258269
else:
259-
print("goes offline")
260270
cmd = known_commands[cmdname]
261271
if cmd.requires_network:
262272
print_msg("Daemon not running; try 'electrum daemon start'")
263273
sys.exit(1)
264274
else:
265275
plugins = init_plugins(config, 'cmdline')
266276
result = run_offline_command(config, config_options, plugins)
267-
print(result)
277+
278+
return result
279+
280+
@classmethod
281+
def qr(cls, tx, filename):
282+
if type(tx) == dict and 'hex' in tx:
283+
tx = tx['hex']
284+
tx = Transaction(tx)
285+
text = bfh(str(tx))
286+
text = base_encode(text, base=43)
287+
img = qrcode.make(text, image_factory=qrcode.image.svg.SvgPathImage)
288+
289+
img.save(filename)
290+
print("QR Image saved as " + filename)
291+
292+
268293

269294

test.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,14 @@
33
ws.setup()
44

55
# cmd: listunspent
6-
print('calling')
76
ws.call('listunspent')
7+
8+
# cmd: paytomany
9+
tx = ws.call('paytomany', unsigned=True, password='123321', outputs=[['bc1q9tguzkmqul768z9hxkeg8hd6yrrhexymwmykygwk4m6g4t8msheq3z0rxm', '0.001']])
10+
11+
# util: qr
12+
ws.qr(tx['hex'], 'unsigned_tx.svg')
13+
14+
# cmd: signtransaction
15+
tx_signed = ws.call('signtransaction', password='123321', tx=tx['hex'])
16+
ws.qr(tx_signed['hex'], 'signed_tx.svg')

0 commit comments

Comments
 (0)