Rand Protocol
Participe

Execute um nó Rand

O full node de referência e sua carteira são escritos em Rust e compilados a partir do código-fonte. Resultam dois binários: rand-node, o nó e as ferramentas do operador, e rand, uma carteira que guarda uma chave de gasto blindada, se comunica com qualquer nó por JSON-RPC e executa localmente o prover da zkVM em cada transferência e em cada chamada confidencial. Uma testnet experimental, a chain 21, está no ar com 26 validadores em droplets da DigitalOcean. Ela não foi auditada e não tem valor real. Os binários de ambos para Linux x86_64 estão anexados à release v0.8.0, a versão para a qual a frota foi atualizada.

Compile e execute localmente
bash
# 1. Rust (o rustup instala a toolchain 1.98.1 fixada) e as dependências de compilação do RocksDB
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install build-essential clang cmake pkg-config libssl-dev   # Linux

# 2. Clone e compile (10–20 min na primeira vez)
git clone https://github.com/randprotocol/fullnode.git
cd fullnode
cargo build --release        # target/release/rand-node, target/release/rand

# 3. Uma chain de dois validadores nesta máquina (RPC em 8545 e 8546)
scripts/local-testnet.sh
target/release/rand --rpc http://127.0.0.1:8545 status

# 4. Testes; em release porque a prova STARK é lenta em debug (678 testes, cerca de 43 minutos, medidos em 2026-09-14)
cargo test --workspace --release
Entre na testnet pública como observador
chain 21
# A versão v0.8.0 (c0878c3f) executa a chain 21, e nenhuma versão anterior o faz: a chain 21 executa o conjunto de restrições 9, cujas chaves do verificador e cuja codificação de provas nenhuma versão mais antiga contém. Compile a partir da tag, ou em Linux x86_64
# use os binários da release e confira-os com o SHA256SUMS publicado junto a ela
git checkout v0.8.0 && cargo build --release
curl -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/rand-node -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/rand \
     -LO https://github.com/randprotocol/fullnode/releases/download/v0.8.0/msauth-vk-production.bin# a chave fixada do verificador multisig: o rand-node a carrega a partir do diretório do seu binário e se recusa a iniciar sem ela
sha256sum rand-node rand msauth-vk-production.bin   # deve imprimir os valores da versão (SHA256SUMS, assinado como SHA256SUMS.sig):
# 324a4ab1029d39e67fc2de36b036341b0f88f13089997d7fe24c596363a58278  rand-node
# e3a38e74ee28743a960fc1c3eb1ac6c538e18dc259411e10afff7f54e268bbf4  rand
# 68facb06c7f321aaf1d4d541acf6b5c0e9d7f17788ed1c9add6c5a8a8f7acd30  msauth-vk-production.bin

# A identidade do seu nó: a chave de validador Dilithium2 e o peer id p2p em um único arquivo. Gere a sua própria
# e mantenha-a fora do checkout; o repositório não rastreia mais nenhuma chave
rand-node keygen --out node.key.json

# O genesis acompanha o repositório; todo nó deve conter o arquivo idêntico.
# o init imprime o seu hash, que deve coincidir com o abaixo
rand-node init --datadir ./data --genesis deploy/genesis-chain21.json

# Conecte-se aos validadores públicos (a chain 21 manteve as chaves da chain 14, portanto seus peer ids e IPs).
# Omita --validator: a sua chave não está no conjunto de validadores. Um validador também precisa de NTP
rand-node run --datadir ./data --key node.key.json \
    --listen /ip4/0.0.0.0/tcp/30303 --rpc 127.0.0.1:8545 --no-mdns \
    --bootstrap /ip4/164.90.239.200/tcp/30303/p2p/12D3KooWEQEbUwZRgqhDPXhW7vNBmcRcnhUDGUADe81VFdv3ALYe \
    --bootstrap /ip4/165.245.173.74/tcp/30303/p2p/12D3KooWJyc5oDHggAr89e9QrRFBy9Tg8TxXh18yzrb1SM6KKLYw \
    --bootstrap /ip4/188.166.235.187/tcp/30303/p2p/12D3KooWSyX84P1DAbWByLHpRBMLRWD53r3Jj4aqVt6tHoF8B2ZQ

# Uma carteira é uma chave separada e protegida (shielded). O seu endereço rand1… tem cerca de 1,6 KB de texto
rand keygen && rand address

# Uma emissão do faucet é assinada por um validador, portanto exige o RPC de um validador: funciona na
# chain local de dois validadores tal como está; um observador responde "ask a validator node". Na chain 21
# o faucet emite apenas para as 16 carteiras que o seu genesis inclui na lista de permissão, e apenas a partir dos validadores que ele nomeia
rand faucet                                  # 100 RAND em uma nota que só você pode abrir
rand balance                                 # varre a árvore com a sua chave; mais ninguém pode
rand send <rand1 address> 1.5              # pede confirmação, gera a prova (~2 min), aguarda o commit
Validadores
26
Quórum
18 of 26
Genesis
ca76c2766ed6090ac6ba5dad86b724dd5d2b80c0edfaed287cd8b129e663ca9a
Faça uma chamada confidencial
rand
# Monte um guest embutido: pague o excedente acima de 1000 se quatro saldos privados o cobrirem
rand program build --guest private_payment --arg 1000 --out pp.json
rand program deploy pp.json                  # imprime o id do programa (seu hash de conteúdo)

