1- From fd51e85693e0d66129133b1f195134aead1cf7d0 Mon Sep 17 00:00:00 2001
2- From: Andrew Chow <achow101- github@achow101.com>
3- Date: Tue, 17 Dec 2019 17:56:05 -0500
4- Subject: [PATCH 2/3 ] Change default simulator multisig
1+ From 038e4b4f5e8128f3910745324332770b0973408c Mon Sep 17 00:00:00 2001
2+ From: Ava Chow <github@achow101.com>
3+ Date: Wed, 1 Oct 2025 13:30:01 -0700
4+ Subject: [PATCH 1/2 ] Change default simulator multisig
55
66---
77 unix/variant/sim_settings.py | 6 +++++-
88 1 file changed, 5 insertions(+), 1 deletion(-)
99
1010diff --git a/unix/variant/sim_settings.py b/unix/variant/sim_settings.py
11- index 2706fb4..f9b533d 100644
11+ index 01392d8f..527d0d9b 100644
1212--- a/unix/variant/sim_settings.py
1313+++ b/unix/variant/sim_settings.py
1414@@ -71,7 +71,11 @@ if '--ms' in sys.argv:
@@ -18,27 +18,28 @@ index 2706fb4..f9b533d 100644
1818- sim_defaults['multisig'] = [['MeMyself', [2, 4], [[3503269483, 'tpubD9429UXFGCTKJ9NdiNK4rC5ygqSUkginycYHccqSg5gkmyQ7PZRHNjk99M6a6Y3NY8ctEUUJvCu6iCCui8Ju3xrHRu3Ez1CKB4ZFoRZDdP9'], [2389277556, 'tpubD97nVL37v5tWyMf9ofh5rznwhh1593WMRg6FT4o6MRJkKWANtwAMHYLrcJFsFmPfYbY1TE1LLQ4KBb84LBPt1ubvFwoosvMkcWJtMwvXgSc'], [3190206587, 'tpubD9ArfXowvGHnuECKdGXVKDMfZVGdephVWg8fWGWStH3VKHzT4ph3A4ZcgXWqFu1F5xGTfxncmrnf3sLC86dup2a8Kx7z3xQ3AgeNTQeFxPa'], [1130956047, 'tpubD8NXmKsmWp3a3DXhbihAYbYLGaRNVdTnr6JoSxxfXYQcmwVtW2hv8QoDwng6JtEonmJoL3cNEwfd2cLXMpGezwZ2vL2dQ7259bueNKj9C8n']], {'ch': 'XTN', 'pp': "45'"}]]
1919+ sim_defaults['multisig'] = [
2020+ ['mstest', [2, 3], [[1130956047, 0, 'tpubDF2rnouQaaYrR9x68P5Jm8WjhCE4atyGiPviFA9ve5iMnYbkTjof2HjzejcQcD7getPusDLPsWJLN2UttzK3pyVgBkRs52MiRZM7ZJ8TrEq'], [1130956047, 1, 'tpubDETRnZNJAqXiVeiL8UMDzCTBAoh3JvZkgXLdb1K2xzpJLepuJ6ka8jnVyRSkVh8Nbbo8u8dobZCsNENmRKipLzHNsS5mccjKSpXgSgavTQe'], [1130956047, 2, 'tpubDF3hdPQ5oDhtYjjaC596pboPii7UZmjqZcBPBRAbb6Bgn9hKoFxb8zWsBfdiCnTq3htUs2Yi2reeG3kMqHzZGZykJQAB5aKrJ8UfiXjmaLD']], {'ft': 8, 'ch': 'XTN', "d": ["48'/1'/0'/0'", "48'/1'/1'/0'", "48'/1'/2'/0'"]}],
21- + ['mstest1', [2, 3], [[1130956047, 0, 'tpubDF2rnouQaaYrUEy2JM1YD3RFzew4onawGM4X2Re67gguTf5CbHonBRiFGe3Xjz7DK88dxBFGf2i7K1hef3PM4cFKyUjcbJXddaY9F5tJBoP '], [1130956047, 1, 'tpubDETRnZNJAqXiVeiL8UMDzCTBAoh3JvZkgXLdb1K2xzpJLepuJ6ka8jnVyRSkVh8Nbbo8u8dobZCsNENmRKipLzHNsS5mccjKSpXgSgavTQe'], [1130956047, 2, 'tpubDF3hdPQ5oDhtYjjaC596pboPii7UZmjqZcBPBRAbb6Bgn9hKoFxb8zWsBfdiCnTq3htUs2Yi2reeG3kMqHzZGZykJQAB5aKrJ8UfiXjmaLD']], {'ft': 14, 'ch': 'XTN', "d": ["48'/1'/0'/0'", "48'/1'/1'/0'", "48'/1'/2'/0'"]}],
22- + ['mstest2', [2, 3], [[1130956047, 0, 'tpubDF2rnouQaaYrXF4noGTv6rQYmx87cQ4GrUdhpvXkhtChwQPbdGTi8GA88NUaSrwZBwNsTkC9bFkkC8vDyGBVVAQTZ2AS6gs68RQXtXcCvkP '], [1130956047, 1, 'tpubDETRnZNJAqXiVeiL8UMDzCTBAoh3JvZkgXLdb1K2xzpJLepuJ6ka8jnVyRSkVh8Nbbo8u8dobZCsNENmRKipLzHNsS5mccjKSpXgSgavTQe'], [1130956047, 2, 'tpubDF3hdPQ5oDhtYjjaC596pboPii7UZmjqZcBPBRAbb6Bgn9hKoFxb8zWsBfdiCnTq3htUs2Yi2reeG3kMqHzZGZykJQAB5aKrJ8UfiXjmaLD']], {'ft': 26, 'ch': 'XTN', "d": ["48'/1'/0'/0'", "48'/1'/1'/0'", "48'/1'/2'/0'"]}],
21+ + ['mstest1', [2, 3], [[1130956047, 0, 'tpubDF2rnouQaaYrR9x68P5Jm8WjhCE4atyGiPviFA9ve5iMnYbkTjof2HjzejcQcD7getPusDLPsWJLN2UttzK3pyVgBkRs52MiRZM7ZJ8TrEq '], [1130956047, 1, 'tpubDETRnZNJAqXiVeiL8UMDzCTBAoh3JvZkgXLdb1K2xzpJLepuJ6ka8jnVyRSkVh8Nbbo8u8dobZCsNENmRKipLzHNsS5mccjKSpXgSgavTQe'], [1130956047, 2, 'tpubDF3hdPQ5oDhtYjjaC596pboPii7UZmjqZcBPBRAbb6Bgn9hKoFxb8zWsBfdiCnTq3htUs2Yi2reeG3kMqHzZGZykJQAB5aKrJ8UfiXjmaLD']], {'ft': 14, 'ch': 'XTN', "d": ["48'/1'/0'/0'", "48'/1'/1'/0'", "48'/1'/2'/0'"]}],
22+ + ['mstest2', [2, 3], [[1130956047, 0, 'tpubDF2rnouQaaYrR9x68P5Jm8WjhCE4atyGiPviFA9ve5iMnYbkTjof2HjzejcQcD7getPusDLPsWJLN2UttzK3pyVgBkRs52MiRZM7ZJ8TrEq '], [1130956047, 1, 'tpubDETRnZNJAqXiVeiL8UMDzCTBAoh3JvZkgXLdb1K2xzpJLepuJ6ka8jnVyRSkVh8Nbbo8u8dobZCsNENmRKipLzHNsS5mccjKSpXgSgavTQe'], [1130956047, 2, 'tpubDF3hdPQ5oDhtYjjaC596pboPii7UZmjqZcBPBRAbb6Bgn9hKoFxb8zWsBfdiCnTq3htUs2Yi2reeG3kMqHzZGZykJQAB5aKrJ8UfiXjmaLD']], {'ft': 26, 'ch': 'XTN', "d": ["48'/1'/0'/0'", "48'/1'/1'/0'", "48'/1'/2'/0'"]}],
2323+ ]
2424 sim_defaults['fee_limit'] = -1
2525
2626 if '--xfp' in sys.argv:
2727- -
28- 2.38.1
28+ 2.51.0
2929
30- From 8b4323c1e393d79d46248dd822ca9aaaeb2b2bc3 Mon Sep 17 00:00:00 2001
30+
31+ From 3f7b6dfcf72788a4a0784eb871462c289e8a747b Mon Sep 17 00:00:00 2001
3132From: Sjors Provoost <sjors@sprovoost.nl>
3233Date: Wed, 23 Jul 2025 10:16:22 +0200
33- Subject: [PATCH] Allow multisigs to share master fingerprint
34+ Subject: [PATCH 2/2 ] Allow multisigs to share master fingerprint
3435
3536Co-Authored-By: Ava Chow <github@achow101.com>
3637---
37- shared/multisig.py | 37 ++++++++++++++++++++++++-------------
38- 1 file changed, 24 insertions(+), 13 deletions(-)
38+ shared/multisig.py | 39 ++++++++++++++++++++++++-- -------------
39+ 1 file changed, 24 insertions(+), 15 deletions(-)
3940
4041diff --git a/shared/multisig.py b/shared/multisig.py
41- index 446998a2..cabb2003 100644
42+ index 1e692d41..6294e9a3 100644
4243--- a/shared/multisig.py
4344+++ b/shared/multisig.py
4445@@ -144,9 +144,9 @@ class MultisigWallet(WalletABC):
@@ -53,7 +54,7 @@ index 446998a2..cabb2003 100644
5354
5455 @classmethod
5556 def render_addr_fmt(cls, addr_fmt):
56- @@ -270 ,7 +270 ,11 @@ class MultisigWallet(WalletABC):
57+ @@ -275 ,7 +275 ,11 @@ class MultisigWallet(WalletABC):
5758
5859 def get_xfp_paths(self):
5960 # return list of lists [xfp, *deriv]
@@ -65,8 +66,8 @@ index 446998a2..cabb2003 100644
6566+ return ret
6667
6768 @classmethod
68- def find_match(cls, M, N, xfp_paths, addr_fmt =None):
69- @@ -305,24 +309,31 @@ class MultisigWallet(WalletABC):
69+ def find_match(cls, M, N, xfp_paths, addr_fmts =None):
70+ @@ -305,24 +309,29 @@ class MultisigWallet(WalletABC):
7071 # the same prefix path per-each xfp, as indicated
7172 # xfp_paths (unordered)?
7273 # - could also check non-prefix part is all non-hardened
@@ -79,35 +80,35 @@ index 446998a2..cabb2003 100644
7980 if x[0] not in self.xfp_paths:
8081 return False
8182- prefix = self.xfp_paths[x[0]]
83+ -
84+ - if len(x) < len(prefix):
85+ - # PSBT specs a path shorter than wallet's xpub
86+ - #print('path len: %d vs %d' % (len(prefix), len(x)))
87+ - return False
88+ -
89+ - comm = len(prefix)
90+ - if tuple(prefix[:comm]) != tuple(x[:comm]):
91+ - # xfp => maps to wrong path
92+ - #print('path mismatch:\n%r\n%r\ncomm=%d' % (prefix[:comm], x[:comm], comm))
8293+ for prefix in self.xfp_paths[x[0]]:
8394+ if len(x) < len(prefix):
8495+ # PSBT specs a path shorter than wallet's xpub
8596+ #print('path len: %d vs %d' % (len(prefix), len(x)))
8697+ return False
87-
88- - if len(x) < len(prefix):
89- - # PSBT specs a path shorter than wallet's xpub
90- - #print('path len: %d vs %d' % (len(prefix), len(x)))
91- - return False
98+ +
9299+ comm = len(prefix)
93100+ if tuple(prefix[:comm]) != tuple(x[:comm]):
94101+ # xfp => maps to wrong path
95- + # But maybe there is another path that does match, so keep going
96102+ #print('path mismatch:\n%r\n%r\ncomm=%d' % (prefix[:comm], x[:comm], comm))
97103+ continue
98104+ else:
99105+ # Found a match, cleanly exit
100106+ break
101107+ else:
102108+ # No match was found
103-
104- - comm = len(prefix)
105- - if tuple(prefix[:comm]) != tuple(x[:comm]):
106- - # xfp => maps to wrong path
107- - #print('path mismatch:\n%r\n%r\ncomm=%d' % (prefix[:comm], x[:comm], comm))
108109 return False
109110
110111 return True
111112- -
112- 2.39.5 (Apple Git-154)
113+ 2.51.0
113114
0 commit comments