Change Address é o endereço usado pela carteira para devolver o restante de um pagamento. O Bitcoin gasta por inteiro as quantias selecionadas. Depois do pagamento e da taxa, a carteira normalmente envia o restante para uma nova saída própria. O dinheiro continua sendo seu, mas fica registrado em outra saída e, muitas vezes, em um novo endereço.
Alice recebeu anteriormente 120 000 sat, as menores unidades do bitcoin, e quer pagar 100 000 sat. Neste exemplo, seus fundos formam um UTXO: uma saída de uma transação anterior que ainda não foi gasta. Ela se torna uma entrada do pagamento e é consumida por inteiro. Com uma taxa de 2 000 sat, o destinatário recebe 100 000 sat e os 18 000 sat restantes vão para uma nova saída da carteira de Alice. É parecido com pagar usando uma nota maior e receber troco, mas as duas quantias são distribuídas em uma única transação. Alice não precisa esperar que o destinatário devolva nada. A carteira costuma escolher sozinha o endereço de troco. Por isso, um explorador pode mostrar dois endereços de destino, embora ela tenha pago uma pessoa. Depois da confirmação, o troco é um novo UTXO com seu próprio identificador de saída, o outpoint; não é um pedaço não gasto da saída antiga. O outpoint combina o identificador da transação, txid, com a posição da saída dentro dela. Alice poderá usá-lo em outros pagamentos como os demais fundos. [1]
O script scriptPubKey estabelece as condições para gastar uma saída. Ele não explica por que você enviou o dinheiro. Um bloco contém valores e scripts scriptPubKey, não rótulos de pagador, destinatário ou troco. A carteira reconhece suas próprias saídas de troco pelos registros de derivação; um explorador de blocos ou analista infere a finalidade delas. Nem a ordem das saídas nem a suposição de que a segunda saída é o troco são confiáveis. Uma transação pode não ter troco, conter uma saída de troco, várias saídas controladas pelo remetente ou saídas de diferentes participantes. Por isso, a classificação change expressa a relação entre uma saída e uma carteira. Não é uma propriedade separada registrada no protocolo. [1]
Uma heurística é uma inferência a partir de pistas indiretas. Payjoin e CoinJoin permitem que vários participantes montem uma transação juntos, por isso inferências simples podem falhar. Um BIP é um documento de proposta técnica ou padrão. Heurísticas comuns tratam como possível troco uma saída com o mesmo tipo de script das entradas, um valor não arredondado, um endereço novo ou um valor compatível com o cálculo do restante. Em um pagamento comum com duas saídas, essas inferências podem funcionar e ligar gastos posteriores, mas todas admitem contraexemplos. O BIP78 Payjoin dificulta de propósito tanto a suposição de que todas as entradas pertencem à mesma pessoa quanto o reconhecimento do troco pelo tipo de script ou por valores arredondados. CoinJoin, pagamentos em lote e transferências entre endereços próprios acrescentam outras ambiguidades. A inferência deve indicar o grau de incerteza e as evidências que a sustentam; uma heurística, sozinha, não é prova do protocolo nem de propriedade jurídica. [4] [14]
Uma PSBT é um pacote com uma proposta de transação e informações adicionais que a carteira e o dispositivo de assinatura podem trocar. Multisig exige autorização segundo uma regra com várias chaves. Os dados de derivação de chaves BIP32 nas saídas de uma PSBT permitem que um dispositivo de assinatura físico ou sem conexão verifique o troco proposto. O dispositivo precisa derivar a saída por conta própria e conferir se ela segue as mesmas regras da carteira. O BIP174 descreve essa verificação para uma única chave e para Multisig; quando são necessárias várias assinaturas, não basta que a saída contenha uma chave local. Um coordenador malicioso que prepara a transação pode substituir o troco por uma saída própria ou esconder o restante em uma taxa excessiva. Antes de assinar, confira em uma tela confiável as saídas dos destinatários, a taxa total e cada saída declarada como troco. [5]
Para calcular, I representa os fundos escolhidos, R os pagamentos aos destinatários, F a taxa e C o troco: C = I − R − F. RPC é uma interface de programação para enviar comandos ao nó. Coin Selection, a seleção de UTXO, determina em conjunto as entradas, a taxa e o possível troco. Uma combinação que cubra exatamente o valor necessário dispensa uma saída de troco. Nos demais casos, a carteira compara o restante com o custo de criar a saída e gastá-la mais tarde. A chamada RPC fundrawtransaction do Bitcoin Core pode adicionar no máximo uma saída de troco e informa sua posição. Quando todos os fundos selecionados são enviados aos destinatários, o troco é omitido de propósito. A seleção manual por Coin Control altera as entradas utilizadas e, com isso, o valor do troco, mas cada entrada escolhida é consumida por inteiro. Confira as entradas finais, os valores dos destinatários, a taxa e o troco, não apenas o valor do pagamento. [9] [10] [13]
Uma HD Wallet deriva muitas chaves e endereços de um segredo inicial. O caminho de derivação indica qual endereço calcular; BIP identifica um documento de proposta técnica ou padrão. Uma HD Wallet costuma derivar os endereços de recebimento em um ramo externo e os de troco em um ramo interno. O BIP44 define change=0 como ramo externo e change=1 como ramo interno. Para uma conta SegWit nativa, isso corresponde, por exemplo, aos caminhos m/84'/0'/0'/0/i e m/84'/0'/0'/1/i. Trata-se de uma convenção das carteiras, não de uma regra de consenso; uma carteira baseada em descritores pode seguir outras regras. Usar um novo endereço interno reduz a reutilização de endereços. Devolver o restante ao endereço original é válido, mas conecta o histórico de pagamentos e pode facilitar sua associação a uma pessoa específica. [2] [3]
A notação xpub abaixo representa uma chave pública estendida: permite derivar dados públicos descendentes, mas não assinar pagamentos por conta própria. O seed é o valor secreto inicial para derivar chaves. Um descritor de saída especifica o tipo de script, as chaves, os dados sobre sua origem e a regra de derivação de novos endereços. Assim, o par wpkh([fingerprint/84h/0h/0h]xpub…/0/*) e …/1/* pode descrever os ramos de recebimento e de troco; o BIP389 permite representar vários ramos em uma mesma notação. O marcador internal informa à carteira qual descritor deve ser usado para o troco, mas não modifica o script resultante. Na recuperação, o seed sozinho pode não bastar para localizar todos os fundos. Sem os dados da conta, o tipo de script e o método de derivação, a carteira pode deixar de encontrar saídas de troco válidas, mesmo que as chaves necessárias ainda existam. [6] [7] [8]
Dust designa uma saída muito pequena, avaliada segundo as regras do nó para retransmitir transações. O limite correspondente é calculado a partir do tipo de saída, do tamanho estimado dos dados necessários para gastá-la no futuro e de uma taxa configurável chamada dust relay feerate. Não existe um único valor universal em satoshis, nem se trata de uma proibição do consenso. A carteira pode recusar até um troco acima desse limite se o custo de criar a saída e gastá-la depois superar o valor devolvido. Esse limite econômico depende da taxa atual, da estimativa de taxa futura e do tamanho do script. Não criar o troco aumenta a taxa imediata; uma saída pequena demais pode se tornar cara demais para gastar mais tarde. [12]
Replace-by-fee (RBF) substitui uma transação não confirmada por outra com uma taxa maior. A chamada RPC bumpfee do Bitcoin Core pode cobrir a diferença reduzindo o troco, acrescentando entradas ou criando uma nova saída de troco. Se o troco cair abaixo do limite das regras do nó ou deixar de ser economicamente aproveitável, poderá desaparecer. Gastar um troco ainda não confirmado cria uma transação posterior dependente da original; substituir a original pode invalidar essa dependência. O comando bumpfee recusa a substituição se a carteira ou o mempool do nó, seu conjunto de transações não confirmadas, já contiver uma transação que gasta uma saída do pagamento original. CPFP (Child Pays for Parent) cria uma transação seguinte em vez de substituir a original. Ela gasta uma saída do pagamento original controlada pela carteira e paga uma taxa maior. Isso aumenta a taxa por tamanho de dados das duas transações consideradas em conjunto, incentivando os mineradores a confirmá-las juntas. Enquanto as substituições não estiverem resolvidas, não considere definitivos o txid não confirmado nem a referência à saída, outpoint. [11] [15]
Na recuperação, é preciso encontrar os endereços de recebimento e de troco. Em uma carteira convencional de assinatura única, normalmente bastam a Seed Phrase (palavras de recuperação) correta, a passphrase usada, se houver, e configurações compatíveis. O seed é o valor secreto inicial para derivar chaves; a passphrase é uma senha adicional, caso você tenha escolhido usá-la. Portanto, nem todo usuário precisa anotar descritores manualmente. Com configurações próprias ou Multisig, em que várias chaves participam da autorização, as palavras sozinhas podem não bastar. Guarde também a descrição da carteira: rede, conta, tipo de script, regras de derivação e, no Multisig, as chaves públicas estendidas xpub de todos os participantes, sua ordem e a quantidade de assinaturas exigida. Se faltar o ramo /1/*, a recuperação pode ignorar o troco e mostrar um saldo menor. Confira endereços e saídas conhecidos dos dois ramos, o intervalo de derivação e o início da varredura do histórico. O teste também deve confirmar que você consegue preparar e assinar corretamente um pagamento. [2] [6] [7]
Para ter uma visão mais completa, leia este verbete junto com Endereço Bitcoin, UTXO, Coin Control, Carteira, Coin Selection, HD Wallet. Também há referências a este verbete em Endereço Bitcoin, Coin Control, Privacidade no Bitcoin, Pseudonimidade.