Como não perder todos os fundos da sua paper wallet ao importar a chave privada para uma wallet online
Pensando em uma forma de guardar por um bom tempo cerca de 2 bitcoin's que você comprou em uma exchange, você resolve criar uma paper wallet, afinal daqui 10 anos 2 bitcoins podem valer milhões de reais.
Para criar sua paper wallet você baixa uma distribuição linux, grava no pendrive, sempre verificando se a hash do arquivo .iso é a mesma disponibilizada no site da distro, roda então em modo live a distribuição e em seguida clona o repositório do bitaddress.org (verificando se o script baixado é o mesmo do repositório) para gerar sua paper wallet pronta para ser impressa no papel.
Você imprime e então envia seus 2 btc comprado na exchange para a carteira de papel e então guarda debaixo do colchão.
3 anos se passam... bitcoin valorizou poucos reais e você precisa urgentemente de dinheiro para completar um pagamento. Então você lembra da sua paper wallet e descobre que precisa somente de 1 bitcoin dos 2 bitcoin contido nela. Você baixa uma software wallet confiável em seu computador e importa a chave privada contida na paper wallet, logo então você envia 1 bitcoin para uma exchange para posteriormente converter esse 1 btc para real e completar seu pagamento urgente. Depois de enviado para a exchange você pensando na segurança da sua paperwallet, desinstala rapidamente a software wallet de seu computador e apaga todos resquícios do programa.
6 meses depois, o bitcoin sofre uma alta impressionante o tornando milionário de um dia para o outro! Você rapidamente pega a sua paper wallet para conferir o saldo dela e se depara com um 0 (zero), ou seja, o 1 btc que tinha sobrado havia sido enviado para um endereço desconhecido, desesperado você logo conclui que sofreu um ataque hacker quando realizou o pagamento urgente.
Para saber o que realmente aconteceu, primeiramente precisamos entender como funciona as transações no bitcoin. Usarei valores altos para facilitar a compreensão, mas o mesmo se aplica para os satoshi.
Imagine que você controla um endereço de bitcoin que contém 10 btc e gostaria de comprar um livro nosso por 10 btc (ainda não vendemos livros, então apenas imagine). Então após efetuar a transação, o saldo do seu endereço será 0 (zero) e o saldo nosso será de 10 btc.
Agora imagine que você controla um endereço que tem 20 btc e depois você recebeu 5 btc de um amigo e 10 btc por ter feito um trabalho, o saldo final do seu endereço agora é de 35 btc! Então você deseja comprar outro livro nosso por 8 btc (desconto de fidelidade). Note que nós vamos receber apenas 8 btc e você não tem 8 btc inteiro, logo você pode enviar 10 btc e receber de troco 2 btc, ou seja, ao consultar seu saldo final será de 27btc, sendo 20 btc + 5 btc + (10-8) btc.
Até ai tudo certo, mas acontece que alguns software wallets utilizam change address (endereços para o troco) por debaixo dos panos (no bom sentido). Eles utilizam change address para aumentar a privacidade das transações, como sabem todas as transações na rede do bitcoin são públicas em um livro razão chamado blockchain (saiba mais clicando aqui). Em um cenário sem change address o troco sempre é retornado para o endereço que partiu a transação, logo a blockchain do bitcoin revelará que a pessoa que controla o endereço A pagou a pessoa que controla o endereço B, e caso pague outra pessoa (endereço C) o troco também será retornado como ilustra a imagem abaixo:
Para resolver este problema de privacidade, wallets que utilizam change address permitem que o troco seja enviado para outro endereço de bitcoin que você controlará, num cenário em que a pessoa que controla o endereço A usando uma wallet que utiliza change address paga a pessoa B a representação seria a seguinte:
Note que uma pessoa de fora olhando a transação na blockchain não pode afirmar com certeza que o endereço C pertence a pessoa que controla o endereço A, e se você aumentar o número de transações sua privacidade aumenta afinal se eu não sei se quem controla o endereço A controla o endereço C, é óbvio que não saberei se D ou E é controlado por quem controla C como ilustra a imagem abaixo:
Esses endereços para o troco são "gerados automaticamente" (não entrarei em detalhes de implementação, recomendo leitura das fontes citadas) pela sua carteira, é como se estivesse realizando 2 pagamentos, mas na verdade um dos pagamentos é para um endereço seu e que ninguém sabe que é seu, no final das contas sua carteira apontará como saldo final a soma do saldos dos seus endereços presente na carteira.
Para resolver este problema de privacidade, wallets que utilizam change address permitem que o troco seja enviado para outro endereço de bitcoin que você controlará, num cenário em que a pessoa que controla o endereço A usando uma wallet que utiliza change address paga a pessoa B a representação seria a seguinte:
Note que uma pessoa de fora olhando a transação na blockchain não pode afirmar com certeza que o endereço C pertence a pessoa que controla o endereço A, e se você aumentar o número de transações sua privacidade aumenta afinal se eu não sei se quem controla o endereço A controla o endereço C, é óbvio que não saberei se D ou E é controlado por quem controla C como ilustra a imagem abaixo:
Esses endereços para o troco são "gerados automaticamente" (não entrarei em detalhes de implementação, recomendo leitura das fontes citadas) pela sua carteira, é como se estivesse realizando 2 pagamentos, mas na verdade um dos pagamentos é para um endereço seu e que ninguém sabe que é seu, no final das contas sua carteira apontará como saldo final a soma do saldos dos seus endereços presente na carteira.
Muito provavelmente você já deve ter entendido o motivo de ao gastar apenas parte do saldo da sua paper wallet seu saldo passou a ser 0 (zero). A carteira que você utilizou para importar a chave privada da sua paperwallet utiliza change address, então o troco foi enviado para outro endereço e ao desinstalar a software wallet e limpar todos resquícios você acaba de perder todas chances de ter acesso a chave privada do endereço para o qual o saldo de troco foi enviado.
Existe então duas dicas para evitar este tipo de problema:
1 - Sempre gastar todo o saldo da paper wallet em uma transação, caso queira gastar apenas uma parte do saldo, envie o restante (que seria o troco) para o endereço da própria paperwallet, ou melhor, por questão de privacidade envie o restante (troco) para outra paperwallet.
2- Use software wallet que retorna automaticamente o saldo restante (troco) para o endereço da própria paperwallet. Um exemplo é a Mycelium que faz isso automaticamente, sempre confira antes de uma transação na documentação da sua software wallet preferida se a funcionalidade está ativa, vai que em uma atualização desabilitam essa função.
COMENTÁRIOS