Como conectar sua Hardware Wallet com seu node usando a Electrum (MacOS)
Canivete Suíço Bitcoinheiro
EPS — Como usar sua Hardware Wallet com seu Full node
Este artigo é complementar ao vídeo “EPS-Electrum Personal Server”, parte da série “Canivete Suíço Bitcoinheiro". O artigo está dividido em duas partes:
- Parte I — Teoria
- Parte II — Tutorial
Parte I — Teoria
Por que você deve usar sua hardware wallet com seu full node?
O objetivo de fazer o setup para que sua hardware wallet conecte diretamente com o seu node é para que sua experiência com o bitcoin seja mais privada e mais segura.
Para isso, utilizaremos o EPS (Electrum Personal Server), uma implementação do protocolo do servidor Electrum para usar a carteira Electrum, conectada a um full node bitcoin, mas sem a necessidade do back-end de um servidor pesado.
Ele permite que o usuário se beneficie de todos os recursos de economia de recursos do Bitcoin Core como pruning, blocksonly e disabled txindex. Toda a riqueza de recursos da Electrum, como integração de hardware wallets, multisig, assinatura off-line, passphrase, coin selection, entre outras, ainda podem ser usados, mas conectados apenas ao full node do usuário.
Carteiras full node são importantes no bitcoin porque são parte integrante do que torna o sistema confiável. Dessa forma, as pessoas não precisam mais confiar em uma instituição financeira como um banco ou paypal, elas podem executar software em seus próprios computadores.
Se bitcoin é ouro digital, então uma carteira full node é seu próprio ourives pessoal que verifica se os pagamentos recebidos são genuínos.
Carteiras full node também são importantes para a privacidade. Usar a Electrum com a configuração padrão, requer que o envio de hashes de todos os seus endereços de bitcoin para algum servidor. Esse servidor pode, então, espionar facilmente suas transações. Já com a utilização do Electrum Personal server, você terá uma cópia completa da Blockchain que será usada para buscar seus próprios endereços e, dessa forma, não revelará a mais ninguém os endereços do seu interesse.
Exposição à Internet
Neste momento, o Electrum Personal Server é mais fácil de utilizar quando o seu full node e a sua carteira Electrum estão no mesmo computador.
Outras pessoas não devem se conectar ao seu servidor. Por padrão, o servidor aceitará conexões apenas do localhost
, embora isso possa ser alterado no arquivo de configuração.
Número de conexões
Neste momento, o Electrum Personal Server só aceita uma conexão por vez.
Como isso é diferente de outros servidores Electrum?
São abordagens diferentes com diferentes compensações. O Electrum Personal Server é compatível com pruning, blocksonly and txindex=0, usa menos CPU e RAM, é adequado para ser usado de forma intermitente em vez de estar sempre ligado e não requer um índice de todos os endereços bitcoin já utilizados. A desvantagem é em casos quando é necessário recuperar uma carteira antiga, pois você terá que importar sua carteira primeiro fazer o rescan
descrito acima e, por isso, ela perde o recurso “instant on” da carteira Electrum.
Os servidores tradicionais da Electrum não são muito escaláveis e usam muitos recursos, oque leva as pessoas a usarem soluções centralizadas. É exatamente isso que queremos evitar com o Electrum Personal Server.
Parte II — Tutorial
Resumo
- Requisitos:
- Bitcoin Core instalado (versão 0.17 ou superior)
- Electrum bitcoin wallet instalada
- Faça o download e confira as assinaturas da
Electrum Personal Server
- Instale o
Electrum Personal Server
, configure e salve o arquivoconfig.ini
- Altere a configuração do arquivo
bitcoin.conf
na pasta/bitcoin
- Instale o servidor com
python
(caso ainda não tenha instalado) - Crie o Script que irá inicializar o
Electrum Personal Server
- Inicie o
Electrum Personal Server
pelo script criado e faça orescan
de transações anteriores caso esteja usando uma carteira antiga - Configure a carteira Electrum para conectar apenas com o seu
Electrum Personal Server
e garantir sua privacidade
Tutorial detalhado passo a passo
O Electrum Personal Server conectará seu full node do Bitcoin à carteira Electrum. Isso possibilitará o uso de todas as funcionalidades da Electrum (suporte para Hardware Wallet, multisig, etc) e, ao mesmo tempo, validar e transmitir tudo com pelo seu full node.
1. Verifique a assinatura do arquivo de instalação
- Faça o download da assinatura do desenvolvedor Chris Belcher que também pode ser encontrada no reddit. (Fingerprint: 0A8B 038F 5E10 CC27 89BF CFFF EF73 4EA6 77F3 1129)
- Clique em "Raw"
- Use
Cmd + s
e salve a chave em uma pasta no seu computador (não altere a extensão do arquivo). Se o arquivo for salvo com alguma extensão além de.asc
delete a extensão e mantenha apenas.asc
- Navegue até a página com os releases e baixe o código-fonte mais recente (.zip) e o arquivo .asc correspondente (necessário para verificar o arquivo baixado).
- Coloque os arquivos na mesma pasta em que você salvou a chave com a assinatura do Chris Belcher;
- Verifique a assinatura conforme explicado no tutorial PGP dos Bitcoinheiros ou;
- Abra o terminal;
- Altere o diretório de trabalho para o diretório em que os arquivos baixados estão localizados. Se você colocou os arquivos em “downloads”, digite o seguinte (tudo após $) no terminal:
cd ~/downloads
- Importe a assinatura do Chris Belcher para o PGP usando a interface do programa ou digitando no terminal o comando;
gpg —-import belcher.asc
- Agora podemos verificar o download digitando (se você baixou outra versão, altere os nomes dos arquivos):
gpg --verify electrum-personal-server-v0.1.7.zip.asc electrum-personal-server-electrum-personal-server-v0.1.7.zip
O resultado deve ser algo semelhante a isto:
Podemos ver que a assinatura foi feita em uma data próxima ao lançamento, é uma boa assinatura e a fingerprint
da chave primária é a mesma que no Github. Para ter ainda mais segurança, podemos fazer uma nova pesquisa on-line sobre a fingerprint
. Isso confirma de várias fontes que a chave parece pertencer a Chris Belcher. Se você tiver como resultar uma fingerprint
diferente ou uma assinatura incorreta Bad signature
, pare e investigue mais.
Se você quiser remover a pasta dos downloads, faça isso agora.
2. Altere as configurações do arquivo config.ini
A configuração do arquivo config.ini
é fundamental para que o Electrum Personal Server
possa se conectar corretamente à sua carteira da Electrum
e passe informações como diretório de sua blockchain
e os endereços que a carteira deverá observar.
- Abra a pasta
electrum-personal-server-electrum-personal-server-v0.1.7
e faça uma segunda cópia do arquivoconfig.ini_sample
e renomeie este novo arquivo paraconfig.ini
- Atenção: Certifique-se de que você alterou a extensão do arquivo de
config.ini_sample
paraconfig.ini
- Abra o arquivo
config.ini
com um editor de texto
- Importe suas carteiras multisig (caso tenha)
Para importar uma carteira multisig, primeiro abra a carteira na Electrum. Vá para Wallet>Information
e copie a Master Public Key
do primeiro cosigner;
No arquivo config.cfg
, crie uma nova linha e dê um nome à sua carteira. Se você estiver usando uma multisig 2 de 3, digite 2 (número de assinaturas obrigatórias) após o nome. Em seguida, cole a chave do cosigner 1
. Volte à Electrum, copie a chave para o cosigner 2
e cole após dar um espaço do cosigner 1
(na mesma linha). Volte para o Electrum e copie e cole a chavecosigner 3
. Sua linha deve ficar conforme o exemplo abaixo:
meu_canivete_bitcoinheiro = 2 xpub661MyMwA… xpub6AMQ6ZPNa6… xpub6A2po6ffdf…
Atenção: Esse procedimento armazena suas Master Public Keys
em texto não criptografado no seu computador. Um hacker pode se apossar dessa informação e daí derivar todos os seus endereços bitcoin (seus fundos não estão em risco por causa disso mas sim sua privacidade). Portanto, use sempre uma senha forte para proteger sua máquina e outra para ter acesso à sua carteira.
- Importe suas carteiras comuns que tem apenas uma assinatura
Para adicionar uma carteira com apenas uma assinatura, por exemplo, com uma chave de uma hardware wallet, siga o mesmo procedimento. Abra a carteira na Electrum
e vá para Wallet>Information
e copie a Master Public Key
. Escolha um nome e cole-o no arquivo config.ini
. Por exemplo:
Hw_Canivete_Bitcoinheiro = xpubkg4QUp5XpUdNf2uGXvQmnD4zcofZ1MN6Fo8PjqQ…
- Configure a localização do seu diretório
Bitcoin
(onde está salva a sua blockchain do seu full node) para que aElectrum
saiba onde pegar as informações do seu node. Por exemplo:
datadir = D:\Bitcoin
- Configure o modo de conexão. Você pode usar a verificação RPC padrão para o Bitcoin Core. Nesse caso, o Bitcoin Core cria um arquivo de cookie para você e você não precisa adicionar mais nada ao
config.ini
- Outra alternativa é usar um
rpcuser
e umrpcpassword
forte (muitos caracteres aleatórios) com o Bitcoin Core. Isso pode ser necessário para que aplicativos como alightning
funcionem. Neste caso, precisará adicioná-lo aoconfig.ini
também. Descomente (remova o #) das duas linhasrpc_user
erpc_password
e adicione suas informações.
Veja como seu arquivo config.ini
deve estar até o momento (as partes que começam com o #
são apenas comentários em texto para organizar o código):
3. Altere a configuração do arquivo bitcoin.conf
na pasta /bitcoin
Precisamos adicionar o comando server=1
ao nosso arquivo de configuração bitcoin.conf
para que o Bitcoin Core possa aceitar conexões do Electrum Personal Server.
server=1
Se você já usa um rpcuser
e rpcpassowrd
, será necessário também adicionar as linhas abaixo.
server =1
rpcuser=your_user
rpcpassword=your_password
4. Instale o servidor com python
- Precisaremos do Python 3 para instalar o servidor. Para verificar se já está instalado em sua máquina, digite o comando abaixo no terminal:
sudo python3 --version
Se o Python 3 estiver instalado, você verá uma mensagem no terminal informando algo comoPython 3.7.2
. Caso contrário, acesse https://www.python.org/downloads/ , faça o download e instale a versão mais recente.
- Após confirmada a instalação do Python 3 usar o comando
pip
para instalar oPersonal Server
. Ele já deve ser sido instalado com o Python 3, mas certifique-se de ter a versão mais recente executando o comando abaixo noterminal
:
sudo pip3 install --upgrade pip
- Finalizado este procedimento, altere o diretório para a pasta
electrum-personal-server
. Se estiver localizado em “Downloads”, siga o comando abaixo (certifique-se de alterar o nome do arquivo no comando se estiver usando uma versão mais recente):
cd ~/downloads/electrum-personal-server-v0.1.7
Ou se estiver localizado em seu diretório pessoal, o comando abaixo (todos os demais exemplos estarão com a pasta localizada no diretório inicial):
cd ~/electrum-personal-server-eps-v0.1.7
- Por fim, use o seguinte comando para instalar o
Electrum Personal Server
pip3 install /caminho-do-arquivo/electrum-personal-server-electrum-personal-server-v0.1.7ousudo pip3 install --user
Resolução de erros desta etapa:
- Se você está recebendo alguma mensagem de erro, confirme que tem instalada a versão mais recente do Python e do Pip.
- Se você receber a mensagem
DistutilsError
ao instalar o servidor, talvez não tenha todas as dependências instaladas. Verifique a última linha na mensagem de erro, deve ser algo comoCould not find suitable distribution for Requirement.parse ('pytest-runner')
. Se esse for o caso, você precisa instalar opytest-runner
.
Para instalar o pytest-runner
digite o comando:
sudo pip3 install pytest-runner
E em seguida repita o comando:
sudo pip3 install --user
5. Crie o Script que irá inicializar o Electrum Personal Server
Se tudo foi instalado sem erros, você deve ter dois scripts na sua pasta Python que, por padrão, se encontra em ˜/Library/Python/3.7/bin
electrum-personal-serverelectrum-personal-server-rescan
Abra uma nova janela no finder
e navegue até a pasta colando o caminho em Go>Go to Folder
para confirmar que os scripts foram criados. Se você quiser navegar para a pasta manualmente, talvez seja necessário mostrar pastas ocultas para encontrá-la com o pressionando as teclas Cmd + Shift + .
- Precisaremos dos caminhos dos arquivos
electrum-personal-server
econfig.cfg
que modificamos na pasta descompactada anteriormente. Por agora, vamos colocar o script noDesktop
mas posteriormente você pode mudar para onde desejar. - Crie um novo arquivo de texto (.txt) e cole os caminhos para os arquivos um após o outro (conforme demonstrado abaixo). Se você usar o python 3.7 e colocar o arquivo descompactado em seu diretório home, a linha deve ser assim:
~/Library/Python/3.7/bin/electrum-personal-server ~/electrum-personal-server-eps-v0.1.7/config.ini
- Antes de salvar, vá para as configurações e verifique se a
Plain Text
está selecionada e se a caixa de seleção “If no extension is provided, use ‘.txt’" está desmarcada na aba "Salvar". - Em seguida, salve o arquivo como
eps
na sua área de trabalho. - Agora vamos transformar este arquivo de texto em script executável. Para isso, digite o comando abaixo no seu
Terminal
chmod 700 ~/desktop/eps
- Volte para o seu desktop e clique duas vezes no arquivo.
- O
Electrum Personal Server
deve iniciar e importar os endereços dasMaster Public Keys
que você definiu noconfig.ini
como "endereços de observação" do seu Full node Bitcoin Core. - Aguarde a importação terminar.
Resolução de erros desta etapa:
- Se aparecer um erro como:
WARNING:2019–02–27 09:32:22,102: Unable to find .cookie file, try setting `datadir` config
Talvez você precise configurar seu rpc_user
e rpc_password
(atenção, não use o símbolo # na sua senha);
Ou precise configurar corretamente o seu diretório Bitcoin
e se certificar de que o Bitcoin Core
está rodando
- Se o erro for:
Error with bitcoin json-rpc
Isso significa que o seu Electrum Personal Server
servidor não consegue se conectar com o seu Full node Bitcoin Core
. Isso é característico de um erro na configuração doconfig.ini
ou do bitcoin.conf
.
Abaixo, um exemplo de um arquivo de configuração padrão do config.ini
que se conecta utilizando o rpcuser
e rpcpassword
no bitcoin.conf
(pode não ser o seu caso, aí basta não usar estas linhas). Todos os comentários #
neste exemplo de arquivo foram removidos para facilitar a leitura, sugerimos que mantenha os mesmos).
[master-public-keys]
multisig_wallet = 2 xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5e4cp9LB xpub127pc4e5YKw4zsBBznm7zEfaZdwAA125UZvfs8cy2D3b58BpBL6Utgz3NdLWgninZAxdCv8J1HzSz97yXBsEeVSLX7w8SYEcbRqAwMyM9LB xpub7g5pc4e5YKwBL9MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5e4cp9LB
[watch-only-addresses][bitcoin-rpc]
host = 127.0.0.1
port = 8332
datadir = ~/Library/Application Support/Bitcoin/
rpc_user = user
rpc_password = passwordwallet_filename =
poll_interval_listening = 30
poll_interval_connected = 5
initial_import_count = 1000
gap_limit = 25[electrum-server]
host = 127.0.0.1
port = 50002
ip_whitelist = *
certfile = certs/cert.crt
keyfile = certs/cert.key
E o que precisa estar no bitcoin.conf
(você pode ter outras configurações também, isso é o que é importante para o Electrum Personal Server
):
server=1
rpcuser=user
rpcpassword=password
- Você precisa reiniciar o
Bitcoin Core
para que as alterações nobitcoin.conf
tenham efeito.
Outra verificação que você pode fazer é se não há vários arquivos bitcoin.conf
(no local padrão e no novo local, se você moveu a instalação). Se houver mais de um, renomeie o arquivo para que ele não seja usado por engano (se você não quiser excluí-lo).
Você também pode tentar alterar o método de autenticação. Se você usa rpcuser
e rpcpassword
, tente o método cookie
(descrito acima neste tutorial).
6. Inicie o Electrum Personal Server
Quando a importação estiver concluída, o Electrum Personal Server
irá fechar.
- Execute o
Electrum Personal Server
a partir do scripteps
em sua área de trabalho novamente para iniciar o servidor e aguarde esta mensagem:
Listening for Electrum Wallet …
Neste momento já seria possível abrir sua carteira Electrum
, mas recomendamos que siga este tutorial para configurar que sua carteira se conecte apenas com o seu servidor, evitando qualquer dano à sua privacidade.
Como usar este setup com carteiras antigas que já tem transações:
Se você usar uma carteira da qual deseja importar transações antigas, será necessário que sua carteira verifique estas transações pelo seu full node.
Você pode fazer isso executando o seguinte comando no terminal (lembre-se de alterar os caminhos se os arquivos estiverem localizados em outros locais):
~/Library/Python/3.7/bin/electrum-personal-server-rescan ~/electrum-personal-server-eps-v0.1.7/config.ini
O terminal irá solicitar que você insira uma data (no formato DD/MM/AAAA
) de quando você deseja iniciar a importação de endereços (quanto mais atrás mais tempo levará) e pressione Enter
. Você receberá uma sugestão de altura de um bloco para começar. Digite e pressione Enter. Aguarde a conclusão da nova verificação (o servidor sairá automaticamente assim que terminar).
Se você não fizer isso e abrir uma carteira antiga, o saldo mostrará "0" pois as transações antigas ainda não foram buscadas.
Agora execute o Electrum Personal Server
a partir do script eps
em sua área de trabalho novamente para iniciar o servidor e aguarde esta mensagem:
Listening for Electrum Wallet …
7. Configure a carteira Electrum para conectar apenas com o seu Electrum Personal Server
- Vamos criar um segundo
script
para que aElectrum
seja inicializada apenas pelo seu servidor local e desabilite a possibilidade de qualquer conexão com um servidor externo que possa colocar sua privacidade em risco. - Vá no seu
Desktop
e faça uma cópia do arquivoeps
que criamos anteriormente - Renomeie este novo arquivo com
electrum-starter
- Clique nele com o botão direito e abra com um editor de texto
- Apague tudo e substitua pelo script abaixo (considerando que a
Electrum
está instalada emApplications
)
open -a /applications/Electrum.app --args --oneserver --server localhost:50002:s
- Salve e feche o arquivo
Agora você pode usar este arquivo electrum-starter
para iniciar a Electrum
e nunca mais precisar se preocupar com a possibilidade de se conectar a qualquer servidor remoto por engano. Você pode fechar o script assim que a Electrum tiver iniciado.
Sua carteira deve estar conectada ao seu full node bitcoin (o círculo no canto inferior direito deve estar verde)!
Você pode verificar se apenas seu servidor está sendo usado acessando Tools>Network
. Você deverá ver apenas o localhost
.
Se mudar a aba para Server
, Localhost
deve estar selecionado e todo o reste deve estar "cinza" e sem a possibilidade de serem selecionados.