wallet: inputs = select_unspent_outputs(amount + target_fee) outputs = [recipient(amount)] remainder = sum(inputs) - amount - target_fee if remainder_is_economic(remainder): outputs.append(change(remainder)) tx = sign_transaction(inputs, outputs) receiving_node: require basic_consensus_checks(tx) require scripts_and_inputs_valid(tx, current_utxo_view) if local_mempool_policy_accepts(tx): store_and_relay(tx) miner: block.transactions = [coinbase(subsidy + fees), selected_transactions] block.header.merkle_root = transaction_merkle_root(block) while sha256d(block.header) > target: mutate_candidate(block) broadcast(block) full_node: require header_and_proof_valid(block) require commitments_and_limits_valid(block) require every_state_transition_valid(block, parent_utxo_view) add_candidate_branch(block) activate_valid_branch_with_greatest_chainwork() confirmations(tx) = active_tip_height - containing_block_height + 1