mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-16 19:38:09 +00:00
move change logic before confirmation
This commit is contained in:
parent
7000451f71
commit
0898c707d9
@ -322,7 +322,26 @@ void signing_txack(TransactionType *tx)
|
|||||||
return;
|
return;
|
||||||
case STAGE_REQUEST_3_OUTPUT:
|
case STAGE_REQUEST_3_OUTPUT:
|
||||||
layoutProgress("Signing", 1000 * progress / progress_total, progress); progress++;
|
layoutProgress("Signing", 1000 * progress / progress_total, progress); progress++;
|
||||||
co = compile_output(coin, root, tx->outputs, &bin_output, idx1i == 0);
|
bool is_change = false;
|
||||||
|
if (idx1i == 0) {
|
||||||
|
if (tx->outputs[0].has_multisig) {
|
||||||
|
is_change = false; // TODO: detect when not needed
|
||||||
|
} else
|
||||||
|
if (tx->outputs[0].address_n_count > 0) { // address_n set -> change address
|
||||||
|
is_change = true;
|
||||||
|
}
|
||||||
|
if (is_change) {
|
||||||
|
if (change_spend == 0) { // not set
|
||||||
|
change_spend = tx->outputs[0].amount;
|
||||||
|
} else {
|
||||||
|
fsm_sendFailure(FailureType_Failure_Other, "Only one change output allowed");
|
||||||
|
signing_abort();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spending += tx->outputs[0].amount;
|
||||||
|
}
|
||||||
|
co = compile_output(coin, root, tx->outputs, &bin_output, idx1i == 0 && !is_change);
|
||||||
layoutProgress("Signing", 1000 * progress / progress_total, progress); progress++;
|
layoutProgress("Signing", 1000 * progress / progress_total, progress); progress++;
|
||||||
if (co < 0) {
|
if (co < 0) {
|
||||||
fsm_sendFailure(FailureType_Failure_Other, "Signing cancelled by user");
|
fsm_sendFailure(FailureType_Failure_Other, "Signing cancelled by user");
|
||||||
@ -343,18 +362,6 @@ void signing_txack(TransactionType *tx)
|
|||||||
signing_abort();
|
signing_abort();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (idx1i == 0) {
|
|
||||||
if (tx->outputs[0].address_n_count > 0) { // address_n set -> change address
|
|
||||||
if (change_spend == 0) { // not set
|
|
||||||
change_spend = tx->outputs[0].amount;
|
|
||||||
} else {
|
|
||||||
fsm_sendFailure(FailureType_Failure_Other, "Only one change output allowed");
|
|
||||||
signing_abort();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
spending += tx->outputs[0].amount;
|
|
||||||
}
|
|
||||||
if (idx3o < outputs_count - 1) {
|
if (idx3o < outputs_count - 1) {
|
||||||
idx3o++;
|
idx3o++;
|
||||||
send_req_3_output();
|
send_req_3_output();
|
||||||
|
Loading…
Reference in New Issue
Block a user