Substrate & ink!
Construa blockchains com pallets Substrate FRAME e contratos inteligentes com ink! - Infraestrutura Web3 nativa de Rust.
Busque em todas as páginas da documentação
Construa blockchains com pallets Substrate FRAME e contratos inteligentes com ink! - Infraestrutura Web3 nativa de Rust.
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:
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:
ensure_signedset_code.pallet-contracts com aluguel e trie de armazenamento.| Camada | Responsabilidade |
|---|---|
| Pallet FRAME | Lógica da cadeia, tokens, governança |
| Contrato ink! | Lógica de aplicativo implantada pelo usuário na cadeia |
Result das mensagens, evitar unwrap.frame_benchmarking.| 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 |
Regras de nível de cadeia em pallets; aplicativos de usuário em ink! se o pallet de contratos estiver habilitado no runtime.
substrate-node-template ou pop up para cadeia local com blocos instantâneos para testes.
Proposta de governança chama set_code com novo runtime Wasm - planeje ganchos de migração de armazenamento.
ink! é Rust/Wasm; as ferramentas são menores que EVM, mas se encaixam no ecossistema Polkadot.
Testes unitários #[ink::test] rodam no host; integração requer substrate-contracts-node.
Parachains Polkadot usam XCM para mensagens de ativos - caminho de aprendizado separado do pallet básico.
O pallet de pagamento de transação cobra com base no peso e comprimento; faça benchmark honestamente.
Campos #[ink(storage)] custam aluguel; projete estado mínimo por instância de contrato.
Aura/BABE/GRANDPA etc. dependem do template do nó - solochain vs parachain difere.
Audite os despacháveis do pallet e as mensagens ink! - veja Segurança e Auditoria.
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