Existem diversas maneiras de subir um ambiente de desenvolvimento para que seja possível testar, manipular e interagir com a blockchain do Bitcoin. No final deste artigo você será capaz de realizar a configuração de um fullnode em modo de desenvolvimento.
Nesta etapa irei utilizar a VPS da DigitalOcean, caso não possua um usuário, você pode realizar um cadastro no link anterior e receber 100 dólares para testar por um período de 60 dias.
Acesse sua conta, clique em New Project, insira os dados abaixo e clique em Create Project:
Acesse seu Projeto e clique em Create => Droplets
As configurações serão as seguintes:
Distributions: Ubuntu
Plan: Basic
Standard virtual machines: 80/mo
Datacenter Region: New York
Authentication: SSH
Clique em New SSH Key para cadastrar sua SSH key, se voce desconhece a autenticação via SSH não há nenhum problema, pois quando for cadastrar uma nova chave, a própria pagina irá lhe ensinar como gerar a sua.
Siga o passo a passo para gerar a sua ssh key, de um nome para a mesma e clique em Add SSH Key e selecione o nome da sua chave na tela principal.
Não irei abordar conceitos sobre criptografia assimétrica e simétrica, caso possua interesse no assunto deixe nos comentários, assim irei criar um artigo exclusivo para esses conceitos.
Para finalizar clique em Create Droplet, se tudo ocorrer como o esperado você sera redirecionado para essa tela.
Ótimo se chegou até aqui, concluiu todas as etapas corretamente, caso contrario realize todos os passos novamente.
Para acessar a nossa VPS abra seu Terminal e digite:
ssh root@ [Ip da sua VPS]
Deverá se parecer com isso:
ssh root@167.172.154.136
Será solicitado a senha da sua chave ssh (caso tenha criado uma ssh com password), em caso de solicitar permissão escreva yes
Yes: Solicitando permissão para conectar a um host desconhecido, o parâmetro Yes adicionara esse host em host conhecidos pela sua maquina, isso evita que programas maliciosos conectem a host sem a sua permissão.
Onde está ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxx. ira mostrar a sua chave, ocultei a minha por segurança, pois esse tipo de informação NUNCA DEVE SER COMPARTILHADA NO AMBIENTE ONLINE
ssh root@167.172.154.136
The authenticity of host ‘167.172.154.136 (167.172.154.136)’ can’t be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added ‘167.172.154.136’ (ECDSA) to the list of known hosts.
Enter passphrase for key ‘/Users/[YOUR-USER]/.ssh/[YOUR-KEY]’:
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0–66-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Jul 28 23:03:27 UTC 2020
System load: 0.03 Processes: 125
Usage of /: 9.4% of 309.96GB Users logged in: 0
Memory usage: 5% IP address for eth0: 159.89.53.60
Swap usage: 0%
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security.
2 packages can be updated.0 updates are security updates.
*** System restart required
***Last login: Fri Jul 24 04:38:12 2020 from 45.225.237.23
root@ubuntu-s-6vcpu-16gb-nyc1–01:~#
Legal! Agora estamos acessando nossa VPS na Digital Ocean pelo terminal , mas vamos continuar, o show não pode parar.
Sempre que acessamos a primeira vez uma VPS precisamos atualizar seus pacotes e softwares, para isso digite:
apt-get update && apt-get upgrade
apt-get update: Busca por atualizações.
apt-get upgrade: Realiza as atualizações.
Esse processo pode demorar alguns minutos, tenha paciência.
Mantenha seu servidor sempre atualizado:
echo “unattended-upgrades unattended-upgrades/enable_auto_updates boolean true” | debconf-set-selections && apt-get -y install unattended-upgrades
Vamos primeiramente configurar algumas variáveis de ambiente com o seguinte comando:
sudo cat >> .bash_profile <<EOF
alias btcdir=”cd ~/.bitcoin/” #linux default bitcoind path
alias bc=”bitcoin-cli”
alias bd=”bitcoind”
alias btcinfo=’bitcoin-cli getwalletinfo | egrep “\”balance\””; bitcoin-cli getinfo | egrep “\”version\”|connections”; bitcoin-cli getmininginfo | egrep “\”blocks\”|errors”’
alias btcblock=”echo \\\`bitcoin-cli getblockcount 2>&1\\\`/\\\`wget -O — http://blockexplorer.com/testnet/q/getblockcount 2> /dev/null | cut -d : -f2 | rev | cut -c 2- | rev\\\`”EOF
Crie uma copia para Shell (linhas de comando) interativas:
cp .bash_profile .bashrc
Agora vamos criar variáveis de instalação, iremos utilizar a última instável do bitcoin, que atualmente esta sendo a bitcoin-core-0.20.0, com isso digitamos em nosso terminal os seguintes comandos:
export BITCOIN=bitcoin-core-0.20.0export BITCOINPLAIN=`echo $BITCOIN | sed ‘s/bitcoin-core/bitcoin/’`
Vamos fazer o download dos arquivos necessário com o **wget** command:
1- Imagem instalador do bitcoin core
wget https://bitcoin.org/bin/$BITCOIN/$BITCOINPLAIN-x86_64-linux-gnu.tar.gz -O $BITCOINPLAIN-x86_64-linux-gnu.tar.gz
Esse processo pode demorar alguns minutos, tenha paciência.
2- Imagem do SHA256SUMS, ele é usado posteriormente para confirmar a integridade do download.
wget https://bitcoin.org/bin/$BITCOIN/SHA256SUMS.asc -O SHA256SUMS.asc
wget https://bitcoin.org/laanwj-releases.asc -O laanwj-releases.asc
Agora já possuímos os arquivo necessários para a configuração, para localizar os arquivos digite no seu terminal:
ls
Será exibido todos os arquivos o diretório atual:
root@ubuntu-s-6vcpu-16gb-nyc1–01:~# ls
SHA256SUMS.asc bitcoin-0.20.0-x86_64-linux-gnu.tar.gz laanwj-releases.asc
Este passo e fundamental para nos termos a certeza que os dados que recebemos vieram de fato sem nenhuma adulteração. Esse processo é muito conhecido pela comunidade open-source pois permite que as pessoas possam comprovar por meio de um algoritmo de Hashing a integridade dos dados, pois se houver alguma adulteração o hashing não ira ser o mesmo gerado pelos desenvolvedores.
gpg — import laanwj-releases.asc
gpg — verify SHA256SUMS.asc
Após executar o comando procure pelo retorno onde diz:
gpg: Good signature from “Wladimir J. van der Laan (Bitcoin Core binary release signing key) <laanwj@gmail.com>”
sha256sum $BITCOINPLAIN-x86_64-linux-gnu.tar.gz | awk ‘{print $1}’
cat SHA256SUMS.asc | grep $BITCOINPLAIN-x86_64-linux-gnu.tar.gz | awk ‘{print $1}’
tar xzf $BITCOINPLAIN-x86_64-linux-gnu.tar.gz
sudo /usr/bin/install -m 0755 -o root -g root -t /usr/local/bin $BITCOINPLAIN/bin/*
rm -rf $BITCOINPLAIN
mkdir .bitcoin
Observação: Em sistemas operacionais base Unix, quando um diretório inicia com ponto(.) ele será um diretório oculto, para verificar se criou corretamente digite:
ls -a
-a essa opção diz ao sistema operacional que voce deseja listar todos (-all) os diretórios.
Desde a versão 0.18.0 do bitcoin, o campo rpcuser não é suportado nesta versão, para isso precisamos adicionar outro campo, o rpcauth que segue a seguinte estrutura:
rpcauth: [User]:[SALT]:[HASH]
Nós não conseguimos gerar esses dados na mão, para isso existe uma biblioteca do próprio Bitcoin Core.
Primeiramente precisamos fazer download do repositório bitcoin no github:
git clone https://github.com/bitcoin/bitcoin
Após essa etapa concluir digite:
cd bitcoin/share/rpcauth
Execute o script rpcauth.py
python3 rpcauth.py [YOUR-USER]
Em meu caso ficou assim:
python3 rpcauth.py dkdaniz
Logo em seguida será exibido dois campos o Auth e o Password, anote ambos.
python3 rpcauth.py dkdaniz
String to be appended to bitcoin.conf:
rpcauth=dkdaniz:2e0c583a768dff9ceeb77529fab0fa9b$92f8d902830b8567438421d20dadd283bc61fbbb051f9c3558ca3ea0208cd57a
Your password:iHrwS8nc70_qOTkT-iyURAtSN2a18NTJOfKxY2bkWtA=
Volte ao diretorio inicial:
cd ~/
ou
cd ../../../
Mude os campos rpcauth para os dados gerados no passo anterior, bem como a senha também. Altere o arquivo com seus dados, copie e cole em seu terminal.
cat >> .bitcoin/bitcoin.conf << EOF
chain=test
rpcauth=dkdaniz:2e0c583a768dff9ceeb77529fab0fa9b$92f8d902830b8567438421d20dadd283bc61fbbb051f9c3558ca3ea0208cd57a
rpcpassword:iHrwS8nc70_qOTkT-iyURAtSN2a18NTJOfKxY2bkWtA=
server=1
rest=1
[test]
deprecatedrpc=accounts
deprecatedrpc=addwitnessaddress
deprecatedrpc=signrawtransactio
deprecatedrpc=validateaddress
# daemon = 1
rpcbind = 0.0.0.0:18332
rpcallowip = 0.0.0.0/0
EOF
Crie um politica de reinicialização, assim sempre que o servidor reiniciar ele irá levantar o Nó do Bitcoin automaticamente.
( /usr/bin/crontab -l 2>/dev/null; echo “@reboot /usr/local/bin/bitcoind -daemon” ) | /usr/bin/crontab
bitcoind -daemon
Agora esta tudo certo, o seu nó esta sendo sincronizado com a Rede bitcoin testnet, para verificar qual bloco ele está no processo de download execute o seguinte comando:
btcblock
Será exibido o ultimo bloco sincronizado
761671
Para realizar request de fora do servidor, você pode realizar um request HTTP do tipo POST, mas isso só irá funcionar depois que todos os blocos forem sincronizados.
curl — user [YOUR-USER]:[YOUR-PASSWORD] — data-binary ‘{“jsonrpc”:”1.0",”method”:”getblockchaininfo”,”params”:[]}’ -H ‘content-type:text/plain;’ http://[IP-DO-SEU-VPS]:18332/
YOUR-USER é o usuario definido na geração do seu rpcauth, no meu caso foi dkdaniz
YOUR-PASSWORD senha que gerada no procecsso do rpcAuth, em meu caso foi iHrwS8nc70_qOTkT-iyURAtSN2a18NTJOfKxY2bkWtA=
IP-DO-SEU-VPS Ip do seu servidor, em meu caso é 167.172.154.136
Duvidas e sugestões deixe nos comentários que terei a imensa honra de responder e ajudar