Noções Básicas de Blockchain em Rust
9 exemplos para você começar com o desenvolvimento de blockchain em Rust - 7 básicos e 2 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com o desenvolvimento de blockchain em Rust - 7 básicos e 2 intermediários.
cargo new chain-playground && cd chain-playground
cargo add sha2 ed25519-dalek hex serde --features derive
cargo add tokio --features fullFerramentas: Os exemplos visam a Rust 1.97.0 (edição 2024). Alvos on-chain podem usar edições mais antigas por SDK - siga o template de cada cadeia.
IDs de blocos e transações começam com hashes criptográficos.
use sha2::{Digest, Sha256};
fn hash_hex(data: &[u8]) -> String {
let digest = Sha256::digest(data);
hex::encode(digest)
}Relacionado: Criptografia Aplicada - catálogo de primitivas
Cadeias modernas usam Ed25519 para assinaturas rápidas e chaves pequenas.
use ed25519_dalek::SigningKey;
use rand::rngs::OsRng;
fn new_keypair() -> SigningKey {
SigningKey::generate(&mut OsRng)
}SigningKey deve permanecer secreto; VerifyingKey é público.Relacionado: Carteiras e Gerenciamento de Chaves
Assinaturas provam autorização sem revelar a chave privada.
use ed25519_dalek::{Signer, SigningKey, Verifier, VerifyingKey};
fn sign_verify(key: &SigningKey, msg: &[u8]) -> bool {
let sig = key.sign(msg);
let vk: VerifyingKey = key.verifying_key();
vk.verify(msg, &sig).is_ok()
}msg para evitar replay entre protocolos.Configurações de cadeia e arquivos de genesis usam serialização estruturada.
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct GenesisAccount {
pubkey: String,
balance: u64,
}u64) para valores de token em configurações.Pânicos de overflow se tornam exploits em contratos de token.
fn transfer(balance: u64, amount: u64) -> Option<u64> {
balance.checked_sub(amount)
}checked_* retorna None em caso de overflow em vez de envolver.f64 para valores de token em código de consenso.Relacionado: Segurança e Auditoria - bugs de inteiros
Mantenha structs on-chain pequenas e fáceis de copiar onde os programas exigirem.
#[derive(Clone, Debug)]
struct Tx {
from: [u8; 32],
to: [u8; 32],
lamports: u64,
}Relacionado: Programas Solana
Nós expõem APIs HTTP/WebSocket para interação com a cadeia.
use reqwest::Client;
use serde_json::json;
async fn get_balance(client: &Client, url: &str, address: &str) -> reqwest::Result<serde_json::Value> {
let body = json!({
"jsonrpc": "2.0",
"id": 1,
"method": "getBalance",
"params": [address]
});
let res = client.post(url).json(&body).send().await?;
res.json().await
}Clientes leves verificam a inclusão com provas de Merkle.
use sha2::{Digest, Sha256};
fn merkle_root(leaves: &[Vec<u8>]) -> [u8; 32] {
if leaves.is_empty() {
return [0u8; 32];
}
let mut layer: Vec<[u8; 32]> = leaves.iter().map(|l| Sha256::digest(l).into()).collect();
while layer.len() > 1 {
let mut next = Vec::new();
for chunk in layer.chunks(2) {
let mut h = Sha256::new();
h.update(chunk[0]);
h.update(chunk.get(1).unwrap_or(&chunk[0]));
next.push(h.finalize().into());
}
layer = next;
}
layer[0]
}Relacionado: Consenso e P2P
Mantenha ferramentas off-chain separadas de crates de programas on-chain.
[dependencies]
anchor-lang = { version = "0.30", optional = true }
[features]
on-chain = ["anchor-lang"]Relacionado: Substrate e ink!
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4 e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026