Browse Source

util: mv create_URI to create_bip21_uri, and small clean-up

sqlite_db
SomberNight 6 years ago
parent
commit
4ef3eda8da
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 4
      electrum/gui/kivy/uix/screens.py
  2. 14
      electrum/gui/qt/main_window.py
  3. 16
      electrum/util.py

4
electrum/gui/kivy/uix/screens.py

@ -363,13 +363,13 @@ class ReceiveScreen(CScreen):
Clock.schedule_once(lambda dt: self.update_qr())
def get_URI(self):
from electrum.util import create_URI
from electrum.util import create_bip21_uri
amount = self.screen.amount
if amount:
a, u = self.screen.amount.split()
assert u == self.app.base_unit
amount = Decimal(a) * pow(10, self.app.decimal_point())
return create_URI(self.screen.address, amount, self.screen.message)
return create_bip21_uri(self.screen.address, amount, self.screen.message)
@profiler
def update_qr(self):

14
electrum/gui/qt/main_window.py

@ -965,16 +965,18 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
req = self.wallet.receive_requests[addr]
message = self.wallet.labels.get(addr, '')
amount = req['amount']
URI = util.create_URI(addr, amount, message)
extra_query_params = {}
if req.get('time'):
URI += "&time=%d"%req.get('time')
extra_query_params['time'] = str(int(req.get('time')))
if req.get('exp'):
URI += "&exp=%d"%req.get('exp')
extra_query_params['exp'] = str(int(req.get('exp')))
if req.get('name') and req.get('sig'):
sig = bfh(req.get('sig'))
sig = bitcoin.base_encode(sig, base=58)
URI += "&name=" + req['name'] + "&sig="+sig
return str(URI)
extra_query_params['name'] = req['name']
extra_query_params['sig'] = sig
uri = util.create_bip21_uri(addr, amount, message, extra_query_params=extra_query_params)
return str(uri)
def sign_payment_request(self, addr):
@ -1113,7 +1115,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
amount = self.receive_amount_e.get_amount()
message = self.receive_message_e.text()
self.save_request_button.setEnabled((amount is not None) or (message != ""))
uri = util.create_URI(addr, amount, message)
uri = util.create_bip21_uri(addr, amount, message)
self.receive_qr.setData(uri)
if self.qr_window and self.qr_window.isVisible():
self.qr_window.qrw.setData(uri)

16
electrum/util.py

@ -798,17 +798,25 @@ def parse_URI(uri: str, on_pr: Callable=None) -> dict:
return out
def create_URI(addr, amount, message):
def create_bip21_uri(addr, amount_sat: Optional[int], message: Optional[str],
*, extra_query_params: Optional[dict] = None) -> str:
from . import bitcoin
if not bitcoin.is_address(addr):
return ""
if extra_query_params is None:
extra_query_params = {}
query = []
if amount:
query.append('amount=%s'%format_satoshis_plain(amount))
if amount_sat:
query.append('amount=%s'%format_satoshis_plain(amount_sat))
if message:
query.append('message=%s'%urllib.parse.quote(message))
for k, v in extra_query_params.items():
if not isinstance(k, str) or k != urllib.parse.quote(k):
raise Exception(f"illegal key for URI: {repr(k)}")
v = urllib.parse.quote(v)
query.append(f"{k}={v}")
p = urllib.parse.ParseResult(scheme='bitcoin', netloc='', path=addr, params='', query='&'.join(query), fragment='')
return urllib.parse.urlunparse(p)
return str(urllib.parse.urlunparse(p))
# Python bug (http://bugs.python.org/issue1927) causes raw_input

Loading…
Cancel
Save