Substrate & ink!
Construa blockchains com pallets Substrate FRAME e contratos inteligentes com ink! - Infraestrutura Web3 nativa de Rust.
Receita
Esqueleto mínimo de contrato ink!:
#[ink::contract]
mod flipper {
#[ink(storage)]
pub struct Flipper {
value: bool,
}
impl Flipper {
#[ink(constructor)]
pub fn new(init: bool) -> Self {
Self { value: init }
}
#[ink(message)]
pub fn flip(&mut self) {
self.value = !self.value;
}
#[ink(message)]
pub fn get(&self) -> bool {
self.value
}
}
}Quando usar isso:
- Lançando uma L1/L2 personalizada com consenso e taxas customizadas
- Parachains Polkadot/Kusama ou solochains
- Contratos Wasm quando EVM não é necessário
Exemplo de Trabalho
Padrão de armazenamento e despacho de pallet (trecho conceitual do FRAME):
#[frame_support::pallet]
pub mod pallet {
use frame_support::pallet_prelude::*;
use frame_system::pallet_prelude::*;
#[pallet::pallet]
pub struct Pallet<T>(_);
#[pallet::config]
pub trait Config: frame_system::Config {}
#[pallet::storage]
pub type Value<T> = StorageValue<_, u32, ValueQuery>;
#[pallet::call]
impl<T: Config> Pallet<T> {
#[pallet::call_index(0)]
#[pallet::weight(10_000)]
pub fn set(origin: OriginFor<T>, v: u32) -> DispatchResult {
ensure_signed(origin)?;
<Value<T>>::put(v);
Ok(())
}
}
}O que isso demonstra:
- Itens de armazenamento tipados e com namespace por pallet
- Guarda de autorização
ensure_signed - Anotação de peso para limites de bloco
Análise Profunda
Como Funciona
- Nó Substrate executa a rede, o consenso e o executor de runtime Wasm.
- Runtime é um blob Wasm compilado atualizado via governança
set_code. - ink! contratos são implantados em
pallet-contractscom aluguel e trie de armazenamento. - Extrinsics são transações; armazenamento usa mapas eficientes de chave-valor.
Substrate vs ink!
| Camada | Responsabilidade |
|---|---|
| Pallet FRAME | Lógica da cadeia, tokens, governança |
| Contrato ink! | Lógica de aplicativo implantada pelo usuário na cadeia |
Armadilhas
- Inchaço do runtime - muitos pallets aumentam o tamanho do Wasm e o tempo de compilação. Correção: habilitar/desabilitar pallets experimentais por recurso.
- Crescimento ilimitado do armazenamento - mapas sem taxas de depósito sobrecarregam a cadeia. Correção: cobrar aluguel ou exigir depósitos por entrada.
- Pânico em ink! se torna revert - sem recuperação de pânico Rust on-chain. Correção: retornar
Resultdas mensagens, evitarunwrap. - Subestimação de peso - blocos cheios, cadeia trava. Correção: benchmark com
frame_benchmarking. - Confiança no trabalhador off-chain - submissões não assinadas precisam de validação. Correção: verificar assinaturas e obsolescência on-chain.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Programas Solana | Implantar em cadeia existente de alta TPS | Necessitar de consenso customizado |
| Cosmos SDK (Go) | Equipe com forte conhecimento em Go | Querer Rust de ponta a ponta |
| Hardhat Solidity | Liquidez EVM | Recursos de runtime Substrate customizados |
| Framework Rollup | Segurança Ethereum | Requisitos de L1 independente |
FAQs
Substrate vs ink! primeiro?
Regras de nível de cadeia em pallets; aplicativos de usuário em ink! se o pallet de contratos estiver habilitado no runtime.
Nó de desenvolvimento local?
substrate-node-template ou pop up para cadeia local com blocos instantâneos para testes.
Como são feitos os upgrades?
Proposta de governança chama set_code com novo runtime Wasm - planeje ganchos de migração de armazenamento.
ink! vs Solidity?
ink! é Rust/Wasm; as ferramentas são menores que EVM, mas se encaixam no ecossistema Polkadot.
Testando ink!?
Testes unitários #[ink::test] rodam no host; integração requer substrate-contracts-node.
XCM cross-chain?
Parachains Polkadot usam XCM para mensagens de ativos - caminho de aprendizado separado do pallet básico.
Taxas e pesos?
O pallet de pagamento de transação cobra com base no peso e comprimento; faça benchmark honestamente.
Depósitos de armazenamento?
Campos #[ink(storage)] custam aluguel; projete estado mínimo por instância de contrato.
Escolha de consenso?
Aura/BABE/GRANDPA etc. dependem do template do nó - solochain vs parachain difere.
Segurança?
Audite os despacháveis do pallet e as mensagens ink! - veja Segurança e Auditoria.
Relacionado
- Noções Básicas de Blockchain em Rust - hashing e chaves
- Consenso & P2P - camada de rede
- Criptografia Aplicada - primitivas criptográficas
- Programas Solana - modelo on-chain alternativo
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+.