This is the shortest path from nothing to a running EmpoorioChain node and a transfer you can see in an explorer. It follows the repository's getting-started guide and calls out the step that stops most first builds.
Requirements
macOS or Linux. Rust via rustup. clang, cmake, protobuf and OpenSSL development headers. Git. Optionally the Polkadot.js browser extension and Polkadot.js Apps.
rustup toolchain install stable
rustup target add wasm32-unknown-unknown --toolchain stable
rustup component add rustfmt clippy
The repository ships a rust-toolchain.toml; cargo picks the pinned toolchain automatically.
Build the node
git clone <EmpoorioChain repository>
cd EmpoorioChain
./scripts/restaurar_sdk_vendorizado.sh # ← the step everyone misses
cargo build --release -p empoorio-node
The first script restores ~380 MB of vendored Frontier and polkadot-sdk patches that the root Cargo.toml references by path and git ignores. Skip it and the build dies on a missing Cargo.toml deep inside patches/. Budget disk: a full release target/ approaches 50 GB, and a full disk disguises itself as a compiler error.
Quick checks that do not need the full node build:
cargo check -p empoorio-runtime
cargo test -p empoorio-sdk
cargo test -p emp-cli
Run a local node
./target/release/empoorio-node --dev --tmp --rpc-external --rpc-cors all
Endpoints: HTTP and WebSocket RPC on 127.0.0.1:9944. --dev starts a single-validator development chain with funded test accounts (Alice, Bob…). This is your chain, not the public testnet — which is exactly what you want for a first transfer.
Connect Polkadot.js
- Open Polkadot.js Apps.
- Choose a custom endpoint:
ws://127.0.0.1:9944. - Save it as EmpoorioChain Local.
- Open
Developer → Chain stateand confirm the metadata loads — you should see the full pallet list.
First native transfer
In Developer → Extrinsics: select balances.transferKeepAlive, choose a dev account as recipient, enter an amount (DMS has 18 decimals), submit and sign as Alice. In Network → Explorer the block shows a Balances.Transfer event. That event is the same one EmpooScan indexes on the public network.
First SDK connection
use empoorio_sdk::{EmpoorioClient, SdkConfig};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = EmpoorioClient::connect(SdkConfig::local()).await?;
let chain = client.system_chain().await?;
println!("connected to {chain}");
Ok(())
}
SdkConfig::local() targets 127.0.0.1:9944; swap in the public testnet endpoint when you are ready. The CLI is one command away:
cargo run -p emp-cli -- --help
Moving to the public testnet
Three things change. The endpoint becomes wss://rpc.testnet.empooriochain.org. You need real testnet DMS (there is no public faucet yet; ask the team). And your transactions must carry the two custom signed extensions — which Polkadot.js handles from the metadata automatically, and which the Rust and Dart SDKs encode; a generic library that does not know about CheckPqcPolicy will fail with a Codec error.
One more warning: the public RPC nodes rate-limit at roughly 10 requests per second per IP with a one-hour ban. A script that polls in a tight loop will see connection refused and blame the network. Back off, or run your own node.
Everyday commands
cargo fmt --all
cargo clippy --workspace --all-targets
cargo test --workspace
cargo test -p pallet-music-nft # any single pallet
Based on GETTING_STARTED.md and DEVELOPER_GUIDE.md in the EmpoorioChain repository.


