Architecture
System design and component overview
Selendra is built on the Substrate framework (Polkadot SDK fork from Cardinal Cryptography, branch aleph-v1.6.0).
System Layers
| Layer | Components |
|---|---|
| Application | EVM dApps (Solidity), WASM dApps (ink!), MetaMask, Polkadot.js |
| Runtime | Frontier EVM, pallet-contracts, Unified Accounts |
| Consensus | Aura (1s blocks), AlephBFT finality |
| Storage | RocksDB, Patricia-Merkle trie |
Core Pallets
Consensus & Staking: pallet-aura, pallet-aleph, pallet-staking, pallet-session, pallet-committee-management, pallet-elections, pallet-nomination-pools
EVM: pallet-evm, pallet-ethereum, pallet-evm-chain-id, pallet-dynamic-evm-base-fee, pallet-unified-accounts, pallet-custom-signatures
WASM: pallet-contracts (ink! 5.0.0-rc)
Governance: pallet-democracy, pallet-collective, pallet-elections-phragmen, pallet-treasury, pallet-scheduler, pallet-preimage
Core: pallet-balances, pallet-transaction-payment, pallet-timestamp, pallet-utility, pallet-multisig, pallet-proxy, pallet-identity, pallet-vesting
Safety: pallet-safe-mode, pallet-tx-pause
Dual VM Architecture
EVM Path
- Transaction via MetaMask/Web3.js
pallet-ethereumvalidates and converts to Substrate extrinsicpallet-evmexecutes bytecode- Gas metered via
pallet-dynamic-evm-base-fee
Chain ID: 1961 | Gas Price: Dynamic (0.1-10,000 Gwei)
WASM Path
- Deploy via cargo-contract
pallet-contractsexecutes WASM in Wasmtime- Weight-based gas metering
- Storage rent model
Framework: ink! 5.0.0-rc
Unified Accounts
Single address works across both VMs via bidirectional H160 ↔ AccountId32 mapping. One-time setup: 0.01 SEL.
Block Processing
| Parameter | Value |
|---|---|
| Block Time | 1 second |
| Session | 900 blocks (15 min) |
| Era | 96 sessions (24 hours) |
Process: Aura assigns slot → Validator executes transactions → AlephBFT votes → Block finalized
Network Protocol
- P2P: libp2p (port 30333)
- RPC: Substrate + Ethereum (ports 9944 WS, 9933 HTTP)
Development
# Build
cargo build --release
# Run dev node
./target/release/selendra-node --dev --tmp
Requirements: Rust 1.79.0, wasm32-unknown-unknown target, protobuf compiler
Key Differentiators
- Dual VM - EVM and WASM contracts
- Unified Accounts - One address for both VMs
- AlephBFT - Fast deterministic finality
- Dynamic Gas - Automatic fee adjustment
Next: Consensus • Dual VM • Tech Specs
Found an issue or want to contribute?
Help us improve this documentation by editing this page on GitHub.