# Prove localmente; só a prova, oito palavras de saída e uma transcrição de entrada selada vão para a chain
rand call <program id> --input 400 --input 250 --input 300 --input 75
rand receipt <tx>                            # saídas [1, 0, 25, 0, ...]: o excedente, publicado como dado

# Depois, abra a transcrição e confira-a com o H_IN que a prova publicou
rand open-call <tx>                          # entradas: [400, 250, 300, 75] — veredito: faithful
A chain vê o id do programa, o nível de gas e as oito palavras de saída. Nunca vê os saldos e, como a taxa é paga por um pacote blindado, também não fica sabendo quem chamou; as saídas são dados, e qualquer pagamento é um pacote que o chamador faz. Medido em Apple Silicon: prova em cerca de 7 s no nível 10, prova de cerca de 1,2 MB no perfil FRI de 80 consultas e verificação em cerca de 16 ms com uma chave de verificador já aquecida, que um nó calcula uma vez por nível e reutiliza entre programas.

Requisitos

SO
Linux x86_64 ou macOS arm64
Rust
1.98.1, fixado pelo rust-toolchain.toml; o rustup o instala
Dependências de compilação
Compilador C++, cmake, pkg-config, headers do OpenSSL (RocksDB)
Primeira compilação
10 a 20 minutos: RocksDB e Plonky3 a partir do código-fonte
Portas
TCP 30303 de entrada em nós públicos; RPC em 127.0.0.1:8545
Servidor
Uma instância de nuvem com 1 a 2 vCPU executa um validador da testnet
Relógio
NTP (chrony) em um validador: ele retém o voto em um bloco que esteja mais de 15 s à frente do seu próprio relógio, de modo que um relógio atrasado deixa de votar sem aviso
Prova
Hoje apenas em CPU: uma transferência blindada leva cerca de dois minutos em um laptop (uma prova de autorização de 7 s e uma prova de pacote de cerca de 110 s) e cerca de 6 GB de memória; uma chamada pequena acrescenta cerca de 30 s

Escolha uma função

  • Observador aberta a qualquer pessoa

    O mesmo binário, sem --validator. Sincroniza a chain, verifica cada certificado e cada prova de pacote e de chamada, reexecuta cada bloco, compara os recibos e atende JSON-RPC. É isso que uma chave nova executa na testnet pública.

  • Validador com bond

    Vota e propõe sob o HotStuff encadeado. Na chain 21, como na chain 20, um novo validador é admitido primeiro por votação: validadores que detêm mais de dois terços do stake assinam uma ação AdmitValidator para a sua chave. Em seguida, ele registra a chave do nó (rand-node register --v2), vincula (bond) pelo menos 1.000 RAND a partir de uma carteira e entra no conjunto na terceira fronteira de época de 1.000 blocos após o bond (o atraso de bond de duas épocas da chain 18). A chain 18 partiu de 26 validadores com 1.000 RAND cada; mais de dois terços do stake, 18 de 26, precisam estar online e votando para que haja commit. Gere a sua própria chave: nenhuma chave de validador é mais mantida no repositório, e os arquivos de chave versionados para chains anteriores são seeds publicadas.

  • Carteira e prover local

    O cliente rand guarda uma chave de gasto de 256 bits e não assina nada: duas provas são a autorização, uma pequena feita com a chave de gasto e a prova de pacote de 4 entradas e 4 saídas. Ele varre a árvore em busca das suas próprias notas, gera ambas as provas na sua máquina, com o mesmo formato para RAND e para qualquer token RPL, e, em uma chamada confidencial, prova também o programa. Só provas, compromissos, nullifiers e envelopes selados chegam à chain.

Não vai executar um nó? A mesma carteira está disponível como app para iOS, Android, Chrome e Firefox: Carteiras.

Código-fonte
randprotocol/fullnode
GPL-3.0-only · a testnet executa v0.8.0, a release mais recente
Verifique

Todo nó verifica tudo

Um nó que sincroniza reverifica cada certificado, reexecuta cada bloco, incluindo as suas provas, e compara os recibos antes de aceitar. Na inicialização, verifica o próprio banco de dados, trunca o que estiver inconsistente preservando o seu estado de segurança de voto e busca de novo nos pares o trecho que faltou.

# Nó parado: hashes, QCs, assinaturas, provas, replay
rand-node verify --datadir ./data --mode full
rand-node verify --datadir ./data --repair

Testes de falha rodam na testnet ativa

  • ›Pare um de quatro validadores: a chain continua fazendo commit e o nó se atualiza em segundos quando volta.
  • ›Pare dois de quatro: a chain para sem quórum e retoma sem fork quando eles voltam.
  • ›Corrompa o banco de dados de um nó: detectado na inicialização, truncado, ressincronizado a partir dos pares e idêntico byte a byte depois.
  • ›Transferências por nós diferentes: todas confirmadas, saldos idênticos em toda parte, oferta inalterada.
  • ›Um vínculo com um par que caiu é restabelecido pela lógica de rediscagem em cerca de 30 segundos.

Ainda não implementado

Listado para que a distância entre o paper e o nó fique legível, e não deduzida.

  • ›Estado persistente por programa e chamadas entre programas
  • ›Um compilador na própria carteira: um programa é um guest montado integrado ou uma imagem construída com a toolchain rand-guest separada
  • ›Slashing e jailing, recompensas de bloco, mercados de taxas, o farol de líder por hash-sortition
  • ›Um acumulador de nullifiers, poda de provas após a finalidade, agrupamento de provas em lote
  • ›Uma prova de tier 20 da transferência do SPL Token e o mercado de provers em GPU do paper