mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-18 13:38:12 +00:00
wallet/signing: segwit has priority over force_bip143
This commit only rearranges the `if` main branch, so the segwit branch has priority over bip143. Since Bitcoin Gold is allowing both segwit and forcing bip143, the bitcoin gold segwit transactions were failing. updates #147
This commit is contained in:
parent
c827607eec
commit
2dec30828b
@ -175,7 +175,30 @@ async def sign_tx(tx: SignTx, root: bip32.HDNode):
|
|||||||
key_sign = None
|
key_sign = None
|
||||||
key_sign_pub = None
|
key_sign_pub = None
|
||||||
|
|
||||||
if coin.force_bip143:
|
if segwit[i_sign]:
|
||||||
|
# STAGE_REQUEST_SEGWIT_INPUT
|
||||||
|
txi_sign = await request_tx_input(tx_req, i_sign)
|
||||||
|
|
||||||
|
is_segwit = (txi_sign.script_type == InputScriptType.SPENDWITNESS or
|
||||||
|
txi_sign.script_type == InputScriptType.SPENDP2SHWITNESS)
|
||||||
|
if not is_segwit:
|
||||||
|
raise SigningError(FailureType.ProcessError,
|
||||||
|
'Transaction has changed during signing')
|
||||||
|
input_check_wallet_path(txi_sign, wallet_path)
|
||||||
|
|
||||||
|
key_sign = node_derive(root, txi_sign.address_n)
|
||||||
|
key_sign_pub = key_sign.public_key()
|
||||||
|
txi_sign.script_sig = input_derive_script(coin, txi_sign, key_sign_pub)
|
||||||
|
|
||||||
|
w_txi = bytearray_with_cap(
|
||||||
|
7 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4)
|
||||||
|
if i_sign == 0: # serializing first input => prepend headers
|
||||||
|
write_bytes(w_txi, get_tx_header(tx, True))
|
||||||
|
write_tx_input(w_txi, txi_sign)
|
||||||
|
tx_ser.serialized_tx = w_txi
|
||||||
|
tx_req.serialized = tx_ser
|
||||||
|
|
||||||
|
elif coin.force_bip143:
|
||||||
# STAGE_REQUEST_SEGWIT_INPUT
|
# STAGE_REQUEST_SEGWIT_INPUT
|
||||||
txi_sign = await request_tx_input(tx_req, i_sign)
|
txi_sign = await request_tx_input(tx_req, i_sign)
|
||||||
input_check_wallet_path(txi_sign, wallet_path)
|
input_check_wallet_path(txi_sign, wallet_path)
|
||||||
@ -212,29 +235,6 @@ async def sign_tx(tx: SignTx, root: bip32.HDNode):
|
|||||||
|
|
||||||
tx_req.serialized = tx_ser
|
tx_req.serialized = tx_ser
|
||||||
|
|
||||||
elif segwit[i_sign]:
|
|
||||||
# STAGE_REQUEST_SEGWIT_INPUT
|
|
||||||
txi_sign = await request_tx_input(tx_req, i_sign)
|
|
||||||
|
|
||||||
is_segwit = (txi_sign.script_type == InputScriptType.SPENDWITNESS or
|
|
||||||
txi_sign.script_type == InputScriptType.SPENDP2SHWITNESS)
|
|
||||||
if not is_segwit:
|
|
||||||
raise SigningError(FailureType.ProcessError,
|
|
||||||
'Transaction has changed during signing')
|
|
||||||
input_check_wallet_path(txi_sign, wallet_path)
|
|
||||||
|
|
||||||
key_sign = node_derive(root, txi_sign.address_n)
|
|
||||||
key_sign_pub = key_sign.public_key()
|
|
||||||
txi_sign.script_sig = input_derive_script(coin, txi_sign, key_sign_pub)
|
|
||||||
|
|
||||||
w_txi = bytearray_with_cap(
|
|
||||||
7 + len(txi_sign.prev_hash) + 4 + len(txi_sign.script_sig) + 4)
|
|
||||||
if i_sign == 0: # serializing first input => prepend headers
|
|
||||||
write_bytes(w_txi, get_tx_header(tx, True))
|
|
||||||
write_tx_input(w_txi, txi_sign)
|
|
||||||
tx_ser.serialized_tx = w_txi
|
|
||||||
tx_req.serialized = tx_ser
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# hash of what we are signing with this input
|
# hash of what we are signing with this input
|
||||||
h_sign = HashWriter(sha256)
|
h_sign = HashWriter(sha256)
|
||||||
|
Loading…
Reference in New Issue
Block a user