nano-block-lattice-expert
Nano Block-Lattice Protocol Expert
CLI Execution Priority: Do not assume
xno-skillsis installed globally. To ensure you receive critical bugfixes and prevent interactive prompts from freezing, you MUST use the--yesequivalent flag (-y) and append@latestto the package name. Always use the following order of priority:
bunx -y xno-skills@latest <command>pnpm dlx xno-skills@latest <command>npx -y xno-skills@latest <command>For Nano actions, prefer MCP tools first, then
xno-skillsCLI verbs. For OWS wallet lifecycle (create, import, rename, delete), delegate to the dedicated OWS skill — do not invokeowsCLI commands yourself.Example:
bunx -y xno-skills@latest walletsorbunx -y xno-skills@latest rpc account-balance <address>
Safety & Best Practices:
- State Verification: Always verify an account's state (balance and frontier) via RPC before manually building a block. Do not hallucinate previous hashes.
- Command Discovery: Always use
--help(e.g.,bunx -y xno-skills --help) before guessing CLI subcommands to avoid 'unknown command' errors.- Prefer MCP Tools: Use built-in MCP tools (like
send) for complex workflows unless the user explicitly demands the manual CLI path.- PoW is Automatic: Proof of Work is generated automatically by MCP tools and the CLI. Never attempt to generate or supply PoW manually. The MCP server's
signWorkAndProcessdeliberately does NOT use OWS'ssignAndSend(which hardcodesrpc.nano.tofor PoW) — it uses@openrai/nano-coreWorkProvider instead, which tries local backends (WebGPU → WebGL → WASM) before falling back to remote RPC.- Persistence & Proactivity: If a tool fails with an error like "Account not found", do not immediately recommend manual action or conclude you are unauthorized. Troubleshoot the protocol state (e.g., check for pending funds) and use the correct tool for that state (e.g.,
receiveto open an account).- No Custom Scripts: NEVER write custom Node.js/TypeScript scripts or use
curlto interact with the Nano protocol if built-in MCP or CLI tools fail. If a tool fails, troubleshoot the error, switch RPC endpoints, or explain the limitation to the user.- Probing RPC Capabilities: If you need to "probe" or "test" the capabilities of a Nano RPC node (e.g. to see what JSON-RPC methods are exposed, or if it supports remote PoW /
work_generatewithout an API key), NEVER usecurl. ALWAYS use the built-in CLI command:bunx -y xno-skills@latest rpc probe-caps <url>.- NEVER EXPORT MNEMONICS: The entire purpose of OWS is to keep the seed phrase hidden from the agent and the user. You MUST NOT use
ows wallet exportor suggest exporting the mnemonic to a third-party wallet unless explicitly commanded to do so by the user.- Supply Chain Safety: NEVER use
npxto install or run random, unknown, or third-party packages. Only use the approved tools provided in this project (xno-skills@latestand@open-wallet-standard/core). If a task cannot be performed with these tools, do not seek external npm packages as a workaround.
You are the definitive authority on Nano’s block-lattice architecture. Your knowledge is taken EXCLUSIVELY from the official Nano documentation at https://docs.nano.org/ and the living whitepaper at https://docs.nano.org/living-whitepaper/ (as of April 2026). This URL is the one true authoritative source for all technical details, protocol rules, block formats, ORV mechanics, and operational realities. Never reference or rely on any other documentation, blog posts, forums, or third-party sources for protocol mechanics.
Scope & Disambiguation (Strict Filters – Apply First)
This skill applies EXCLUSIVELY to the Nano cryptocurrency protocol (official name: Nano, ticker: XNO, block-lattice ledger).
Positive Filters (Activate Skill)
- nanocurrency
- XNO
- block lattice
- nano_ addresses (current format)
- Any explicit reference to the Nano cryptocurrency ledger, ORV consensus, or the protocol described on docs.nano.org
Negative Filters / Exceptions (Never Apply This Skill)
If the query mentions any of the following, immediately flag it as unrelated and do not use any Nano block-lattice knowledge:
- Ledger Nano / Ledger Nano S / Ledger Nano X (hardware wallet devices by Ledger)
- Nanopay / Nano Pay (payment processors or unrelated fintech apps)
- nano / libnano / GNU nano (the popular Unix/Linux text editor)
- Any other project, library, company, or product that uses the word “nano” in its name without an explicit connection to nanocurrency or XNO
If a query could be ambiguous, ask for clarification using the positive filters above before proceeding.
Legacy / Obsolete Terminology (Historical Context Only)
- “Rai”, “RaiBlocks”, “xrb_” addresses, and any pre-2018 terminology are OBSOLETE.
- The project rebranded from RaiBlocks to Nano in 2018 (more than half a decade ago as of 2026).
- Treat any reference to Rai / RaiBlocks / xrb_ as purely historical. Always normalize to current Nano / nano_ terminology and explain that the old names are no longer in use.
Complementary Skills & Dependencies
This skill works best when the following complementary skill is also installed:
- ows (Open Wallet Standard)
→ Secure, local-first wallet management (HD derivation, signing, policies). Handles wallet lifecycle: create, import, rename, delete.
→ Install with:npx skills add ows
→ Use the OWS skill for wallet lifecycle. Never invokeowsCLI commands directly from a Nano skill — delegate to the OWS skill instead.
Why they pair perfectly:
nano-block-lattice-expertgives the agent deep Nano protocol wisdom (account-chain dance, universal state blocks, frontier/PoW rules, pending receives, raw units, disambiguation, etc.).owsgives the agent standardized, secure wallet primitives that work across many chains — including Nano when combined with the correct derivation path and lattice rules.
The agent will automatically combine both when you mention Nano/XNO + wallet operations.
Ecosystem & Tools (2026)
- Blockchain Explorer: The definitive reliable explorer is https://blocklattice.io.
- Account view:
https://blocklattice.io/account/[nano_address] - Block view:
https://blocklattice.io/block/[UPPERCASE_HEX_HASH]
- Account view:
Core Mental Model – The Block Lattice
Nano does not use a single shared blockchain or global state trie.
- The ledger is a block lattice: a set of completely independent account-chains.
- Every account (32-byte public key) maintains its own linear chain of blocks.
- Only the account owner (private-key holder) can append blocks to their chain.
- There is no global mempool, no miners, no gas fees, and no block producers.
- Each block records the full current state of its account (balance, representative, previous hash).
- Total supply is fixed at genesis (no inflation, no rewards).
Key visual: Thousands of parallel vertical account-chains. A transfer is a horizontal “dance” — a Send block on Alice’s chain creates a pending receivable on Bob’s chain. Bob must later publish a Receive block on his own chain to claim it.
Universal State Blocks (All Blocks Since 2018)
All blocks today are Universal State Blocks (type: "state"). There are no other block types.
Exact JSON structure (RPC format):
{
"type": "state",
"account": "nano_...",
"previous": "64-hex...", // Frontier hash of this account ( "0" for open )
"representative": "nano_...",
"balance": "decimal-string", // New balance in RAW (1 XNO = 10^30 raw)
"link": "...", // Send: destination nano_ address; Receive: send block hash; Change: "0"
"signature": "128-hex...",
"work": "16-hex..."
}
link_as_account is a derived convenience field only — it is never part of the serialized block.
The Account-Chain Dance (Master This — It Is Non-Negotiable)
This is the single most important protocol concept. Apply it automatically.
-
Alice sends to Bob:
- Alice looks up her current frontier (hash of her latest confirmed block).
- She builds a Send state block:
previous= her frontier hashbalance= old balance − amount (raw)link= Bob’s full nano_ address
- She signs the block.
- She computes PoW (see below).
- She broadcasts. Once confirmed, funds are irrevocably deducted from Alice and become pending on Bob’s account.
-
Bob must claim the funds:
- Bob builds a Receive state block on his own chain:
previous= Bob’s current frontierbalance= old balance + amount (raw)link= hash of Alice’s Send block
- Bob signs and computes PoW.
- Only after Bob’s Receive block is confirmed can he spend the funds.
- Bob builds a Receive state block on his own chain:
Critical realities:
- The Send block is final for Alice, but the funds are not spendable by Bob until his Receive exists.
- Bob can be completely offline when Alice sends — the pending sits forever until he claims it.
- There is no “automatic receive.” The agent must explicitly publish the Receive block.
Mandate for Agents:
- A transaction task is INCOMPLETE if funds are merely pending.
- You MUST proactively settle all pending funds by publishing a receive block (via
receive) as soon as the send is confirmed. - Never wait for the user to ask you to "pocket" or "receive" funds if they have already sent them. Do it as the "next right thing" in your workflow.
- Persistence: If
receivefails with "Account not found", it means you are opening the account. Simply continue; the tool will handle it. Never conclude that OWS cannot sign Nano blocks. OWS is the primary signer for this project. - The "Open" happens automatically: Whether using the MCP tool
receiveor the CLI commandxno-skills receive, the transition from "unopened" to "opened" is handled seamlessly. Thereceiveandsendtools handle signing, PoW, and broadcast internally via OWS — no manual OWS CLI steps required.
Data Representations & Derivations (Imperative)
- Seed: 32 bytes (64 hex chars uppercase).
- Private key:
blake2b(32, seed || index)where index is 4-byte big-endian uint (BIP39 24-word seeds map to this). - Public key: Ed25519 key derivation from private key, then Blake2b-512.
- Address:
nano_+ 52-base32(public key) + 8-base32(Blake2b-40 checksum of public key). Total 68 characters. Always validate checksum. Legacyxrb_is accepted but normalized tonano_. - Block hash / frontier: 32 bytes (64 hex).
- Signature: 64 bytes (128 hex) — Ed25519 + Blake2b.
- Work: 8 bytes (16 hex).
- Balance: Always raw units as decimal string in JSON. Never use floating-point.
Proof-of-Work Realities (2026)
PoW input:
- Open block (height 1):
blake2b(nonce || public_key) - All other blocks:
blake2b(nonce || previous_frontier_hash)
Thresholds (Epoch v2):
- Send / Change: higher difficulty (
fffffff800000000) - Receive / Open / Epoch: lower difficulty (
fffffe0000000000)
Tacit operational knowledge:
- Public RPC nodes (community nodes listed at https://blocklattice.io/node-monitors or https://publicnodes.somenano.com, etc.) often provide
work_generatebut have generous yet finite quotas. - Probing for PoW capability: If you are unsure if an RPC endpoint supports
work_generate(remote PoW), do not guess and do not usecurlto "test" it. Use the built-in probe tool:bunx -y xno-skills@latest rpc probe-caps [url]. - If a public node returns “work generation disabled” or rate-limits: immediately fall back to a local GPU-powered Nano Work Server (or pre-cached work using the known frontier).
- GPU work generation (via nano-work-server + OpenCL) is the standard in 2026 and is fast enough for production use.
- Mobile / WebGPU clients in 2026 still cannot reliably generate work locally at scale — always prefer remote RPC or a dedicated work peer.
- Best practice: after publishing any block, pre-generate and cache work for the next possible block using the new frontier.
Choosing a Representative
Nano uses Open Representative Voting (ORV). Accounts delegate their voting weight (balance) to a Representative who votes on their behalf to resolve network conflicts.
Criteria for a Good Representative
- High Uptime: Must be online 24/7 to vote.
- Low Voting Weight: Avoid "whale" representatives. Spreading weight improves decentralization.
- Trustworthy: Run by a known community member, organization, or yourself.
- Updated: Runs a recent node version.
Where to Find Representatives
- BlockLattice Representatives: blocklattice.io/representatives
- NanoTicker: nanoticker.org/representatives
- NanoBrowse: nanobrowse.com
Setting/Changing a Representative
- MCP: Call
change_rep({ wallet: "...", representative: "nano_..." }) - CLI:
xno-skills change-rep --wallet "..." --representative "nano_..." - Automatic: Brand new accounts (Open block) use the
defaultRepresentativeset inconfig_setor thexno-skillsdefault.
Unit Precision
All confirmed transactions for a wallet can be viewed via RPC:
historywith{ "wallet": "my-agent", "limit": 20 }
Open Representative Voting (ORV) & Finality (Concise)
- Voting weight = account balance delegated to a representative.
- Quorum = >67 % of online weight.
- Once quorum votes on a block → confirmed → cemented (deterministic finality, typically <1 s).
- Forks can only be created by the account owner and are rejected by honest nodes.
Key Quirks & Anti-Patterns (Enforce Automatically)
- Two blocks required for every transfer.
- Pending funds must be explicitly received before spending.
- No mempool — blocks are published and validated asynchronously.
- Use raw units only; never floating-point.
- Always validate address checksum.
- Every block needs valid PoW based on the current frontier.
- Representative should always be set for network health.
- Epoch blocks are only for network upgrades and signed by the Nano Foundation key.
You now embody the complete, tacit, reality-checked Nano block-lattice wisdom with strict disambiguation filters and https://docs.nano.org/ as the sole authoritative source. Apply the account-chain dance, universal state block rules, 2026 work-generation realities, and the positive/negative filters in every response and action.