mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-26 09:28:13 +00:00
feat(trezorctl): Support multisig in get-public-node.
This commit is contained in:
parent
6568c36a83
commit
f19e423621
1
python/.changelog.d/2658.added
Normal file
1
python/.changelog.d/2658.added
Normal file
@ -0,0 +1 @@
|
|||||||
|
Support multisig in get-public-node.
|
@ -112,6 +112,7 @@ def get_public_node(
|
|||||||
coin_name: Optional[str] = None,
|
coin_name: Optional[str] = None,
|
||||||
script_type: messages.InputScriptType = messages.InputScriptType.SPENDADDRESS,
|
script_type: messages.InputScriptType = messages.InputScriptType.SPENDADDRESS,
|
||||||
ignore_xpub_magic: bool = False,
|
ignore_xpub_magic: bool = False,
|
||||||
|
multisig_xpub_magic: bool = False,
|
||||||
unlock_path: Optional[List[int]] = None,
|
unlock_path: Optional[List[int]] = None,
|
||||||
unlock_path_mac: Optional[bytes] = None,
|
unlock_path_mac: Optional[bytes] = None,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
@ -130,6 +131,7 @@ def get_public_node(
|
|||||||
coin_name=coin_name,
|
coin_name=coin_name,
|
||||||
script_type=script_type,
|
script_type=script_type,
|
||||||
ignore_xpub_magic=ignore_xpub_magic,
|
ignore_xpub_magic=ignore_xpub_magic,
|
||||||
|
multisig_xpub_magic=multisig_xpub_magic,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ if TYPE_CHECKING:
|
|||||||
from ..client import TrezorClient
|
from ..client import TrezorClient
|
||||||
|
|
||||||
PURPOSE_BIP44 = 44
|
PURPOSE_BIP44 = 44
|
||||||
|
PURPOSE_BIP45 = 45
|
||||||
PURPOSE_BIP48 = 48
|
PURPOSE_BIP48 = 48
|
||||||
PURPOSE_BIP49 = 49
|
PURPOSE_BIP49 = 49
|
||||||
PURPOSE_BIP84 = 84
|
PURPOSE_BIP84 = 84
|
||||||
@ -137,6 +138,14 @@ def guess_script_type_from_path(address_n: List[int]) -> messages.InputScriptTyp
|
|||||||
return messages.InputScriptType.SPENDADDRESS
|
return messages.InputScriptType.SPENDADDRESS
|
||||||
|
|
||||||
|
|
||||||
|
def guess_multisig_from_path(address_n: List[int]) -> bool:
|
||||||
|
if len(address_n) < 1 or not tools.is_hardened(address_n[0]):
|
||||||
|
return False
|
||||||
|
|
||||||
|
purpose = tools.unharden(address_n[0])
|
||||||
|
return purpose in (PURPOSE_BIP45, PURPOSE_BIP48)
|
||||||
|
|
||||||
|
|
||||||
def get_unlock_path(address_n: List[int]) -> Optional[List[int]]:
|
def get_unlock_path(address_n: List[int]) -> Optional[List[int]]:
|
||||||
if address_n and address_n[0] == tools.H_(10025):
|
if address_n and address_n[0] == tools.H_(10025):
|
||||||
return address_n[:1]
|
return address_n[:1]
|
||||||
@ -237,6 +246,7 @@ def get_address(
|
|||||||
@click.option("-e", "--curve")
|
@click.option("-e", "--curve")
|
||||||
@click.option("-t", "--script-type", type=ChoiceType(INPUT_SCRIPTS))
|
@click.option("-t", "--script-type", type=ChoiceType(INPUT_SCRIPTS))
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-m", "--multisig", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_public_node(
|
def get_public_node(
|
||||||
client: "TrezorClient",
|
client: "TrezorClient",
|
||||||
@ -245,11 +255,13 @@ def get_public_node(
|
|||||||
curve: Optional[str],
|
curve: Optional[str],
|
||||||
script_type: Optional[messages.InputScriptType],
|
script_type: Optional[messages.InputScriptType],
|
||||||
show_display: bool,
|
show_display: bool,
|
||||||
|
multisig: bool,
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Get public node of given path."""
|
"""Get public node of given path."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
if script_type is None:
|
if script_type is None:
|
||||||
script_type = guess_script_type_from_path(address_n)
|
script_type = guess_script_type_from_path(address_n)
|
||||||
|
multisig = multisig or guess_multisig_from_path(address_n)
|
||||||
result = btc.get_public_node(
|
result = btc.get_public_node(
|
||||||
client,
|
client,
|
||||||
address_n,
|
address_n,
|
||||||
@ -257,6 +269,7 @@ def get_public_node(
|
|||||||
show_display=show_display,
|
show_display=show_display,
|
||||||
coin_name=coin,
|
coin_name=coin,
|
||||||
script_type=script_type,
|
script_type=script_type,
|
||||||
|
multisig_xpub_magic=multisig,
|
||||||
unlock_path=get_unlock_path(address_n),
|
unlock_path=get_unlock_path(address_n),
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
|
Loading…
Reference in New Issue
Block a user