mirror of
https://github.com/SeedSigner/seedsigner.git
synced 2026-10-05 23:18:25 +00:00
work in progress
This commit is contained in:
@@ -3,7 +3,7 @@ import time
|
||||
from multiprocessing import Process, Queue
|
||||
from subprocess import call
|
||||
import os, sys
|
||||
from embit import bip39, bip32
|
||||
from embit import bip32
|
||||
from embit.networks import NETWORKS
|
||||
from binascii import hexlify
|
||||
from threading import Thread
|
||||
@@ -694,7 +694,7 @@ class Controller(Singleton):
|
||||
|
||||
# show transaction information before sign
|
||||
self.menu_view.draw_modal(["Parsing PSBT"])
|
||||
p = PSBTParser(psbt,seed.mnemonic_list,seed.passphrase,self.settings.network)
|
||||
p = PSBTParser(psbt,seed,self.settings.network)
|
||||
self.signing_tools_view.display_transaction_information(p)
|
||||
input = self.buttons.wait_for([B.KEY_RIGHT, B.KEY_LEFT], False)
|
||||
if input == B.KEY_LEFT:
|
||||
|
||||
@@ -2,11 +2,12 @@ from embit import psbt, script, ec, bip32, bip39
|
||||
from embit.networks import NETWORKS
|
||||
from io import BytesIO
|
||||
|
||||
from seedsigner.models.seed import Seed
|
||||
|
||||
class PSBTParser():
|
||||
|
||||
def __init__(self, p, seed_phrase=[], passphrase="", network="main"):
|
||||
self.seed_phrase = seed_phrase
|
||||
self.passphrase = passphrase
|
||||
def __init__(self, p, seed: Seed, network="main"):
|
||||
self.seed = seed
|
||||
self.network = network
|
||||
self.psbt = p
|
||||
|
||||
@@ -18,17 +19,15 @@ class PSBTParser():
|
||||
self.destination_addresses = []
|
||||
self.self_addresses = []
|
||||
|
||||
self.seed = None
|
||||
self.root = None
|
||||
|
||||
if self.seed_phrase != None:
|
||||
self.parse(self.psbt,self.seed_phrase,self.passphrase,self.network)
|
||||
if self.seed:
|
||||
self.parse(self.psbt,self.seed,self.network)
|
||||
|
||||
def __setSeedRoot(self, seed_phrase, passphrase, network):
|
||||
self.seed = bip39.mnemonic_to_seed(" ".join(seed_phrase).strip(), passphrase)
|
||||
self.root = bip32.HDKey.from_seed(self.seed, version=NETWORKS[network]["xprv"])
|
||||
def __setRoot(self, seed: Seed, network):
|
||||
self.root = bip32.HDKey.from_seed(self.seed.seed, version=NETWORKS[network]["xprv"])
|
||||
|
||||
def parse(self, p, seed_phrase=[], passphrase="", network="main"):
|
||||
def parse(self, p, seed: Seed, network="main"):
|
||||
is_psbt_empty = False
|
||||
try:
|
||||
if p == None:
|
||||
@@ -39,10 +38,10 @@ class PSBTParser():
|
||||
if is_psbt_empty:
|
||||
return False
|
||||
|
||||
if len(seed_phrase) == 0:
|
||||
if not seed:
|
||||
return False
|
||||
|
||||
self.__setSeedRoot(seed_phrase,passphrase,network)
|
||||
self.__setRoot(seed, network)
|
||||
|
||||
rt = self.__parseInputs()
|
||||
if rt == False:
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
from embit import bip39, bip32
|
||||
import unicodedata
|
||||
|
||||
from seedsigner.models.settings import Settings
|
||||
|
||||
class Seed:
|
||||
|
||||
def __init__(self, mnemonic = None, passphrase = "", wordlist=None) -> None:
|
||||
@@ -12,6 +10,7 @@ class Seed:
|
||||
self.passphrase = passphrase
|
||||
self.mnemonic = mnemonic
|
||||
if wordlist == None:
|
||||
from seedsigner.models.settings import Settings
|
||||
self._wordlist = Settings.get_instance().wordlist
|
||||
else:
|
||||
self._wordlist = wordlist
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# External Dependencies
|
||||
from embit import bip39
|
||||
from seedsigner.models import Seed
|
||||
|
||||
class SeedStorage:
|
||||
|
||||
@@ -23,6 +23,9 @@ class IOTestView(View):
|
||||
self.draw_modal(["Initializing I/O Test"])
|
||||
print("Initializing I/O Test")
|
||||
self.qr_text = "Scan ANY QR Code"
|
||||
self.redraw = False
|
||||
self.redraw_complete = False
|
||||
self.exit = False
|
||||
|
||||
try:
|
||||
self.controller.get_instance().camera.start_video_stream_mode()
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import pytest
|
||||
from mock import MagicMock
|
||||
from seedsigner.models.seed import Seed
|
||||
from seedsigner.models.decode_qr import DecodeQR, QRType, DecodeQRStatus
|
||||
from seedsigner.models.psbt_parser import PSBTParser
|
||||
from embit import psbt
|
||||
from embit import psbt, bip39
|
||||
|
||||
|
||||
# this is an of this bug: https://github.com/Foundation-Devices/foundation-ur-py/issues/3
|
||||
@@ -80,7 +81,8 @@ def test_base64_single_frame_singlsig():
|
||||
|
||||
mnemonic = "height demise useless trap grow lion found off key clown transfer enroll"
|
||||
pw = ""
|
||||
pp = PSBTParser(tx,mnemonic.split(" "),pw,"test")
|
||||
seed = Seed(mnemonic, pw, wordlist=bip39.WORDLIST)
|
||||
pp = PSBTParser(tx,seed,"test")
|
||||
|
||||
assert tx.inputs[0].witness_utxo.value == 25000 # input amount in psbt
|
||||
|
||||
@@ -130,7 +132,7 @@ def test_base64_2_input_p2wsh():
|
||||
assert str(tx) == base64_psbt
|
||||
|
||||
mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
||||
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
|
||||
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
|
||||
|
||||
assert tx.inputs[0].witness_utxo.value == 10000000 # input amount 1 in psbt
|
||||
|
||||
@@ -157,7 +159,7 @@ def test_base64_1_input_p2sh_p2wsh():
|
||||
assert str(tx) == base64_psbt
|
||||
|
||||
mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
||||
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
|
||||
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
|
||||
|
||||
assert tx.inputs[0].witness_utxo.value == 100000000 # input amount 1 in psbt
|
||||
|
||||
@@ -213,7 +215,7 @@ def test_ur_legacy():
|
||||
tx = d.getPSBT()
|
||||
|
||||
mnemonic = "zone zone zone zone zone abandon ability able abandon ability able abstract"
|
||||
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
|
||||
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
|
||||
|
||||
assert pp.input_amount == 200000
|
||||
|
||||
@@ -247,7 +249,7 @@ def test_specter_multisig_animated_qr():
|
||||
tx = d.getPSBT()
|
||||
|
||||
mnemonic = "zone zone zone zone zone abandon ability able abandon ability able abstract"
|
||||
pp = PSBTParser(tx,mnemonic.split(" "),"","test")
|
||||
pp = PSBTParser(tx,Seed(mnemonic, wordlist=bip39.WORDLIST),"test")
|
||||
|
||||
assert pp.input_amount == 1052818
|
||||
|
||||
@@ -285,7 +287,7 @@ def test_specter_multisig_animated_qr():
|
||||
tx2 = d2.getPSBT()
|
||||
|
||||
mnemonic2 = "able bacon cable able bacon cable abandon abandon abandon abandon abandon access"
|
||||
pp2 = PSBTParser(tx2,mnemonic2.split(" "),"","test")
|
||||
pp2 = PSBTParser(tx2,Seed(mnemonic2, wordlist=bip39.WORDLIST),"test")
|
||||
|
||||
assert pp2.input_amount == 1052818
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import pytest
|
||||
from mock import MagicMock
|
||||
from seedsigner.models.decode_qr import QRType
|
||||
from seedsigner.models.encode_qr import EncodeQR, EncodeQRDensity
|
||||
from seedsigner.models.encode_qr import EncodeQR
|
||||
from seedsigner.models.qr_type import EncodeQRDensity
|
||||
from embit import psbt
|
||||
from binascii import a2b_base64
|
||||
|
||||
|
||||
Reference in New Issue
Block a user