This guide provides comprehensive instructions for deploying the FintraDex parachain on Paseo Testnet and preparing for mainnet deployment.
- Prerequisites
- Development Deployment
- Testnet Deployment (Paseo)
- Production Deployment
- Troubleshooting
- Security Best Practices
This section covers the installation of Polkadot SDK dependencies required for building and deploying the FintraDex parachain. For detailed information, refer to the official Polkadot SDK installation guide.
- Operating System: Linux (Ubuntu 20.04+ recommended), macOS, or Windows with WSL2
- CPU: 4+ cores recommended
- RAM: 16GB+ recommended
- Storage: 100GB+ SSD for blockchain data
- Network: Stable internet connection with open ports
Install Homebrew: If you don't have Homebrew installed, install it first:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Support for Apple Silicon: If you're using an Apple Silicon Mac (M1/M2/M3), ensure you have Rosetta 2 installed if needed for compatibility.
-
Open Terminal application
-
Update Homebrew:
brew update
-
Install OpenSSL:
brew install openssl
Note: OpenSSL is required for cryptography operations including public/private key pair generation and transaction signature validation.
-
Install Rust using rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Follow the prompts to proceed with default installation.
-
Update your shell environment:
source ~/.cargo/env
-
Configure Rust toolchain:
rustup default stable rustup update rustup target add wasm32-unknown-unknown rustup component add rust-src
-
Install CMake:
brew install cmake
-
Verify installation:
rustup show
You should see output showing your active toolchain with
wasm32-unknown-unknowntarget installed.
Check your Linux distribution documentation for package management. At minimum, you need:
- A linker or C-compatible compiler (e.g.,
clang) curl,git,make- Cryptography package (
libssl-devoropenssl-devel)
For Ubuntu/Debian:
sudo apt install --assume-yes git clang curl libssl-dev protobuf-compilerFor Debian (with additional packages):
sudo apt install --assume-yes git clang curl libssl-dev llvm libudev-dev make protobuf-compilerFor Arch Linux:
pacman -Syu --needed --noconfirm curl git clang make protobufFor Fedora:
sudo dnf update
sudo dnf install clang curl git openssl-devel make protobuf-compilerFor OpenSUSE:
sudo zypper install clang curl git openssl-devel llvm-devel libudev-devel make protobufInstall Rust:
-
Download and install rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Follow the prompts for default installation.
-
Update your shell environment:
source $HOME/.cargo/env
-
Verify Rust installation:
rustc --version
-
Configure Rust toolchain:
rustup default stable rustup update rustup target add wasm32-unknown-unknown rustup component add rust-src
-
Verify installation:
rustup show
You should see
wasm32-unknown-unknownin the installed targets.
Windows Requirements:
- Windows 10: Version 2004 (Build 19041) or later
- Windows 11: Any version
- Windows Server: 2019 or later
-
Check Windows version:
- Windows 10 version 2004+ or Windows 11: WSL is available by default
- Older versions: See WSL manual installation
-
Open PowerShell or Command Prompt as Administrator:
- Right-click Start menu → Windows PowerShell or Command Prompt → Run as administrator
-
Install WSL:
wsl --installThis enables WSL 2, downloads the latest Linux kernel, and installs Ubuntu by default.
-
View available Linux distributions (optional):
wsl --list --online
-
Restart your computer to complete the installation.
-
Open Ubuntu from the Start menu
-
Create a UNIX user account (username and password)
-
Update Ubuntu packages:
sudo apt update
-
Install required packages:
sudo apt install --assume-yes git clang curl libssl-dev llvm libudev-dev make protobuf-compiler
-
Install Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Follow the prompts for default installation.
-
Update your shell environment:
source ~/.cargo/env
-
Verify Rust installation:
rustc --version
-
Configure Rust toolchain:
rustup default stable rustup update rustup target add wasm32-unknown-unknown rustup component add rust-src
-
Verify installation:
rustup show
After completing the installation for your platform, verify your setup:
rustup showExpected output should show:
- Active toolchain (e.g.,
stable-x86_64-unknown-linux-gnuorstable-aarch64-apple-darwin) - Installed targets including
wasm32-unknown-unknown
After installing the base dependencies, install the following tools:
# Install chain-spec-builder
cargo install --locked staging-chain-spec-builder@10.0.0
# Install polkadot-omni-node
cargo install --locked polkadot-omni-node@0.5.0
# Install subkey (for key generation)
cargo install --force subkey --git https://github.com/paritytech/polkadot-sdk --tag v1.0.0# Clone the repository
git clone https://github.com/fintradev/fintradex.git
cd fintradex
# Build release binary
cargo build --release
# Verify build
./target/release/fintradex-node --version- Polkadot SDK Documentation: Install Polkadot SDK Dependencies
- Parachain Zero to Hero Tutorials: Step-by-step guides for building, testing, and deploying custom pallets and runtimes
For local testing and development:
# Generate development chain spec
chain-spec-builder create -t development \
--relay-chain paseo \
--para-id 1000 \
--runtime ./target/release/wbuild/fintradex-runtime/fintradex_runtime.compact.compressed.wasm \
named-preset development
# Start development node
polkadot-omni-node --chain ./chain_spec.json --devThe node will start with:
- Pre-funded accounts
- Single collator
- Fast block times
- All features enabled
For multi-node testing:
# Ensure you have zombienet installed
cargo install --locked zombienet
# Run zombienet configuration
zombienet spawn zombienet.toml- Navigate to Polkadot.js Apps
- Connect to Paseo Testnet
- Visit Polkadot Faucet
- Request 100 PAS tokens (minimum recommended for deployment)
- In Polkadot.js Apps, navigate to Network > Parachains > Parathreads
- Click "+ ParaId" button
- Submit the transaction (costs ~1 PAS)
- Verify registration in Explorer - look for
registrar.Reservedevent - Note your ParaId - you'll need it for all subsequent steps
Generate Account Keys (Stash/Controller):
# Generate stash account (sr25519)
subkey generate --scheme sr25519
# Save the output securely:
# - Secret phrase (mnemonic)
# - Public key (SS58 address)
# - Public key (hex)Generate Session Keys (Aura):
# Generate Aura session key
subkey generate --scheme sr25519
# Save the output securelyImportant Security Notes:
- Store account keys offline in a secure location
- Never share your secret phrases
- Session keys should be rotated regularly
- Use separate keys for stash and controller accounts
# Ensure you're in the project root
cd /path/to/fintradex
# Build release version
cargo build --release
# Verify WASM runtime exists
ls -lh target/release/wbuild/fintradex-runtime/fintradex_runtime.compact.compressed.wasmGenerate Plain Chain Spec:
chain-spec-builder --chain-spec-path ./fintradex_plain_chain_spec.json create \
--relay-chain paseo \
--para-id YOUR_PARA_ID \
--runtime target/release/wbuild/fintradex-runtime/fintradex_runtime.compact.compressed.wasm \
named-preset local_testnetEdit Chain Specification:
Open fintradex_plain_chain_spec.json and update:
{
"name": "FintraDex Testnet",
"id": "fintradex_testnet",
"protocolId": "fintradex",
"para_id": YOUR_PARA_ID,
"parachainInfo": {
"parachainId": YOUR_PARA_ID
},
"balances": {
"balances": [
["YOUR_STASH_ADDRESS", "1000000000000000000000"] // 1000 tokens
]
},
"collatorSelection": {
"invulnerables": [
"YOUR_COLLATOR_SS58_ADDRESS"
]
},
"session": {
"keys": [
[
"YOUR_COLLATOR_SS58_ADDRESS",
"YOUR_COLLATOR_SS58_ADDRESS",
{
"aura": "YOUR_AURA_PUBLIC_KEY_HEX"
}
]
]
},
"sudo": {
"key": "YOUR_SUDO_ACCOUNT_SS58_ADDRESS"
}
}Convert to Raw Format:
chain-spec-builder --chain-spec-path ./fintradex_raw_chain_spec.json convert-to-raw fintradex_plain_chain_spec.jsonpolkadot-omni-node export-genesis-wasm \
--chain fintradex_raw_chain_spec.json \
para-wasmpolkadot-omni-node export-genesis-head \
--chain fintradex_raw_chain_spec.json \
para-stateVerify Files:
# Check file sizes (should be reasonable)
ls -lh para-wasm para-state
# WASM should be ~2-5MB
# State should be ~100-500KB- Navigate to Polkadot.js Apps
- Connect to Paseo Testnet
- Go to Network > Parachains > Parathreads
- Click "+ Parathread" or "+ Parachain"
- Upload files:
- Code: Upload
para-wasmfile - Initial State: Upload
para-statefile
- Code: Upload
- Submit transaction (requires sufficient PAS balance)
- Check Explorer for
registrar.Registeredevent - Verify your ParaId appears in the parachains list
- Wait for next session to start producing blocks
polkadot-omni-node key generate-node-key \
--base-path ./data \
--chain fintradex_raw_chain_spec.jsonNote the node key location (usually ./data/chains/fintradexidXXXX/network/secret_ed25519)
polkadot-omni-node \
--collator \
--chain fintradex_raw_chain_spec.json \
--base-path ./data \
--port 40333 \
--rpc-port 9944 \
--ws-port 9944 \
--rpc-cors all \
--name "YourCollatorName" \
--node-key-file ./data/chains/fintradexidXXXX/network/secret_ed25519 \
-- \
--sync warp \
--chain paseo \
--execution wasm \
--port 50343 \
--rpc-port 9988 \
--ws-port 9988Command Breakdown:
--collator: Run as collator--chain: Path to raw chain spec--base-path: Data directory--port: Parachain P2P port--rpc-port: Parachain RPC port--ws-port: Parachain WebSocket port--node-key-file: Node identity key--: Separator for relay chain arguments--chain paseo: Connect to Paseo relay chain--sync warp: Fast sync mode
# Check logs for:
# - "Parachain id: XXXX"
# - "Relay chain: paseo"
# - "Collator key: ..."
# - "Imported block #X"curl -H "Content-Type: application/json" \
--data '{
"jsonrpc":"2.0",
"method":"author_insertKey",
"params":[
"aura",
"YOUR_SECRET_PHRASE",
"YOUR_PUBLIC_KEY_HEX"
],
"id":1
}' \
http://localhost:9944Alternative: Use Polkadot.js Apps
- Connect to your local node (ws://localhost:9944)
- Go to Developer > RPC Calls
- Call
author.insertKeywith:keyType: "aura"suri: Your secret phrasepublicKey: Your public key hex
# Check session keys via RPC
curl -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"author_hasSessionKeys","params":["YOUR_PUBLIC_KEY_HEX"],"id":1}' \
http://localhost:9944- Navigate to Developer > Extrinsics
- Select account with PAS balance
- Call
onDemand.placeOrderAllowDeath - Set parameters:
maxAmount: Maximum PAS to spend (e.g., 1000000000000)paraId: Your parachain ID
- Submit transaction
- Check Network > Parachains for your parachain status
- Verify blocks are being produced
- Monitor in Explorer for block production
- GitHub Issues: https://github.com/fintradev/fintradex/issues
- Discussions: https://github.com/fintradev/fintradex/discussions
- Telegram: https://t.me/fintradex
- Email: team@fintradex.io
- Never commit keys to git
- Use environment variables for sensitive data
- Rotate keys regularly
- Use hardware security modules for production
- Store backups encrypted and offline
- Run nodes in isolated networks
- Limit RPC access to trusted IPs
- Use strong authentication
- Keep software updated
- Monitor for suspicious activity
- Follow principle of least privilege
- Implement audit logging
- Regular security reviews
- Incident response plan
- Regular backups
- Polkadot Documentation
- Substrate Documentation
- Cumulus Documentation
- FintraDex Technical Whitepaper
- Hyperbridge Documentation
Last Updated: 2025-11-06
Maintained by: FintraDex Team
For Support: team@fintradex.io