Browse Source

follow-up prev. sanity check OP_RETURN outputs

based on 86c63a3a08
3.2.x
SomberNight 7 years ago
parent
commit
c9c8b7656d
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 16
      electrum/plugins/hw_wallet/plugin.py
  2. 4
      electrum/plugins/keepkey/keepkey.py
  3. 4
      electrum/plugins/safe_t/safe_t.py
  4. 4
      electrum/plugins/trezor/trezor.py

16
electrum/plugins/hw_wallet/plugin.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:]

4
electrum/plugins/keepkey/keepkey.py

@ -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

4
electrum/plugins/safe_t/safe_t.py

@ -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

4
electrum/plugins/trezor/trezor.py

@ -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

Loading…
Cancel
Save