7aychain is a Layer 1 blockchain built to answer one question: is this actor actually here? Validators form witness circles, measure network latency between peers, and triangulate positions — no GPS, no external oracles, no special hardware. Presence is verified through the protocol itself and finalized on-chain with quorum consensus.
The chain runs on the 7ay Proof of Presence Protocol, where every presence declaration goes through an epoch-bound lifecycle: declared, attested by witnesses, triangulated, and finalized by validators.
Website · Contributing · Security · License
Get running in three commands — clone, build, and start a local devnet. Then use the Laud Networks CLI to interact with every module on the chain.
git clone https://github.com/7ayLabs/7aychain.git && cd 7aychain
cargo build --release
./target/release/seveny-node --devBuilding 7aychain requires a Rust toolchain, Clang/LLVM, and protobuf.
Install Rust and the WASM target:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add wasm32-unknown-unknownThen install platform-specific dependencies:
macOS
brew install llvm cmake protobufUbuntu / Debian
sudo apt-get update
sudo apt-get install -y clang libclang-dev protobuf-compiler pkg-config cmake build-essentialFedora / RHEL
sudo dnf install clang clang-devel protobuf-compiler cmake pkg-configWindows
Install Visual Studio Build Tools with the "C++ build tools" workload, then:
choco install llvm cmake protocOr with Scoop:
scoop install llvm cmake protobufgit clone https://github.com/7ayLabs/7aychain.git
cd 7aychain
cargo build --releaseThe binary is located at ./target/release/seveny-node.
cargo test --workspace| Minimum | Recommended | |
|---|---|---|
| CPU | 4 cores | 8+ cores |
| RAM | 8 GB | 16 GB |
| Storage | 50 GB SSD | 100 GB NVMe SSD |
| Network | 10 Mbit/s | 25+ Mbit/s |
Validators running witness-circle triangulation and ZK verification benefit from higher single-thread performance. Apple Silicon (M1 Pro/Max/Ultra) and modern x86-64 (AMD Zen 3+, Intel 12th gen+) are well suited.
Start a single-node dev chain with instant-seal and pre-funded accounts (Alice, Bob, Charlie, Dave, Eve, Ferdie):
./target/release/seveny-node --devWith debug logging:
RUST_LOG=debug ./target/release/seveny-node --devRun a single validator on the local testnet:
./target/release/seveny-node \
--alice \
--validator \
--chain local \
--base-path /tmp/alice \
--rpc-port 9944 \
--rpc-cors all \
--rpc-methods unsafe \
--scanner-mode mock \
--mock-devices 15Run the full network with Alice natively and the remaining validators in Docker:
# 1. Start Alice natively (real or mock scanning)
devnet/scripts/run-native-alice.sh
# 2. Start Bob, Charlie, Dave, Eve, Ferdie in Docker
cd devnet
docker compose -f docker-compose.hybrid.yml up -d
# 3. Monitor the network
devnet/scripts/monitor.shEach node gets its own RPC port:
| Node | RPC Port | P2P Port |
|---|---|---|
| Alice (native) | 9944 | 30333 |
| Bob | 9945 | 30334 |
| Charlie | 9946 | 30335 |
| Dave | 9947 | 30336 |
| Eve | 9948 | 30337 |
| Ferdie | 9949 | 30338 |
Stop and reset:
docker compose -f docker-compose.hybrid.yml down # stop Docker nodes
docker compose -f docker-compose.hybrid.yml down -v # stop + clear chain state| Flag | Description |
|---|---|
--dev |
Run in development mode with temporary storage |
--chain <spec> |
Chain specification (dev, local) |
--validator |
Enable validator mode |
--base-path <path> |
Database and keystore location |
--rpc-port <port> |
JSON-RPC port — serves both HTTP and WebSocket (default: 9944) |
--rpc-cors <origins> |
Allowed RPC origins (all for development) |
--rpc-methods <mode> |
RPC method set (safe, unsafe) |
--rpc-external |
Listen on all interfaces (0.0.0.0) |
--port <port> |
P2P network port (default: 30333) |
--name <name> |
Node display name |
--scanner-mode <mode> |
Device scanner mode (latency, mock) |
--mock-devices <n> |
Number of simulated devices in mock mode |
--scan-interval <secs> |
Seconds between device scans (default: 6) |
--scanner-pos-x/y/z <n> |
Scanner position coordinates |
Quick start with a single instant-seal devnet node:
cd devnet
docker compose -f docker-compose.dev.yml up -d --buildBlocks are produced only when extrinsics are submitted.
| Port | Service |
|---|---|
9944 |
JSON-RPC (HTTP + WebSocket) |
30333 |
P2P |
Stop and reset:
docker compose -f docker-compose.dev.yml down # stop
docker compose -f docker-compose.dev.yml down -v # stop + clear chain stateAll scripts are in devnet/scripts/:
| Script | Description |
|---|---|
dev.sh |
Start/stop single-node devnet (Docker or native) |
dev.sh native |
Run native binary without Docker |
dev.sh stop |
Stop the Docker container |
dev.sh reset |
Stop + clear chain state |
run-native-alice.sh |
Run Alice natively with real device scanning |
monitor.sh |
Real-time health monitor for multi-node devnet |
Interactive testing suite for all protocol features.
pip install substrate-interface
python3 devnet/scripts/laud-cli.pyConnects to ws://127.0.0.1:9944 by default. Custom endpoint:
python3 devnet/scripts/laud-cli.py --url ws://host:port| Module | Operations |
|---|---|
presence |
declare, commit, reveal, vote, finalize, slash, quorum |
epoch |
schedule, start, close, finalize, register, update, force |
validator |
register, activate, deactivate, withdraw, stake, slash |
pbt |
position, claim, attest, verify, setup, test |
triangulation |
multilaterate, centroid, track |
dispute |
open, evidence, vote, resolve |
device |
register, scan, trust |
lifecycle |
register, destroy, status |
vault |
create, share, recover, register-file, request-unlock, authorize-unlock |
zk |
prove, verify |
governance |
propose, vote, delegate |
semantic |
link, trust, query |
boomerang |
send, verify |
autonomous |
detect, report |
octopus |
create, join, manage |
storage |
store, retrieve, expire |
Pre-loaded accounts: alice, bob, charlie, dave, eve, ferdie.
Connect the hosted Polkadot.js Apps to your local node:
Settings → Custom Endpoint → ws://127.0.0.1:9944
curl -H "Content-Type: application/json" \
-d '{"id":1, "jsonrpc":"2.0", "method":"system_health"}' \
http://127.0.0.1:9944use subxt::{OnlineClient, PolkadotConfig};
let api = OnlineClient::<PolkadotConfig>::from_url("ws://127.0.0.1:9944").await?;const { ApiPromise, WsProvider } = require("@polkadot/api");
const api = await ApiPromise.create({ provider: new WsProvider("ws://127.0.0.1:9944") });See CONTRIBUTING.md for guidelines.
See SECURITY.md for our vulnerability disclosure policy.
7aychain is licensed under the Business Source License 1.1.