Como Executar um Full Node Zcashd no Raspberry Pi 4.
Sabemos que rodar um node nem sempre pode parecer uma tarefa fácil e muitas vezes requer esforço em aprender como executar as ferramentas e comandos certos para que tudo funcione.
Levando isso em conta, criamos este guia para ajudar a educar os Zcashers que estão interessados em executar um Full Node em um Raspberry Pi 4 de baixa potência.
Caso você ache esse guia útil, doe alguns ZECs para apoiar a ZecHub:
zs1txa9wzxsc46w4940c4t76wjlylhntyp7vcppsp8re32z02srqse038melgglew4jwsh3qes4m4n
O que você aprenderá
Como criar um cartão microSD inicializável do Ubuntu Server
Como configurar a conectividade com a Internet no Raspberry Pi 4
Como acessar seu Raspberry Pi 4 remotamente
Como instalar o zcashd
Como configurar o zcashd
Como usar zcashd
Pré-requisitos
8GB Raspberry Pi 4 Canakit ou equivalente
Um computador com unidade de cartão microSD
Uma rede Wi-Fi ou um cabo com conexão à Internet
SSD/HHD externo com suporte USB3
Nota: manter um servidor seguro não é nada simples. Quaisquer dicas/recomendações/melhores práticas além do que é falado neste guia são bem-vindas, crie um PR e ajude a manter este guia o mais atualizado possível.
Conteúdo:
Prepare o SD Card
Nessa etapa, você criará um cartão SD inicializável que permitirá a inicialização do Raspberry Pi 4.
Insira o cartão microSD em seu computador. Pode ser necessário usar o adaptador que acompanha o Canakit ou qualquer outro adaptador equivalente.
Instale o Raspberry Pi Imager para o seu sistema operacional. Baixe a versão do sistema operacional ao qual você tem acesso atualmente.
Por exemplo, no Linux, você digitaria o seguinte comando após o download:
sudo dpkg -i imager_latest_amd64.deb
Abra o Raspberry Pi Imager
rpi-imager
Escolha SO e dispositivo de armazenamento. Como os Raspberry Pi 4 são de 64 bits, recomendo escolher "Other general-purpose OS" => Ubuntu => Ubuntu Server 22.10 (64 bits). Clique em Storage e selecione seu cartão SD
Antes de gravar no cartão SD, clique em opções avançadas clicando no ícone de engrenagem branca próximo ao canto inferior direito.
Aqui você pode atualizar:
Nome do Host do seu Raspberry Pi 4.
Habilitar SSH.
Criar um Nome de Usuário e Senha.
Habilitar e Configurar seu wi-fi, se necessário.
Depois de concluído, clique em Write.
Inicialize o servidor Ubuntu
Se você tiver um monitor/teclado extras, conecte-os agora. Nota: são opcionais.
Instale o cartão SD que você acabou de formatar no Raspberry Pi 4 e também conecte o SSD/HHD externo na porta USB3. Conecte também o cabo de alimentação e ligue-o.
Conecte-se remotamente ao seu Raspberry Pi 4
Agora precisamos nos conectar ao Raspberry Pi 4. Coisas que precisamos:
Nome de usuário e senha (da etapa anterior)
Endereço IP para que possamos usar SSH
Monitor e teclado (opcional)
Se você tiver um monitor e teclado conectados diretamente ao seu pi, o restante desta seção pode ser ignorado.
Duas maneiras de encontrar seu endereço IP são através da página de administração do roteador ou com o nmap. Se estiver usando o roteador, depende do fabricante e adiaremos esses detalhes para uma rápida pesquisa no Google.
Para nmap, primeiro certifique-se de que esteja instalado:
sudo apt-get install nmap
Encontre o endereço IP do seu computador atual e observe as três primeiras seções. Normalmente é 192.168.1.xxx ou 192.168.50.xxx
Insira esses detalhes no nmap da seguinte maneira:
sudo nmap -sn 192.168.50.0/24
ousudo nmap -sn 192.168.1.0/24
Isso exibirá todos os dispositivos conectados à sua rede doméstica, o que deve revelar o endereço IP/endereço MAC do seu Raspberry Pi 4.
Usando seu nome de usuário, senha e endereço IP, agora podemos fazer login usando SSH
ssh <nome de usuário>@<endereço IP do seu pi>
Nota: você deve inserir seu nome de usuário, seu endereço de IP e sua senha quando solicitado.
Por exemplo: ssh ubuntu@192.168.1.25 onde o nome de usuário é ubuntu e o endereço IP é 192.168.1.25.
Se você estiver curioso(a) para saber qual versão do Raspberry Pi está usando, tente este comando:
cat /sys/firmware/devicetree/base/model ; echo
Instalando zcashd
Duas maneiras de instalar o zcashd incluem baixar um binário pré-compilado ou compilar o zcashd a partir do código-fonte. Recomendo fortemente compilar a partir do código-fonte.
Se estiver baixando um binário pré-compilado, uma fonte é adityapk00 . Observe que como estamos executando um sistema operacional de 64 bits, usaremos um zcash-linux-aarch64-v*.tar.gz. Observe também que versões atualizadas do zcashd raramente são pré-compiladas.
Para que você faça a compilação, é altamente recomendável fazer compilação cruzada.
Compilação cruzada consiste em construir em uma plataforma um binário que será executado em outra plataforma. Uma razão para isso é que os Raspberry Pi 4 têm baixa potência e, portanto, não são muito rápidos! Aproveite o seu computador principal para ajudar com isso. Você pode pegar a versão mais recente aqui.
Para compilação cruzada, precisamos ter certeza de que temos os pacotes necessários. Instale o seguinte:
sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python3 python3-zmq zlib1g-dev curl bsdmainutils automake libtinfo5
sudo apt-get install gcc-aarch64-linux-gnu
Em seguida, mude o diretório para a versão zcashd recém-baixada e execute:
HOST=aarch64-linux-gnu ./zcutil/build.sh
Configure o zcashd
Agora precisamos transferir todos os arquivos binários do zcashd para o seu Raspberry Pi 4. A partir do Zcashd v5.3, os arquivos necessários incluem:
zcashd
zcash-cli
zcash-tx
zcash-gtest
zcash-inspect
zcashd-wallet-tool
fetch-params.sh
Esses arquivos são encontrados no diretório /src do local de download da versão mais recente, se você mesmo os compilou. Caso contrário, os arquivos pré-compilados estarão onde você os baixou.
Duas maneiras de realizar as transferências são usando SFTP ou usando sua unidade externa.
SFTP
sftp username@<ip of RaspberryPi4>
put zcashd
put zcash-cli
put zcash-tx
put zcash-gtest
put zcash-inspect
put zcashd-wallet-tool
put fetch-params.sh
Ou
Basta copiar os arquivos para o externo antes de conectá-lo ao Raspberry Pi 4.
Se você já possui um nó completo sincronizado e deseja economizar tempo, também pode copiar os blocos e os dados da chainstate.
cd ~/.zcash/
Basta Executar:
tar -zcvf blocks.tar.gz /blocks
tar -zcvf chainstate.tar.gz /chainstate
Copie os blocos e os arquivos .gz do chainstate em seu SSD/HHD externo.
Usando SSD/HHD externo em seu Raspberry Pi 4
Monte o SSD/HDD externo na pasta Mídia para que você possa vê-lo:
lsblk exibirá todas as unidades conectadas. A maioria estará no formato sda
id mostrará seus IDs de usuário e grupo.
sudo mount -o umask=0077,gid=<groupid>,uid=<userid> /dev/sda1 /media/portableHD/
Fique de olho em quem possui as pastas/arquivos e também nas permissões.
Se você copiou os blocos e os arquivos chainstate .gz do seu outro computador, descompacte-os agora. Certifique-se de que eles estejam na pasta .zcash da sua unidade externa.
tar - xvzf blocks.tar.gz tar - xvzf chainstate.tar.gz
Setup /media/portableHD/.zcash/zcash.conf
observe como movemos o datadir para o SSD/HDD externo que tem muito mais espaço disponível.
Como o local padrão da pasta .zcash foi movido, precisamos informar isso ao zcashd usando links simbólicos:
cp -rp ~/.zcash/* /new_dir // Faça cópia do datadir e supply no HD externo
rm -rf ~/.zcash // Remove a pasta padrão
ln -s /media/portableHD/ ~/.zcash
// Symbolic link new data location to the default so zcashd is happy
Execute o script fetch-params.sh para baixar os dados necessários para o zcashd
./fetch-params.sh
Inicie uma nova 'tela' [programada no Linux]. Abra o zcashd com o conjunto -datadir:
screen -S zcashScreen
./zcashd -datadir=/media/portableHD/.zcash/
Retire a tela. Ctrl+a, Ctrl+d
Crie um alias para que você não precise digitar todos esses comandos extras de localização de dados
alias zcash-cli="./zcash-cli -datadir=/media/portableHD/.zcash/"
Pronto para ser usado!
zcash-cli getblockchaininfo
Como você verifica o status do seu node?
tail -n 500 <path to>/.zcash/debug.log
Para obter a altura atual do seu registro:
tail -n 10 <path to>/.zcash/debug.log | grep -o 'height=[^b]*'
zcash-cli getinfo
Como você envia um memorando (memo)?
Como visto aqui, baixe
ascii2hex
&
hex2ascii
Torne-os executáveis
chmod +x ascii2hex hex2ascii
Crie um memorando e converta-o para hexadecimal. Você pode converter novamente para ascii para testar.
Crie uma transação z2z (Sapling) usando a versão hexadecimal do seu memorando acima.
zcash-cli z_sendmany "ztestsapling1kg3u0y7szv6509732at34alct46cyn0g26kppgf2a7h5tpqxldtwm7cmhf8rqmhgt" "[{\"address\": \"ztestsapling2kg3u0y7szv6509732at34alct46cyn0g26kppgf2a7h5tpqxldtwm7cmhf8rqmhgtmpakcz5mdv\",\"amount\": 0.0001, \"memo\":\"5A656348756221\"}]"
Como você retoma seu zcashScreen depois de desanexá-lo?
screen -r zcashScreen
Como você interrompe o zcashd?
zcash-cli stop
Como você cria uma UA?
zcash-cli z_getnewaccount
Agora construa um receptor UA de acordo com suas necessidades. Isso inclui apenas a Pool Orchard, Orchard + Sapling e finalmente Orchard + Sapling + Transparent.
Observe que você pode saber a diferença entre os receptores pelo comprimento deles.
zcash-cli z_getaddressforaccount 0 '["orchard"]'
zcash-cli z_getaddressforaccount 0 '["orchard","sapling"]'
zcash-cli z_getaddressforaccount 0 '["orchard","sapling","p2pkh"]'
Como você envia ZEC usando um UA?
zcash-cli z_sendmany "fromOaddress" "[{\"address\": \"dOrchardAddress\",\"amount\": 0.0001, \"memo\":\"yourMemoinHex\"}]" <minconf> <fee> <privacyPolicy>
Deve-se observar que os endereços de destino podem ser endereços transparentes, sapling, or orchard, no entanto, pode ser necessário ajustar o sinalizador de politica de privacidade para que a transação seja válida. (Alguns combos não funcionarão se a política de privacidade não fizer sentido!)
Onde posso encontrar mais informações sobre UA?
Confira a postagem de Hanh sobre privacidade de transações e também esta postagem do fórum zcash.
Outras informações aqui
Fontes
https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview
https://zcash.readthedocs.io/en/latest/rtd_pages/Debian-Ubuntu-build.html
https://itsfoss.com/how-to-find-what-devices-are-connected-to-network-in-ubuntu/
https://forum.zcashcommunity.com/t/unified-addresses-full-node-rpc-api/41980/2
https://medium.com/@hanh425/transaction-privacy-78f80f9f175e
https://zips.z.cash/protocol/nu5.pdf#unifiedpaymentaddrencoding