## Send form active elements description ### Outputs (BTC coins only): - regular (transfer) output is set by default - add OP_RETURN: if default output has any values then OP_RETURN is added as a second output otherwise will replace the first input - remove OP_RETURN: if there is only 1 output (OP_RETURN) then switch to regular otherwise just remove it - add recipient - remove recipient - Clear all --- ### Address: - on address input change - on QR scan - on Import (to be done) ### Address errors: - RECIPIENT_IS_NOT_SET (empty field) - RECIPIENT_IS_NOT_VALID (not valid address) - RECIPIENT_CANNOT_SEND_TO_MYSELF (XRP only: cannot send to myself) --- ### Amount: - on amount input change - on Fiat input change - on QR scan (optional if defined in QR code) - on Import (to be done, optional if defined in file) - IF sendmax is ON - IF sendmax is set AND has second(or multiple) output(s): on second output Amount change - IF sendmax is set: on every fee level change - IF sendmax is set: on custom fee change - IF sendmax is set: on BTC opreturn data changed - IF sendmax is set: on ETH data changed - (ETH only) IF sendmax is set AND switching between ETH (base currency) and TOKEN ### Amount errors: - AMOUNT_IS_NOT_SET (empty field) - AMOUNT_IS_TOO_LOW (lower/equal than zero + ETH exception: 0 amount is possible ONLY for tx with DATA) - AMOUNT_IS_BELOW_DUST lower than network dust limit - AMOUNT_IS_NOT_ENOUGH (not enough funds on account) - AMOUNT_NOT_ENOUGH_CURRENCY_FEE (ETH only: trying to send TOKEN without enough ETH to cover TX fee) - AMOUNT_IS_MORE_THAN_RESERVE (XRP only: trying to spend the reserve) - AMOUNT_IS_LESS_THAN_RESERVE (XRP only: trying to send less XRP than required reserve to the empty account) - AMOUNT_IS_NOT_IN_RANGE_DECIMALS (amount with invalid decimal places) - AMOUNT_IS_NOT_INTEGER (ERC20 only: token doesn't accept decimal places) - REMAINING_BALANCE_LESS_THAN_RENT (solana only: account has to keep a minimal balance equal to rent) --- ### Fiat: - on fiat input change - on Amount input change (any reason listed above) - on Currency select change (recalculation) - on Import (to be done, optional if defined in file AND amount is not defined in file) ### Fiat errors: - AMOUNT_IS_NOT_SET (empty field) - AMOUNT_IS_TOO_LOW (lower than 0, 0 is still possible if recalculated amount is lower than 1 cent) - AMOUNT_IS_NOT_IN_RANGE_DECIMALS (max. 2 decimals allowed) --- ### Fee: - on fee level click - on custom fee level input change - on BTC OP_RETURN data changed - on ETH data changed - switching from "regular" fee level to "custom" should set value from last selected fee - IF fee level wasn't changed yet (normal) and there is not enough coins to satisfy normal level should be automatically switched to first possible (lower) level, either LOW or CUSTOM... - last used fee level will be remembered globally for this coin - estimated time is only available for BTC-like coins ### Fee errors (custom level): - CUSTOM_FEE_IS_NOT_SET (empty field) - CUSTOM_FEE_IS_NOT_INTEGER (BTC and XRP: decimals not allowed) - AMOUNT_IS_NOT_IN_RANGE_DECIMALS (ETH only: decimals are allowed but with max. 9 decimals - GWEI is not satoshi) - CUSTOM_FEE_NOT_IN_RANGE (must be between minFee and maxFee specified in coins.json, in @trezor/connect) --- ### (BTC only) OP_RETURN output: - HEX field, (on the right) should be changed on every ASCII field (on the left) change - ASCII field should be changed ONLY if HEX is valid, otherwise should be empty ### OP_RETURN output errors: - DATA_NOT_SET (empty fields) - DATA_NOT_VALID_HEX (not valid hexadecimal) - DATA_HEX_TOO_BIG (data size limited to 80 bytes) --- ### (BTC only) Locktime: Additional field in send form, activated by "Add locktime" option. If the number is greater than 500000000 then it is a timestamp otherwise is block number - on "add locktime" input change - on RBF option enable - should disable RBF option if set - should disable BROADCAST option if set ### Locktime errors: - LOCKTIME_IS_NOT_SET - LOCKTIME_IS_NOT_NUMBER - LOCKTIME_IS_TOO_LOW (lower/equal zero) - LOCKTIME_IS_NOT_INTEGER (decimals not allowed) - LOCKTIME_IS_TOO_BIG (locktime larger than max unix timestamp \* 2 = 4294967294) --- ### (BTC only) RBF: Additional checkbox in send form, since this could be only true/false there is no validation for that filed --- ### (ETH only) Data: Additional field in send form, activated by "Add data" option. Same behavior as BTC OP_RETURN output. - HEX field, (on the right) should be changed on every ASCII field (on the left) change - ASCII field should be changed ONLY if HEX is valid, otherwise should be empty ### Data errors: - DATA_NOT_VALID_HEX - DATA_HEX_TOO_BIG (data size limit: 8192 bytes for protobuf single message encoding) --- ### (XRP only) Destination tag: Additional field in send form, activated by "Add destination tag" option It doesn't have impact on transaction itself (fee, amount etc) ### Destination tag errors: - DESTINATION_TAG_NOT_SET - DESTINATION_TAG_IS_NOT_NUMBER - DESTINATION_TAG_IS_NOT_VALID (decimals not allowed, in range: 0 - 4294967295) --- ### Broadcast: - toggle "Sign transaction" / "Send transaction" button - "Review transaction" modal with different options at the last step (copy or download signed tx) --- ### Drafts: - draft should be saved on change of any field (if this field is valid) - draft should be loaded after changing url (going back to send form from any other page) --- ### Send RAW: - Broadcast signed tx to the network regardless of tx OWNER, this tx doesn't have to be signed by currently selected account, only selected NETWORK matters --- ### Precomposed transaction ("Total Sent" field) - on load draft - on address change - on amount change - on fee change - on additional option change --- ### Review modal - can be cancelled at any time during signing - mirroring data displayed on the device - if there is BTC OP_RETURN data or ETH DATA present and those data are larger than 10 chars additional "expand button" will appear next to it - (BTC only) Expandable "Transaction detail" section - Regarding to BROADCAST option "Send transaction" or "Copy/download transaction" buttons are available on the last step