SomberNight
7 years ago
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
4 changed files with
21 additions and
7 deletions
-
electrum/plugins/hw_wallet/plugin.py
-
electrum/plugins/keepkey/keepkey.py
-
electrum/plugins/safe_t/safe_t.py
-
electrum/plugins/trezor/trezor.py
|
|
@ -26,7 +26,9 @@ |
|
|
|
|
|
|
|
from electrum.plugin import BasePlugin, hook |
|
|
|
from electrum.i18n import _ |
|
|
|
from electrum.bitcoin import is_address |
|
|
|
from electrum.bitcoin import is_address, TYPE_SCRIPT |
|
|
|
from electrum.util import bfh |
|
|
|
from electrum.transaction import opcodes |
|
|
|
|
|
|
|
|
|
|
|
class HW_PluginBase(BasePlugin): |
|
|
@ -87,3 +89,15 @@ def is_any_tx_output_on_change_branch(tx): |
|
|
|
if index[0] == 1: |
|
|
|
return True |
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
def trezor_validate_op_return_output_and_get_data(_type, address, amount): |
|
|
|
if _type != TYPE_SCRIPT: |
|
|
|
raise Exception("Unexpected output type: {}".format(_type)) |
|
|
|
script = bfh(address) |
|
|
|
if not (script[0] == opcodes.OP_RETURN and |
|
|
|
script[1] == len(script) - 2 and script[1] <= 75): |
|
|
|
raise Exception(_("Only OP_RETURN scripts, with one constant push, are supported.")) |
|
|
|
if amount != 0: |
|
|
|
raise Exception(_("Amount for OP_RETURN output must be zero.")) |
|
|
|
return script[2:] |
|
|
|
|
|
@ -15,7 +15,7 @@ from electrum.wallet import Standard_Wallet |
|
|
|
from electrum.base_wizard import ScriptTypeNotSupported |
|
|
|
|
|
|
|
from ..hw_wallet import HW_PluginBase |
|
|
|
from ..hw_wallet.plugin import is_any_tx_output_on_change_branch |
|
|
|
from ..hw_wallet.plugin import is_any_tx_output_on_change_branch, trezor_validate_op_return_output_and_get_data |
|
|
|
|
|
|
|
|
|
|
|
# TREZOR initialization methods |
|
|
@ -382,7 +382,7 @@ class KeepKeyPlugin(HW_PluginBase): |
|
|
|
txoutputtype.amount = amount |
|
|
|
if _type == TYPE_SCRIPT: |
|
|
|
txoutputtype.script_type = self.types.PAYTOOPRETURN |
|
|
|
txoutputtype.op_return_data = bfh(address)[2:] |
|
|
|
txoutputtype.op_return_data = trezor_validate_op_return_output_and_get_data(_type, address, amount) |
|
|
|
elif _type == TYPE_ADDRESS: |
|
|
|
if is_segwit_address(address): |
|
|
|
txoutputtype.script_type = self.types.PAYTOWITNESS |
|
|
|
|
|
@ -13,7 +13,7 @@ from electrum.keystore import Hardware_KeyStore, is_xpubkey, parse_xpubkey, xtyp |
|
|
|
from electrum.base_wizard import ScriptTypeNotSupported |
|
|
|
|
|
|
|
from ..hw_wallet import HW_PluginBase |
|
|
|
from ..hw_wallet.plugin import is_any_tx_output_on_change_branch |
|
|
|
from ..hw_wallet.plugin import is_any_tx_output_on_change_branch, trezor_validate_op_return_output_and_get_data |
|
|
|
|
|
|
|
|
|
|
|
# Safe-T mini initialization methods |
|
|
@ -453,7 +453,7 @@ class SafeTPlugin(HW_PluginBase): |
|
|
|
txoutputtype.amount = amount |
|
|
|
if _type == TYPE_SCRIPT: |
|
|
|
txoutputtype.script_type = self.types.OutputScriptType.PAYTOOPRETURN |
|
|
|
txoutputtype.op_return_data = bfh(address)[2:] |
|
|
|
txoutputtype.op_return_data = trezor_validate_op_return_output_and_get_data(_type, address, amount) |
|
|
|
elif _type == TYPE_ADDRESS: |
|
|
|
txoutputtype.script_type = self.types.OutputScriptType.PAYTOADDRESS |
|
|
|
txoutputtype.address = address |
|
|
|
|
|
@ -13,7 +13,7 @@ from electrum.keystore import Hardware_KeyStore, is_xpubkey, parse_xpubkey, xtyp |
|
|
|
from electrum.base_wizard import ScriptTypeNotSupported |
|
|
|
|
|
|
|
from ..hw_wallet import HW_PluginBase |
|
|
|
from ..hw_wallet.plugin import is_any_tx_output_on_change_branch |
|
|
|
from ..hw_wallet.plugin import is_any_tx_output_on_change_branch, trezor_validate_op_return_output_and_get_data |
|
|
|
|
|
|
|
|
|
|
|
# TREZOR initialization methods |
|
|
@ -464,7 +464,7 @@ class TrezorPlugin(HW_PluginBase): |
|
|
|
txoutputtype.amount = amount |
|
|
|
if _type == TYPE_SCRIPT: |
|
|
|
txoutputtype.script_type = self.types.OutputScriptType.PAYTOOPRETURN |
|
|
|
txoutputtype.op_return_data = bfh(address)[2:] |
|
|
|
txoutputtype.op_return_data = trezor_validate_op_return_output_and_get_data(_type, address, amount) |
|
|
|
elif _type == TYPE_ADDRESS: |
|
|
|
txoutputtype.script_type = self.types.OutputScriptType.PAYTOADDRESS |
|
|
|
txoutputtype.address = address |
|
|
|