mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 04:18:10 +00:00
feat(python): allow for chunkifying addresses in trezorlib functions and CLI
This commit is contained in:
parent
04e3b02030
commit
68013bdb1b
@ -28,10 +28,15 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
@expect(messages.BinanceAddress, field="address", ret_type=str)
|
@expect(messages.BinanceAddress, field="address", ret_type=str)
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient", address_n: "Address", show_display: bool = False
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
show_display: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.BinanceGetAddress(address_n=address_n, show_display=show_display)
|
messages.BinanceGetAddress(
|
||||||
|
address_n=address_n, show_display=show_display, chunkify=chunkify
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -46,12 +51,13 @@ def get_public_key(
|
|||||||
|
|
||||||
@session
|
@session
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address_n: "Address", tx_json: dict
|
client: "TrezorClient", address_n: "Address", tx_json: dict, chunkify: bool = False
|
||||||
) -> messages.BinanceSignedTx:
|
) -> messages.BinanceSignedTx:
|
||||||
msg = tx_json["msgs"][0]
|
msg = tx_json["msgs"][0]
|
||||||
tx_msg = tx_json.copy()
|
tx_msg = tx_json.copy()
|
||||||
tx_msg["msg_count"] = 1
|
tx_msg["msg_count"] = 1
|
||||||
tx_msg["address_n"] = address_n
|
tx_msg["address_n"] = address_n
|
||||||
|
tx_msg["chunkify"] = chunkify
|
||||||
envelope = dict_to_proto(messages.BinanceSignTx, tx_msg)
|
envelope = dict_to_proto(messages.BinanceSignTx, tx_msg)
|
||||||
|
|
||||||
response = client.call(envelope)
|
response = client.call(envelope)
|
||||||
|
@ -152,6 +152,7 @@ def get_authenticated_address(
|
|||||||
ignore_xpub_magic: bool = False,
|
ignore_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,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
if unlock_path:
|
if unlock_path:
|
||||||
res = client.call(
|
res = client.call(
|
||||||
@ -168,6 +169,7 @@ def get_authenticated_address(
|
|||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
script_type=script_type,
|
script_type=script_type,
|
||||||
ignore_xpub_magic=ignore_xpub_magic,
|
ignore_xpub_magic=ignore_xpub_magic,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -781,6 +781,7 @@ def get_address(
|
|||||||
network_id: int = NETWORK_IDS["mainnet"],
|
network_id: int = NETWORK_IDS["mainnet"],
|
||||||
show_display: bool = False,
|
show_display: bool = False,
|
||||||
derivation_type: messages.CardanoDerivationType = messages.CardanoDerivationType.ICARUS,
|
derivation_type: messages.CardanoDerivationType = messages.CardanoDerivationType.ICARUS,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.CardanoGetAddress(
|
messages.CardanoGetAddress(
|
||||||
@ -789,6 +790,7 @@ def get_address(
|
|||||||
network_id=network_id,
|
network_id=network_id,
|
||||||
show_display=show_display,
|
show_display=show_display,
|
||||||
derivation_type=derivation_type,
|
derivation_type=derivation_type,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -848,6 +850,7 @@ def sign_tx(
|
|||||||
additional_witness_requests: Sequence[Path] = (),
|
additional_witness_requests: Sequence[Path] = (),
|
||||||
derivation_type: messages.CardanoDerivationType = messages.CardanoDerivationType.ICARUS,
|
derivation_type: messages.CardanoDerivationType = messages.CardanoDerivationType.ICARUS,
|
||||||
include_network_id: bool = False,
|
include_network_id: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
UNEXPECTED_RESPONSE_ERROR = exceptions.TrezorException("Unexpected response")
|
UNEXPECTED_RESPONSE_ERROR = exceptions.TrezorException("Unexpected response")
|
||||||
|
|
||||||
@ -884,6 +887,7 @@ def sign_tx(
|
|||||||
witness_requests_count=len(witness_requests),
|
witness_requests_count=len(witness_requests),
|
||||||
derivation_type=derivation_type,
|
derivation_type=derivation_type,
|
||||||
include_network_id=include_network_id,
|
include_network_id=include_network_id,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if not isinstance(response, messages.CardanoTxItemAck):
|
if not isinstance(response, messages.CardanoTxItemAck):
|
||||||
|
@ -38,11 +38,14 @@ def cli() -> None:
|
|||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(client: "TrezorClient", address: str, show_display: bool) -> str:
|
def get_address(
|
||||||
|
client: "TrezorClient", address: str, show_display: bool, chunkify: bool
|
||||||
|
) -> str:
|
||||||
"""Get Binance address for specified path."""
|
"""Get Binance address for specified path."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return binance.get_address(client, address_n, show_display)
|
return binance.get_address(client, address_n, show_display, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@ -59,13 +62,14 @@ def get_public_key(client: "TrezorClient", address: str, show_display: bool) ->
|
|||||||
@click.argument("file", type=click.File("r"))
|
@click.argument("file", type=click.File("r"))
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address: str, file: TextIO
|
client: "TrezorClient", address: str, file: TextIO, chunkify: bool
|
||||||
) -> "messages.BinanceSignedTx":
|
) -> "messages.BinanceSignedTx":
|
||||||
"""Sign Binance transaction.
|
"""Sign Binance transaction.
|
||||||
|
|
||||||
Transaction must be provided as a JSON file.
|
Transaction must be provided as a JSON file.
|
||||||
"""
|
"""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return binance.sign_tx(client, address_n, json.load(file))
|
return binance.sign_tx(client, address_n, json.load(file), chunkify=chunkify)
|
||||||
|
@ -167,6 +167,7 @@ def cli() -> None:
|
|||||||
type=int,
|
type=int,
|
||||||
default=2,
|
default=2,
|
||||||
)
|
)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient",
|
client: "TrezorClient",
|
||||||
@ -177,6 +178,7 @@ def get_address(
|
|||||||
multisig_xpub: List[str],
|
multisig_xpub: List[str],
|
||||||
multisig_threshold: Optional[int],
|
multisig_threshold: Optional[int],
|
||||||
multisig_suffix_length: int,
|
multisig_suffix_length: int,
|
||||||
|
chunkify: bool,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Get address for specified path.
|
"""Get address for specified path.
|
||||||
|
|
||||||
@ -225,6 +227,7 @@ def get_address(
|
|||||||
script_type=script_type,
|
script_type=script_type,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
unlock_path=get_unlock_path(address_n),
|
unlock_path=get_unlock_path(address_n),
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -366,9 +369,10 @@ def get_descriptor(
|
|||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option("-c", "--coin", is_flag=True, hidden=True, expose_value=False)
|
@click.option("-c", "--coin", is_flag=True, hidden=True, expose_value=False)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@click.argument("json_file", type=click.File())
|
@click.argument("json_file", type=click.File())
|
||||||
@with_client
|
@with_client
|
||||||
def sign_tx(client: "TrezorClient", json_file: TextIO) -> None:
|
def sign_tx(client: "TrezorClient", json_file: TextIO, chunkify: bool) -> None:
|
||||||
"""Sign transaction.
|
"""Sign transaction.
|
||||||
|
|
||||||
Transaction data must be provided in a JSON file. See `transaction-format.md` for
|
Transaction data must be provided in a JSON file. See `transaction-format.md` for
|
||||||
@ -398,6 +402,7 @@ def sign_tx(client: "TrezorClient", json_file: TextIO) -> None:
|
|||||||
inputs,
|
inputs,
|
||||||
outputs,
|
outputs,
|
||||||
prev_txes=prev_txes,
|
prev_txes=prev_txes,
|
||||||
|
chunkify=chunkify,
|
||||||
**details,
|
**details,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ def cli() -> None:
|
|||||||
default=messages.CardanoDerivationType.ICARUS,
|
default=messages.CardanoDerivationType.ICARUS,
|
||||||
)
|
)
|
||||||
@click.option("-i", "--include-network-id", is_flag=True)
|
@click.option("-i", "--include-network-id", is_flag=True)
|
||||||
|
@click.option("-C", "chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient",
|
client: "TrezorClient",
|
||||||
@ -70,6 +71,7 @@ def sign_tx(
|
|||||||
testnet: str,
|
testnet: str,
|
||||||
derivation_type: messages.CardanoDerivationType,
|
derivation_type: messages.CardanoDerivationType,
|
||||||
include_network_id: bool,
|
include_network_id: bool,
|
||||||
|
chunkify: bool,
|
||||||
) -> cardano.SignTxResponse:
|
) -> cardano.SignTxResponse:
|
||||||
"""Sign Cardano transaction."""
|
"""Sign Cardano transaction."""
|
||||||
transaction = json.load(file)
|
transaction = json.load(file)
|
||||||
@ -143,6 +145,7 @@ def sign_tx(
|
|||||||
additional_witness_requests,
|
additional_witness_requests,
|
||||||
derivation_type=derivation_type,
|
derivation_type=derivation_type,
|
||||||
include_network_id=include_network_id,
|
include_network_id=include_network_id,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
sign_tx_response["tx_hash"] = sign_tx_response["tx_hash"].hex()
|
sign_tx_response["tx_hash"] = sign_tx_response["tx_hash"].hex()
|
||||||
@ -200,6 +203,7 @@ def sign_tx(
|
|||||||
type=ChoiceType({m.name: m for m in messages.CardanoDerivationType}),
|
type=ChoiceType({m.name: m for m in messages.CardanoDerivationType}),
|
||||||
default=messages.CardanoDerivationType.ICARUS,
|
default=messages.CardanoDerivationType.ICARUS,
|
||||||
)
|
)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient",
|
client: "TrezorClient",
|
||||||
@ -217,6 +221,7 @@ def get_address(
|
|||||||
show_display: bool,
|
show_display: bool,
|
||||||
testnet: str,
|
testnet: str,
|
||||||
derivation_type: messages.CardanoDerivationType,
|
derivation_type: messages.CardanoDerivationType,
|
||||||
|
chunkify: bool,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""
|
"""
|
||||||
Get Cardano address.
|
Get Cardano address.
|
||||||
@ -260,6 +265,7 @@ def get_address(
|
|||||||
network_id,
|
network_id,
|
||||||
show_display,
|
show_display,
|
||||||
derivation_type=derivation_type,
|
derivation_type=derivation_type,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,12 +49,19 @@ def get_public_key(client: "TrezorClient", address: str, show_display: bool) ->
|
|||||||
@click.argument("file", type=click.File("r"))
|
@click.argument("file", type=click.File("r"))
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def sign_transaction(
|
def sign_transaction(
|
||||||
client: "TrezorClient", address: str, file: TextIO
|
client: "TrezorClient", address: str, file: TextIO, chunkify: bool
|
||||||
) -> "messages.EosSignedTx":
|
) -> "messages.EosSignedTx":
|
||||||
"""Sign EOS transaction."""
|
"""Sign EOS transaction."""
|
||||||
tx_json = json.load(file)
|
tx_json = json.load(file)
|
||||||
|
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return eos.sign_tx(client, address_n, tx_json["transaction"], tx_json["chain_id"])
|
return eos.sign_tx(
|
||||||
|
client,
|
||||||
|
address_n,
|
||||||
|
tx_json["transaction"],
|
||||||
|
tx_json["chain_id"],
|
||||||
|
chunkify=chunkify,
|
||||||
|
)
|
||||||
|
@ -273,12 +273,15 @@ def cli(
|
|||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(client: "TrezorClient", address: str, show_display: bool) -> str:
|
def get_address(
|
||||||
|
client: "TrezorClient", address: str, show_display: bool, chunkify: bool
|
||||||
|
) -> str:
|
||||||
"""Get Ethereum address in hex encoding."""
|
"""Get Ethereum address in hex encoding."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
network = ethereum.network_from_address_n(address_n, DEFINITIONS_SOURCE)
|
network = ethereum.network_from_address_n(address_n, DEFINITIONS_SOURCE)
|
||||||
return ethereum.get_address(client, address_n, show_display, network)
|
return ethereum.get_address(client, address_n, show_display, network, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@ -344,6 +347,7 @@ def get_public_node(client: "TrezorClient", address: str, show_display: bool) ->
|
|||||||
callback=_list_units,
|
callback=_list_units,
|
||||||
expose_value=False,
|
expose_value=False,
|
||||||
)
|
)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@click.argument("to_address")
|
@click.argument("to_address")
|
||||||
@click.argument("amount", callback=_amount_to_int)
|
@click.argument("amount", callback=_amount_to_int)
|
||||||
@with_client
|
@with_client
|
||||||
@ -364,6 +368,7 @@ def sign_tx(
|
|||||||
max_priority_fee: Optional[int],
|
max_priority_fee: Optional[int],
|
||||||
access_list: List[ethereum.messages.EthereumAccessList],
|
access_list: List[ethereum.messages.EthereumAccessList],
|
||||||
eip2718_type: Optional[int],
|
eip2718_type: Optional[int],
|
||||||
|
chunkify: bool,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Sign (and optionally publish) Ethereum transaction.
|
"""Sign (and optionally publish) Ethereum transaction.
|
||||||
|
|
||||||
@ -462,6 +467,7 @@ def sign_tx(
|
|||||||
max_priority_fee=max_priority_fee,
|
max_priority_fee=max_priority_fee,
|
||||||
access_list=access_list,
|
access_list=access_list,
|
||||||
definitions=defs,
|
definitions=defs,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
if gas_price is None:
|
if gas_price is None:
|
||||||
@ -479,6 +485,7 @@ def sign_tx(
|
|||||||
data=data_bytes,
|
data=data_bytes,
|
||||||
chain_id=chain_id,
|
chain_id=chain_id,
|
||||||
definitions=defs,
|
definitions=defs,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
to = ethereum.decode_hex(to_address)
|
to = ethereum.decode_hex(to_address)
|
||||||
|
@ -41,16 +41,18 @@ def cli() -> None:
|
|||||||
type=ChoiceType({m.name: m for m in messages.MoneroNetworkType}),
|
type=ChoiceType({m.name: m for m in messages.MoneroNetworkType}),
|
||||||
default=messages.MoneroNetworkType.MAINNET,
|
default=messages.MoneroNetworkType.MAINNET,
|
||||||
)
|
)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient",
|
client: "TrezorClient",
|
||||||
address: str,
|
address: str,
|
||||||
show_display: bool,
|
show_display: bool,
|
||||||
network_type: messages.MoneroNetworkType,
|
network_type: messages.MoneroNetworkType,
|
||||||
|
chunkify: bool,
|
||||||
) -> bytes:
|
) -> bytes:
|
||||||
"""Get Monero address for specified path."""
|
"""Get Monero address for specified path."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return monero.get_address(client, address_n, show_display, network_type)
|
return monero.get_address(client, address_n, show_display, network_type, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
|
@ -38,13 +38,18 @@ def cli() -> None:
|
|||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-N", "--network", type=int, default=0x68)
|
@click.option("-N", "--network", type=int, default=0x68)
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient", address: str, network: int, show_display: bool
|
client: "TrezorClient",
|
||||||
|
address: str,
|
||||||
|
network: int,
|
||||||
|
show_display: bool,
|
||||||
|
chunkify: bool,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Get NEM address for specified path."""
|
"""Get NEM address for specified path."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return nem.get_address(client, address_n, network, show_display)
|
return nem.get_address(client, address_n, network, show_display, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@ -52,16 +57,21 @@ def get_address(
|
|||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
||||||
@click.option("-b", "--broadcast", help="NIS to announce transaction to")
|
@click.option("-b", "--broadcast", help="NIS to announce transaction to")
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address: str, file: TextIO, broadcast: Optional[str]
|
client: "TrezorClient",
|
||||||
|
address: str,
|
||||||
|
file: TextIO,
|
||||||
|
broadcast: Optional[str],
|
||||||
|
chunkify: bool,
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Sign (and optionally broadcast) NEM transaction.
|
"""Sign (and optionally broadcast) NEM transaction.
|
||||||
|
|
||||||
Transaction file is expected in the NIS (RequestPrepareAnnounce) format.
|
Transaction file is expected in the NIS (RequestPrepareAnnounce) format.
|
||||||
"""
|
"""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
transaction = nem.sign_tx(client, address_n, json.load(file))
|
transaction = nem.sign_tx(client, address_n, json.load(file), chunkify=chunkify)
|
||||||
|
|
||||||
payload = {"data": transaction.data.hex(), "signature": transaction.signature.hex()}
|
payload = {"data": transaction.data.hex(), "signature": transaction.signature.hex()}
|
||||||
|
|
||||||
|
@ -36,24 +36,28 @@ def cli() -> None:
|
|||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(client: "TrezorClient", address: str, show_display: bool) -> str:
|
def get_address(
|
||||||
|
client: "TrezorClient", address: str, show_display: bool, chunkify: bool
|
||||||
|
) -> str:
|
||||||
"""Get Ripple address"""
|
"""Get Ripple address"""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return ripple.get_address(client, address_n, show_display)
|
return ripple.get_address(client, address_n, show_display, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.argument("file", type=click.File("r"))
|
@click.argument("file", type=click.File("r"))
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def sign_tx(client: "TrezorClient", address: str, file: TextIO) -> None:
|
def sign_tx(client: "TrezorClient", address: str, file: TextIO, chunkify: bool) -> None:
|
||||||
"""Sign Ripple transaction"""
|
"""Sign Ripple transaction"""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
msg = ripple.create_sign_tx_msg(json.load(file))
|
msg = ripple.create_sign_tx_msg(json.load(file))
|
||||||
|
|
||||||
result = ripple.sign_tx(client, address_n, msg)
|
result = ripple.sign_tx(client, address_n, msg, chunkify=chunkify)
|
||||||
click.echo("Signature:")
|
click.echo("Signature:")
|
||||||
click.echo(result.signature.hex())
|
click.echo(result.signature.hex())
|
||||||
click.echo()
|
click.echo()
|
||||||
|
@ -51,11 +51,14 @@ def cli() -> None:
|
|||||||
default=stellar.DEFAULT_BIP32_PATH,
|
default=stellar.DEFAULT_BIP32_PATH,
|
||||||
)
|
)
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(client: "TrezorClient", address: str, show_display: bool) -> str:
|
def get_address(
|
||||||
|
client: "TrezorClient", address: str, show_display: bool, chunkify: bool
|
||||||
|
) -> str:
|
||||||
"""Get Stellar public address."""
|
"""Get Stellar public address."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return stellar.get_address(client, address_n, show_display)
|
return stellar.get_address(client, address_n, show_display, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
|
@ -36,11 +36,14 @@ def cli() -> None:
|
|||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-d", "--show-display", is_flag=True)
|
@click.option("-d", "--show-display", is_flag=True)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def get_address(client: "TrezorClient", address: str, show_display: bool) -> str:
|
def get_address(
|
||||||
|
client: "TrezorClient", address: str, show_display: bool, chunkify: bool
|
||||||
|
) -> str:
|
||||||
"""Get Tezos address for specified path."""
|
"""Get Tezos address for specified path."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
return tezos.get_address(client, address_n, show_display)
|
return tezos.get_address(client, address_n, show_display, chunkify)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@ -57,11 +60,12 @@ def get_public_key(client: "TrezorClient", address: str, show_display: bool) ->
|
|||||||
@click.argument("file", type=click.File("r"))
|
@click.argument("file", type=click.File("r"))
|
||||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||||
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
@click.option("-f", "--file", "_ignore", is_flag=True, hidden=True, expose_value=False)
|
||||||
|
@click.option("-C", "--chunkify", is_flag=True)
|
||||||
@with_client
|
@with_client
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address: str, file: TextIO
|
client: "TrezorClient", address: str, file: TextIO, chunkify: bool
|
||||||
) -> messages.TezosSignedTx:
|
) -> messages.TezosSignedTx:
|
||||||
"""Sign Tezos transaction."""
|
"""Sign Tezos transaction."""
|
||||||
address_n = tools.parse_path(address)
|
address_n = tools.parse_path(address)
|
||||||
msg = protobuf.dict_to_proto(messages.TezosSignTx, json.load(file))
|
msg = protobuf.dict_to_proto(messages.TezosSignTx, json.load(file))
|
||||||
return tezos.sign_tx(client, address_n, msg)
|
return tezos.sign_tx(client, address_n, msg, chunkify=chunkify)
|
||||||
|
@ -331,7 +331,11 @@ def get_public_key(
|
|||||||
|
|
||||||
@session
|
@session
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address: "Address", transaction: dict, chain_id: str
|
client: "TrezorClient",
|
||||||
|
address: "Address",
|
||||||
|
transaction: dict,
|
||||||
|
chain_id: str,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> messages.EosSignedTx:
|
) -> messages.EosSignedTx:
|
||||||
header, actions = parse_transaction_json(transaction)
|
header, actions = parse_transaction_json(transaction)
|
||||||
|
|
||||||
@ -340,6 +344,7 @@ def sign_tx(
|
|||||||
chain_id=bytes.fromhex(chain_id),
|
chain_id=bytes.fromhex(chain_id),
|
||||||
header=header,
|
header=header,
|
||||||
num_actions=len(actions),
|
num_actions=len(actions),
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
response = client.call(msg)
|
response = client.call(msg)
|
||||||
|
@ -167,12 +167,14 @@ def get_address(
|
|||||||
n: "Address",
|
n: "Address",
|
||||||
show_display: bool = False,
|
show_display: bool = False,
|
||||||
encoded_network: Optional[bytes] = None,
|
encoded_network: Optional[bytes] = None,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.EthereumGetAddress(
|
messages.EthereumGetAddress(
|
||||||
address_n=n,
|
address_n=n,
|
||||||
show_display=show_display,
|
show_display=show_display,
|
||||||
encoded_network=encoded_network,
|
encoded_network=encoded_network,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -199,6 +201,7 @@ def sign_tx(
|
|||||||
chain_id: Optional[int] = None,
|
chain_id: Optional[int] = None,
|
||||||
tx_type: Optional[int] = None,
|
tx_type: Optional[int] = None,
|
||||||
definitions: Optional[messages.EthereumDefinitions] = None,
|
definitions: Optional[messages.EthereumDefinitions] = None,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> Tuple[int, bytes, bytes]:
|
) -> Tuple[int, bytes, bytes]:
|
||||||
if chain_id is None:
|
if chain_id is None:
|
||||||
raise exceptions.TrezorException("Chain ID cannot be undefined")
|
raise exceptions.TrezorException("Chain ID cannot be undefined")
|
||||||
@ -213,6 +216,7 @@ def sign_tx(
|
|||||||
chain_id=chain_id,
|
chain_id=chain_id,
|
||||||
tx_type=tx_type,
|
tx_type=tx_type,
|
||||||
definitions=definitions,
|
definitions=definitions,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
if data is None:
|
if data is None:
|
||||||
@ -258,6 +262,7 @@ def sign_tx_eip1559(
|
|||||||
max_priority_fee: int,
|
max_priority_fee: int,
|
||||||
access_list: Optional[List[messages.EthereumAccessList]] = None,
|
access_list: Optional[List[messages.EthereumAccessList]] = None,
|
||||||
definitions: Optional[messages.EthereumDefinitions] = None,
|
definitions: Optional[messages.EthereumDefinitions] = None,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> Tuple[int, bytes, bytes]:
|
) -> Tuple[int, bytes, bytes]:
|
||||||
length = len(data)
|
length = len(data)
|
||||||
data, chunk = data[1024:], data[:1024]
|
data, chunk = data[1024:], data[:1024]
|
||||||
@ -274,6 +279,7 @@ def sign_tx_eip1559(
|
|||||||
data_length=length,
|
data_length=length,
|
||||||
data_initial_chunk=chunk,
|
data_initial_chunk=chunk,
|
||||||
definitions=definitions,
|
definitions=definitions,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
response = client.call(msg)
|
response = client.call(msg)
|
||||||
|
@ -37,10 +37,14 @@ def get_address(
|
|||||||
n: "Address",
|
n: "Address",
|
||||||
show_display: bool = False,
|
show_display: bool = False,
|
||||||
network_type: messages.MoneroNetworkType = messages.MoneroNetworkType.MAINNET,
|
network_type: messages.MoneroNetworkType = messages.MoneroNetworkType.MAINNET,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.MoneroGetAddress(
|
messages.MoneroGetAddress(
|
||||||
address_n=n, show_display=show_display, network_type=network_type
|
address_n=n,
|
||||||
|
show_display=show_display,
|
||||||
|
network_type=network_type,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -174,10 +174,11 @@ def fill_transaction_by_type(msg: messages.NEMSignTx, transaction: dict) -> None
|
|||||||
raise ValueError("Unknown transaction type")
|
raise ValueError("Unknown transaction type")
|
||||||
|
|
||||||
|
|
||||||
def create_sign_tx(transaction: dict) -> messages.NEMSignTx:
|
def create_sign_tx(transaction: dict, chunkify: bool = False) -> messages.NEMSignTx:
|
||||||
msg = messages.NEMSignTx(
|
msg = messages.NEMSignTx(
|
||||||
transaction=create_transaction_common(transaction),
|
transaction=create_transaction_common(transaction),
|
||||||
cosigning=transaction["type"] == TYPE_MULTISIG_SIGNATURE,
|
cosigning=transaction["type"] == TYPE_MULTISIG_SIGNATURE,
|
||||||
|
chunkify=chunkify,
|
||||||
)
|
)
|
||||||
|
|
||||||
if transaction["type"] in (TYPE_MULTISIG_SIGNATURE, TYPE_MULTISIG):
|
if transaction["type"] in (TYPE_MULTISIG_SIGNATURE, TYPE_MULTISIG):
|
||||||
@ -197,17 +198,25 @@ def create_sign_tx(transaction: dict) -> messages.NEMSignTx:
|
|||||||
|
|
||||||
@expect(messages.NEMAddress, field="address", ret_type=str)
|
@expect(messages.NEMAddress, field="address", ret_type=str)
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient", n: "Address", network: int, show_display: bool = False
|
client: "TrezorClient",
|
||||||
|
n: "Address",
|
||||||
|
network: int,
|
||||||
|
show_display: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.NEMGetAddress(address_n=n, network=network, show_display=show_display)
|
messages.NEMGetAddress(
|
||||||
|
address_n=n, network=network, show_display=show_display, chunkify=chunkify
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@expect(messages.NEMSignedTx)
|
@expect(messages.NEMSignedTx)
|
||||||
def sign_tx(client: "TrezorClient", n: "Address", transaction: dict) -> "MessageType":
|
def sign_tx(
|
||||||
|
client: "TrezorClient", n: "Address", transaction: dict, chunkify: bool = False
|
||||||
|
) -> "MessageType":
|
||||||
try:
|
try:
|
||||||
msg = create_sign_tx(transaction)
|
msg = create_sign_tx(transaction, chunkify=chunkify)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
raise exceptions.TrezorException("Failed to encode transaction") from e
|
raise exceptions.TrezorException("Failed to encode transaction") from e
|
||||||
|
|
||||||
|
@ -31,18 +31,27 @@ REQUIRED_PAYMENT_FIELDS = ("Amount", "Destination")
|
|||||||
|
|
||||||
@expect(messages.RippleAddress, field="address", ret_type=str)
|
@expect(messages.RippleAddress, field="address", ret_type=str)
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient", address_n: "Address", show_display: bool = False
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
show_display: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.RippleGetAddress(address_n=address_n, show_display=show_display)
|
messages.RippleGetAddress(
|
||||||
|
address_n=address_n, show_display=show_display, chunkify=chunkify
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@expect(messages.RippleSignedTx)
|
@expect(messages.RippleSignedTx)
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address_n: "Address", msg: messages.RippleSignTx
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
msg: messages.RippleSignTx,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
msg.address_n = address_n
|
msg.address_n = address_n
|
||||||
|
msg.chunkify = chunkify
|
||||||
return client.call(msg)
|
return client.call(msg)
|
||||||
|
|
||||||
|
|
||||||
|
@ -324,10 +324,15 @@ def _read_asset(asset: "Asset") -> messages.StellarAsset:
|
|||||||
|
|
||||||
@expect(messages.StellarAddress, field="address", ret_type=str)
|
@expect(messages.StellarAddress, field="address", ret_type=str)
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient", address_n: "Address", show_display: bool = False
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
show_display: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.StellarGetAddress(address_n=address_n, show_display=show_display)
|
messages.StellarGetAddress(
|
||||||
|
address_n=address_n, show_display=show_display, chunkify=chunkify
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,25 +27,39 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
@expect(messages.TezosAddress, field="address", ret_type=str)
|
@expect(messages.TezosAddress, field="address", ret_type=str)
|
||||||
def get_address(
|
def get_address(
|
||||||
client: "TrezorClient", address_n: "Address", show_display: bool = False
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
show_display: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.TezosGetAddress(address_n=address_n, show_display=show_display)
|
messages.TezosGetAddress(
|
||||||
|
address_n=address_n, show_display=show_display, chunkify=chunkify
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@expect(messages.TezosPublicKey, field="public_key", ret_type=str)
|
@expect(messages.TezosPublicKey, field="public_key", ret_type=str)
|
||||||
def get_public_key(
|
def get_public_key(
|
||||||
client: "TrezorClient", address_n: "Address", show_display: bool = False
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
show_display: bool = False,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
return client.call(
|
return client.call(
|
||||||
messages.TezosGetPublicKey(address_n=address_n, show_display=show_display)
|
messages.TezosGetPublicKey(
|
||||||
|
address_n=address_n, show_display=show_display, chunkify=chunkify
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@expect(messages.TezosSignedTx)
|
@expect(messages.TezosSignedTx)
|
||||||
def sign_tx(
|
def sign_tx(
|
||||||
client: "TrezorClient", address_n: "Address", sign_tx_msg: messages.TezosSignTx
|
client: "TrezorClient",
|
||||||
|
address_n: "Address",
|
||||||
|
sign_tx_msg: messages.TezosSignTx,
|
||||||
|
chunkify: bool = False,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
sign_tx_msg.address_n = address_n
|
sign_tx_msg.address_n = address_n
|
||||||
|
sign_tx_msg.chunkify = chunkify
|
||||||
return client.call(sign_tx_msg)
|
return client.call(sign_tx_msg)
|
||||||
|
Loading…
Reference in New Issue
Block a user