XPR Network Developer Skill
This skill provides comprehensive knowledge for developing on XPR Network, a fast, gas-free blockchain with WebAuthn wallet support.
Policy for AI agents (applies skill-wide): All chain writes documented in this skill use the proton CLI keychain for signing — private keys stay in the CLI's encrypted on-disk keystore, never in the agent's process memory or context. Reads use direct RPC (get_table_rows, get_account, etc.) and the relevant project's REST API. Do not introduce signing patterns that pass raw private keys to the agent (e.g. new JsSignatureProvider(['PRIV_KEY']), wallet.import_key('...'), XPR_PRIVATE_KEY in environment). See backend-patterns.md → Security: Key Isolation and ../agent-bootstrap.md for the canonical signing path.
AI-generated contract code: smart contracts are immutable once deployed and hold real assets, so treat any contract code produced with this skill as a draft. Before it reaches mainnet it needs testnet runs, review by a developer who knows XPR Network/EOSIO contracts, and, for anything holding significant value, a professional audit. The full checklist lives in safety-guidelines.md → AI-Generated Code Disclaimer.
XPR Network Overview
XPR Network is an EOS-based blockchain optimized for payments and identity:
| Feature |
Description |
| Speed |
0.5 second block times, 4000+ TPS |
| Fees |
Zero gas fees for end users |
| Accounts |
Human-readable names, 1-12 chars from a-z, 1-5, .; dots only in system/premium names (eosio.token, xmd.token) — user-registered names are dot-free |
| Wallets |
WebAuthn support (Face ID, fingerprint, security keys) |
| Contracts |
AssemblyScript/TypeScript with proton-tsc |
| Storage |
On-chain tables with RAM-based pricing |
Name Change: Proton → XPR Network
The blockchain was rebranded from Proton to XPR Network in 2024. You may see legacy references to "Proton" in:
- Package names (
@proton/cli, @proton/web-sdk, proton-tsc)
- GitHub organization (
XPRNetwork, formerly ProtonProtocol)
- Documentation and code comments
- Explorer (now
explorer.xprnetwork.org, formerly protonscan.io and proton.bloks.io)
The token symbol remains XPR and all functionality is unchanged.
Chain IDs
| Network |
Chain ID |
| Mainnet |
384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0 |
| Testnet |
71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd |
Progressive Disclosure
Load specialized modules based on your task:
Core Development
| Module |
Read When |
Key Topics |
smart-contracts.md |
Building contracts |
Tables, actions, auth, build/deploy |
cli-reference.md |
Using CLI tools |
Network, keys, deploy, queries, transfers |
web-sdk.md |
Building dApps |
Wallet connect, transactions, sessions, transfers |
backend-patterns.md |
Server-side dev |
proton CLI keychain signing (v0.3.0+), bots, key isolation |
rpc-queries.md |
Reading chain data |
RPC, Hyperion API, Light API, pagination, token balances |
testing-debugging.md |
Testing contracts |
Unit tests, testnet, debugging, logs |
accounts-permissions.md |
Account management |
Create accounts, permissions, multisig |
staking-governance.md |
Staking & voting |
XPR staking, BPs, DPoS, resource model |
Token & Identity
| Module |
Read When |
Key Topics |
token-creation.md |
Creating tokens |
Fungible tokens, issuance, vesting |
webauth-identity.md |
User identity |
WebAuth wallets, KYC, profiles, trust |
nfts-atomicassets.md |
NFT development |
Collections, schemas, minting, marketplace |
DeFi & Trading
| Module |
Read When |
Key Topics |
metalx-dex.md |
DEX integration |
MetalX DEX API reference, order format, error codes |
alcor-dex.md |
Order book + v3 AMM |
Alcor order book, concentrated-liquidity AMM, OTC, multi-chain UX |
defi-trading.md |
Trading bots/DeFi |
Trading bot patterns, swap pools, DeFi strategies |
simpledex.md |
Token launch & AMM |
SimpleDEX swaps, bonding curves, token creation, graduation |
loan-protocol.md |
Lending protocol |
LOAN protocol, supply, borrow, liquidations |
oracles-randomness.md |
Price feeds & RNG |
Oracle prices, verifiable random numbers |
Integration Patterns
| Module |
Read When |
Key Topics |
real-time-events.md |
Live updates |
Hyperion streaming, WebSockets, notifications |
payment-patterns.md |
Commerce/payments |
Payment links, invoicing, POS, subscriptions |
xpr-agents.md |
Agent jobs on xpragents.com |
Register, bid → select → fund order, multi-file delivery manifest, reviews, validators, arbitrators (canonical: xpragents.com/llms.txt) |
Infrastructure
| Module |
Read When |
Key Topics |
node-operation.md |
Running nodes |
API nodes, Block Producers, validators |
hyperion-setup.md |
Setting up history nodes |
Hyperion v4 full-history build, hardware sizing, dependency caveats, blocks.log replay, nginx/stream proxy |
hyperion-operations-caveats.md |
Running/debugging a Hyperion indexer |
Composable-template trap, Redis bloat, disk-full stalls, queue purges that lose data, 10M-range backfill, consumer coma revive, max_asc_window_days, proving action-completeness |
Safety & Reference
| Module |
Read When |
Key Topics |
safety-guidelines.md |
BEFORE modifying contracts |
Table rules, deployment safety, recovery |
troubleshooting.md |
Debugging errors |
Common errors, solutions, diagnostics |
examples.md |
Learning patterns |
PriceBattle, ProtonWall, ProtonRating |
resources.md |
Finding endpoints |
RPC URLs, docs, explorers, community |
Quick Reference
Common CLI Commands
# Install CLI
npm i -g @proton/cli
# Set network
proton chain:set proton # Mainnet
proton chain:set proton-test # Testnet
# Account info
proton account myaccount -t # With token balances
# Query table
proton table CONTRACT TABLE
# Execute action
proton action CONTRACT ACTION 'JSON_DATA' AUTHORIZATION
# Deploy contract
proton contract:set ACCOUNT ./assembly/target
Common RPC Query
import { JsonRpc } from '@proton/js';
const rpc = new JsonRpc('https://proton.eosusa.io');
const { rows } = await rpc.get_table_rows({
code: 'CONTRACT',
scope: 'CONTRACT',
table: 'TABLE',
limit: 100
});
Basic Contract Structure
import { Contract, Table, TableStore, Name, requireAuth } from 'proton-tsc';
@table("mydata")
class MyData extends Table {
constructor(
public id: u64 = 0,
public owner: Name = new Name(),
public value: string = ""
) { super(); }
@primary
get primary(): u64 { return this.id; }
}
@contract
class MyContract extends Contract {
dataTable: TableStore<MyData> = new TableStore<MyData>(this.receiver);
@action("store")
store(owner: Name, value: string): void {
requireAuth(owner);
const row = new MyData(this.dataTable.availablePrimaryKey, owner, value);
this.dataTable.store(row, this.receiver);
}
}
Basic Frontend Login
import '@proton/link'; // Required for mobile wallet support
import ProtonWebSDK from '@proton/web-sdk';
const { link, session } = await ProtonWebSDK({
linkOptions: {
chainId: '384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0',
endpoints: ['https://proton.eosusa.io']
},
selectorOptions: { appName: 'My App' }
});
// session.auth contains { actor, permission }
// Use session.transact() for transactions
Key Packages
| Package |
Purpose |
Install |
@proton/cli |
Command-line tools |
npm i -g @proton/cli |
proton-tsc |
Contract development |
npm i proton-tsc |
@proton/web-sdk |
Frontend wallet integration |
npm i @proton/web-sdk |
@proton/link |
Mobile wallet transport (required with web-sdk) |
npm i @proton/link |
@proton/js |
RPC queries |
npm i @proton/js |
Official Resources
Safety Reminders
- NEVER modify existing table structures once deployed with data - this breaks deserialization
- Always test on testnet before mainnet deployment
- Verify the target account before deploying - wrong account = overwrite existing contract
- Back up ABIs before deploying changes
- Use new tables for new features instead of modifying existing ones
- DEX deposits MUST use empty memo (
"") — any other memo (e.g. "deposit") is accepted but not credited; there is no contract path to recover it, only a discretionary manual refund by MetalX operators. Treat as fund loss. See metalx-dex.md.
- All-numeric account names (e.g.
333555) cause silent data loss in get_table_rows — see rpc-queries.md for workarounds.
1---2name: xpr-network-dev3description: XPR Network (formerly Proton) blockchain development - proton-tsc smart contracts, @proton CLI and web SDK, RPC and Hyperion queries, DeFi (MetalX, Alcor, LOAN), NFTs, the XPR Agents job board, node and Hyperion operations. Use for anything mentioning XPR, Proton, or @proton packages.4---56# XPR Network Developer Skill78This skill provides comprehensive knowledge for developing on XPR Network, a fast, gas-free blockchain with WebAuthn wallet support.910> **Policy for AI agents (applies skill-wide):** All chain **writes** documented in this skill use the **`proton` CLI keychain** for signing — private keys stay in the CLI's encrypted on-disk keystore, never in the agent's process memory or context. **Reads** use direct RPC (`get_table_rows`, `get_account`, etc.) and the relevant project's REST API. Do **not** introduce signing patterns that pass raw private keys to the agent (e.g. `new JsSignatureProvider(['PRIV_KEY'])`, `wallet.import_key('...')`, `XPR_PRIVATE_KEY` in environment). See [`backend-patterns.md` → Security: Key Isolation](backend-patterns.md#security-key-isolation) and [`../agent-bootstrap.md`](../agent-bootstrap.md) for the canonical signing path.1112> **AI-generated contract code:** smart contracts are immutable once deployed and hold real assets, so treat any contract code produced with this skill as a draft. Before it reaches mainnet it needs testnet runs, review by a developer who knows XPR Network/EOSIO contracts, and, for anything holding significant value, a professional audit. The full checklist lives in `safety-guidelines.md` → *AI-Generated Code Disclaimer*.1314## XPR Network Overview1516XPR Network is an EOS-based blockchain optimized for payments and identity:1718| Feature | Description |19|---------|-------------|20| **Speed** | 0.5 second block times, 4000+ TPS |21| **Fees** | Zero gas fees for end users |22| **Accounts** | Human-readable names, 1-12 chars from `a-z`, `1-5`, `.`; dots only in system/premium names (`eosio.token`, `xmd.token`) — user-registered names are dot-free |23| **Wallets** | WebAuthn support (Face ID, fingerprint, security keys) |24| **Contracts** | AssemblyScript/TypeScript with `proton-tsc` |25| **Storage** | On-chain tables with RAM-based pricing |2627### Name Change: Proton → XPR Network2829The blockchain was rebranded from **Proton** to **XPR Network** in 2024. You may see legacy references to "Proton" in:30- Package names (`@proton/cli`, `@proton/web-sdk`, `proton-tsc`)31- GitHub organization (`XPRNetwork`, formerly `ProtonProtocol`)32- Documentation and code comments33- Explorer (now `explorer.xprnetwork.org`, formerly `protonscan.io` and `proton.bloks.io`)3435The token symbol remains **XPR** and all functionality is unchanged.3637### Chain IDs3839| Network | Chain ID |40|---------|----------|41| Mainnet | `384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0` |42| Testnet | `71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd` |4344## Progressive Disclosure4546Load specialized modules based on your task:4748### Core Development4950| Module | Read When | Key Topics |51|--------|-----------|------------|52| `smart-contracts.md` | Building contracts | Tables, actions, auth, build/deploy |53| `cli-reference.md` | Using CLI tools | Network, keys, deploy, queries, transfers |54| `web-sdk.md` | Building dApps | Wallet connect, transactions, sessions, transfers |55| `backend-patterns.md` | Server-side dev | proton CLI keychain signing (v0.3.0+), bots, key isolation |56| `rpc-queries.md` | Reading chain data | RPC, Hyperion API, Light API, pagination, token balances |57| `testing-debugging.md` | Testing contracts | Unit tests, testnet, debugging, logs |58| `accounts-permissions.md` | Account management | Create accounts, permissions, multisig |59| `staking-governance.md` | Staking & voting | XPR staking, BPs, DPoS, resource model |6061### Token & Identity6263| Module | Read When | Key Topics |64|--------|-----------|------------|65| `token-creation.md` | Creating tokens | Fungible tokens, issuance, vesting |66| `webauth-identity.md` | User identity | WebAuth wallets, KYC, profiles, trust |67| `nfts-atomicassets.md` | NFT development | Collections, schemas, minting, marketplace |6869### DeFi & Trading7071| Module | Read When | Key Topics |72|--------|-----------|------------|73| `metalx-dex.md` | DEX integration | MetalX DEX API reference, order format, error codes |74| `alcor-dex.md` | Order book + v3 AMM | Alcor order book, concentrated-liquidity AMM, OTC, multi-chain UX |75| `defi-trading.md` | Trading bots/DeFi | Trading bot patterns, swap pools, DeFi strategies |76| `simpledex.md` | Token launch & AMM | SimpleDEX swaps, bonding curves, token creation, graduation |77| `loan-protocol.md` | Lending protocol | LOAN protocol, supply, borrow, liquidations |78| `oracles-randomness.md` | Price feeds & RNG | Oracle prices, verifiable random numbers |7980### Integration Patterns8182| Module | Read When | Key Topics |83|--------|-----------|------------|84| `real-time-events.md` | Live updates | Hyperion streaming, WebSockets, notifications |85| `payment-patterns.md` | Commerce/payments | Payment links, invoicing, POS, subscriptions |86| `xpr-agents.md` | Agent jobs on xpragents.com | Register, bid → select → fund order, multi-file delivery manifest, reviews, validators, arbitrators (canonical: xpragents.com/llms.txt) |8788### Infrastructure8990| Module | Read When | Key Topics |91|--------|-----------|------------|92| `node-operation.md` | Running nodes | API nodes, Block Producers, validators |93| `hyperion-setup.md` | Setting up history nodes | Hyperion v4 full-history build, hardware sizing, dependency caveats, blocks.log replay, nginx/stream proxy |94| `hyperion-operations-caveats.md` | Running/debugging a Hyperion indexer | Composable-template trap, Redis bloat, disk-full stalls, queue purges that lose data, 10M-range backfill, consumer coma revive, `max_asc_window_days`, proving action-completeness |9596### Safety & Reference9798| Module | Read When | Key Topics |99|--------|-----------|------------|100| `safety-guidelines.md` | **BEFORE modifying contracts** | Table rules, deployment safety, recovery |101| `troubleshooting.md` | Debugging errors | Common errors, solutions, diagnostics |102| `examples.md` | Learning patterns | PriceBattle, ProtonWall, ProtonRating |103| `resources.md` | Finding endpoints | RPC URLs, docs, explorers, community |104105---106107## Quick Reference108109### Common CLI Commands110111```bash112# Install CLI113npm i -g @proton/cli114115# Set network116proton chain:set proton # Mainnet117proton chain:set proton-test # Testnet118119# Account info120proton account myaccount -t # With token balances121122# Query table123proton table CONTRACT TABLE124125# Execute action126proton action CONTRACT ACTION 'JSON_DATA' AUTHORIZATION127128# Deploy contract129proton contract:set ACCOUNT ./assembly/target130```131132### Common RPC Query133134```javascript135import { JsonRpc } from '@proton/js';136const rpc = new JsonRpc('https://proton.eosusa.io');137138const { rows } = await rpc.get_table_rows({139 code: 'CONTRACT',140 scope: 'CONTRACT',141 table: 'TABLE',142 limit: 100143});144```145146### Basic Contract Structure147148```typescript149import { Contract, Table, TableStore, Name, requireAuth } from 'proton-tsc';150151@table("mydata")152class MyData extends Table {153 constructor(154 public id: u64 = 0,155 public owner: Name = new Name(),156 public value: string = ""157 ) { super(); }158159 @primary160 get primary(): u64 { return this.id; }161}162163@contract164class MyContract extends Contract {165 dataTable: TableStore<MyData> = new TableStore<MyData>(this.receiver);166167 @action("store")168 store(owner: Name, value: string): void {169 requireAuth(owner);170 const row = new MyData(this.dataTable.availablePrimaryKey, owner, value);171 this.dataTable.store(row, this.receiver);172 }173}174```175176### Basic Frontend Login177178```typescript179import '@proton/link'; // Required for mobile wallet support180import ProtonWebSDK from '@proton/web-sdk';181182const { link, session } = await ProtonWebSDK({183 linkOptions: {184 chainId: '384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0',185 endpoints: ['https://proton.eosusa.io']186 },187 selectorOptions: { appName: 'My App' }188});189190// session.auth contains { actor, permission }191// Use session.transact() for transactions192```193194---195196## Key Packages197198| Package | Purpose | Install |199|---------|---------|---------|200| `@proton/cli` | Command-line tools | `npm i -g @proton/cli` |201| `proton-tsc` | Contract development | `npm i proton-tsc` |202| `@proton/web-sdk` | Frontend wallet integration | `npm i @proton/web-sdk` |203| `@proton/link` | Mobile wallet transport (required with web-sdk) | `npm i @proton/link` |204| `@proton/js` | RPC queries | `npm i @proton/js` |205206## Official Resources207208- **Documentation**: https://docs.xprnetwork.org209- **GitHub**: https://github.com/XPRNetwork210- **Block Explorer**: https://explorer.xprnetwork.org211- **Resources Portal**: https://resources.xprnetwork.org (buy RAM, etc.)212213---214215## Safety Reminders2162171. **NEVER modify existing table structures** once deployed with data - this breaks deserialization2182. **Always test on testnet** before mainnet deployment2193. **Verify the target account** before deploying - wrong account = overwrite existing contract2204. **Back up ABIs** before deploying changes2215. **Use new tables** for new features instead of modifying existing ones2226. **DEX deposits MUST use empty memo** (`""`) — any other memo (e.g. `"deposit"`) is accepted but **not credited**; there is no contract path to recover it, only a discretionary manual refund by MetalX operators. Treat as fund loss. See `metalx-dex.md`.2237. **All-numeric account names** (e.g. `333555`) cause silent data loss in `get_table_rows` — see `rpc-queries.md` for workarounds.