TESTNET TESTNET SIM BLOCK EPOCH VALIDATORS TESTNET-1 // OPERATIONAL
Documentation

Developer and operator documentation. Documentation développeur et opérateur.

This page covers the practical protocol surface: how to run the node, how to consume the API, how to understand the exposed endpoints and how to operate CURS3D coherently. Cette page couvre la surface pratique du protocole : comment lancer le node, consommer l'API, comprendre les endpoints exposés et opérer CURS3D de façon cohérente.

Quickstart

The following workflow matches the current binary interface and deployment path of the project.Le workflow suivant correspond à l'interface binaire actuelle et au chemin de déploiement du projet.

terminal
$ git clone https://github.com/Pazificateur69/curs3d.git
$ cd curs3d
$ cargo build --release

$ printf '%s\n' 'YOUR_SECURE_PASSWORD_HERE' > validator.password
$ ./target/release/curs3d wallet --output validator.json --password-file validator.password

$ ./target/release/curs3d genesis \
  --output genesis.public-testnet.json \
  --validator-wallet validator.json \
  --validator-password-file validator.password

$ ./target/release/curs3d node \
  --validator-wallet validator.json \
  --validator-password-file validator.password \
  --genesis-config genesis.public-testnet.json

CLI

CommandCommande RoleRôle
curs3d nodeRun a node with validator, bootnode and genesis options.Lancer un node avec options validateur, bootnode et genesis.
curs3d walletCreate an encrypted wallet for operations.Créer un wallet chiffré pour les opérations.
curs3d infoInspect address and public key.Inspecter l'adresse et la clé publique.
curs3d sendSubmit a transfer through the RPC path.Soumettre un transfert via le chemin RPC.
curs3d stakeLock stake for validator participation.Verrouiller du stake pour la participation validateur.
curs3d statusInspect local or remote chain status.Inspecter le statut de la chaîne en local ou à distance.
curs3d unstakeWithdraw staked tokens (unlock after delay).Retirer du stake (déverrouillage après délai).
curs3d deploy-tokenDeploy a CUR-20 token (name, symbol, supply).Déployer un token CUR-20 (nom, symbole, supply).
curs3d token-transferTransfer CUR-20 tokens to a recipient.Transférer des tokens CUR-20 à un destinataire.
curs3d genesisGenerate genesis configuration for a new chain.Générer la configuration genesis pour une nouvelle chaîne.
curs3d bootnode-addressDisplay public bootnode multiaddresses.Afficher les multi-adresses bootnode publiques.

API

Method Route DescriptionDescription
GET/api/healthzLiveness and freshness signal.Signal de vie et de fraîcheur de la chaîne.
GET/api/metricsMetrics endpoint for monitoring.Endpoint métriques pour le monitoring.
GET/api/statusChain height, finalized height, epoch and validator count.Hauteur de chaîne, finalité, epoch et nombre de validateurs.
GET/api/block/:heightSingle block view.Vue bloc unitaire.
GET/api/blocksRecent block summaries.Résumé des blocs récents.
GET/api/account/:addressAccount state.État de compte.
GET/api/account/:address/proofAccount proof export.Export de preuve de compte.
GET/api/contract/:address/storage/:key/proofStorage proof export.Export de preuve de stockage.
GET/api/tx/:hashTransaction lookup.Recherche transaction.
GET/api/receipt/:hashReceipt lookup.Recherche receipt.
GET/api/logsLog query surface.Surface de requête logs.
GET/api/validatorsActive validators.Validateurs actifs.
POST/api/faucet/requestJSON faucet request.Requête faucet JSON.
POST/api/tx/submitSubmit a signed transaction.Soumettre une transaction signée.
POST/api/tx/estimateEstimate execution path and cost.Estimer le coût et le chemin d'exécution.
GET/api/pendingMempool pending transactions.Transactions en attente dans le mempool.
GET/api/tokensCUR-20 token registry.Registre de tokens CUR-20.
GET/api/token/:addressToken metadata (name, symbol, supply).Métadonnées token (nom, symbole, supply).
GET/api/token/:addr/balance/:ownerCUR-20 token balance for an owner.Balance CUR-20 d'un propriétaire.
GET/api/governance/proposalsGovernance proposal list.Liste des propositions de gouvernance.
GET/api/governance/proposal/:idSingle proposal details.Détails d'une proposition.
GET/api/account/:addr/transactionsList transactions involving an address (sender or recipient).Liste des transactions impliquant une adresse (sender ou recipient).
GET/api/block-by-hash/:hashBlock lookup by 32-byte block hash.Lookup d'un bloc par hash 32 octets.
GET/api/genesisGenesis anchor for light clients (chain_id, genesis_hash, state_root).Ancrage genesis pour light clients (chain_id, genesis_hash, state_root).
GET/api/headersSigned-header range for light-client sync. Params: from, to, limit.Plage de headers signés pour sync light client. Params: from, to, limit.
GET/api/header/:heightSingle signed header.Header signé unique.
GET/api/finalityFinalized height + finalized hash.Hauteur et hash finalisés.
POST/ethEthereum-compatible JSON-RPC subset (Metamask, ethers.js, wagmi for reads).JSON-RPC compatible Ethereum, sous-ensemble lecture (Metamask, ethers.js, wagmi).
WS/wsWebSocket: real-time new_block, new_transaction, finality events.WebSocket : événements new_block, new_transaction, finality en temps réel.

Log filters (eth-style)Filtres de logs (style eth)

/api/logs accepts contract, topic (any-position match), topic0..topic3 (positional, like eth_getLogs), from_block, to_block and limit./api/logs accepte contract, topic (match toute position), topic0..topic3 (positionnel, comme eth_getLogs), from_block, to_block et limit.

Ethereum-compatible JSON-RPCJSON-RPC compatible Ethereum

POST a JSON-RPC 2.0 request to /eth. Supported methods: eth_chainId, eth_blockNumber, eth_gasPrice, eth_feeHistory, eth_getBalance, eth_getTransactionCount, eth_getCode, eth_getStorageAt, eth_getBlockByNumber, eth_getBlockByHash, eth_getTransactionByHash, eth_getTransactionReceipt, eth_getLogs, eth_estimateGas, net_version, web3_clientVersion, web3_sha3. Send-transaction methods reject because CURS3D uses Dilithium not ECDSA — submit native txs via POST /api/tx/submit.POSTer une requête JSON-RPC 2.0 à /eth. Méthodes supportées : voir la version EN au-dessus. Les méthodes d'envoi de transactions refusent car CURS3D utilise Dilithium et non ECDSA — soumettez les txs natives via POST /api/tx/submit.

Faucet hardeningDurcissement du faucet

The faucet enforces a per-address cooldown (1 h) AND a per-IP cooldown (configurable via CURS3D_FAUCET_IP_COOLDOWN_SECS, default 1 h). To require captcha verification, set CURS3D_FAUCET_REQUIRE_CAPTCHA=1 AND CURS3D_FAUCET_CAPTCHA_SECRET=<random> on the node, then configure your reverse proxy (nginx auth_request) to verify hCaptcha/Turnstile and forward X-Captcha-Verified: 1 + X-Captcha-Secret: <same secret>. The shared secret prevents direct curl bypass.Le faucet applique un cooldown par adresse (1 h) ET un cooldown par IP (configurable via CURS3D_FAUCET_IP_COOLDOWN_SECS, défaut 1 h). Pour exiger une vérification captcha, définir CURS3D_FAUCET_REQUIRE_CAPTCHA=1 ET CURS3D_FAUCET_CAPTCHA_SECRET=<random> sur le node, puis configurer le reverse proxy (nginx auth_request) pour vérifier hCaptcha/Turnstile et transmettre X-Captcha-Verified: 1 + X-Captcha-Secret: <même secret>. Le shared secret bloque les bypass curl directs.

Rust SDK for smart contractsSDK Rust pour smart contracts

Write CURS3D contracts as plain no_std Rust crates: the curs3d-contract crate (in sdk/rust/) provides safe wrappers for the host ABI, a heap-base bump allocator, a panic handler, and the entrypoint!() macro that emits the curs3d_call symbol the VM expects. Five examples are included: counter (~530 B), ERC-20-style token, multisig, NFT, vesting. See example #11 on the Examples page.Écrivez les contrats CURS3D comme des crates Rust no_std classiques : le crate curs3d-contract (dans sdk/rust/) fournit des wrappers sûrs pour l'ABI host, un bump allocator ancré sur le heap-base, un panic handler et la macro entrypoint!() qui émet le symbole curs3d_call attendu par la VM. Cinq exemples inclus : counter (~530 B), token ERC-20, multisig, NFT, vesting. Voir l'exemple #11 sur la page Examples.

Light client protocolProtocole light client

A light client only downloads signed headers and verifies them locally. The CURS3D node exposes /api/genesis (anchor), /api/headers?from=N&limit=K (range), /api/header/:height (single) and /api/finality. Streaming via WebSocket: subscribe to the new_header event (or use eth_subscribe(newHeads) for ETH-tooling compatibility). The verifier curs3d::light::LightClient validates Dilithium signatures, prev-hash links and Merkle proofs. Try it: curs3d light-sync --api https://api.curs3d.fr.Un light client ne télécharge que les headers signés et les vérifie localement. Le node CURS3D expose /api/genesis (ancrage), /api/headers?from=N&limit=K (plage), /api/header/:height (unique) et /api/finality. Streaming via WebSocket : s'abonner à l'événement new_header (ou utiliser eth_subscribe(newHeads) pour compat tooling Ethereum). Le verifier curs3d::light::LightClient valide les signatures Dilithium, les liens prev-hash et les preuves Merkle. À essayer : curs3d light-sync --api https://api.curs3d.fr.

Proofs and verificationPreuves et vérification

CURS3D's trust-layer thesis becomes stronger when accounts, storage and headers can be verified instead of blindly trusted. Proof exports and light-client posture are therefore part of the public documentation surface.La thèse trust-layer de CURS3D devient plus forte quand les comptes, le stockage et les headers peuvent être vérifiés au lieu d'être simplement crus. Les exports de preuves et la posture light client font donc partie de la surface de documentation publique.

OperationsOpérations

  • Network: multi-node testnet with 4 BFT validators across independent Oracle Cloud instancesRéseau : testnet multi-node avec 4 validateurs BFT sur des instances Oracle Cloud indépendantes
  • Live API: https://api.curs3d.frAPI live : https://api.curs3d.fr
  • Live Explorer: https://explorer.curs3d.frExplorer live : https://explorer.curs3d.fr
  • WebSocket: wss://api.curs3d.fr/wsWebSocket : wss://api.curs3d.fr/ws
  • P2P Bootnode: api.curs3d.fr:4337Bootnode P2P : api.curs3d.fr:4337
  • Consensus: BFT PoS with 2/3 stake-weighted finality, equivocation slashingConsensus : BFT PoS avec finalité 2/3 pondérée par stake, slashing par équivocation
  • Local HTTP API: 127.0.0.1:8080 (22 endpoints + WebSocket)API HTTP locale : 127.0.0.1:8080 (22 endpoints + WebSocket)
  • Local TCP RPC: 127.0.0.1:9545 (CLI only)TCP RPC local : 127.0.0.1:9545 (CLI uniquement)
  • Rate limiting: 60 GET/min, 10 POST/min per IPRate limiting : 60 GET/min, 10 POST/min par IP
  • P2P rate limiting: per-peer tracking with escalating bans + reputation scoringRate limiting P2P : suivi par peer avec bans escaladants + scoring de réputation
  • Faucet: 100 CUR per request, 1 hour cooldown per addressFaucet : 100 CUR par requête, 1h de cooldown par adresse
  • Block production: every 10 secondsProduction de blocs : toutes les 10 secondes
  • Epoch length: 32 blocks (validator set frozen per epoch)Longueur d'epoch : 32 blocs (set de validateurs gelé par epoch)
  • Minimum stake: 1,000 CURStake minimum : 1 000 CUR
  • Block gas limit: 10,000,000Gas limit par bloc : 10 000 000
  • Security: bounded P2P deserialization (16MB), reorg depth limit (64 blocks), nonce floor validation, base_fee floorSécurité : désérialisation P2P bornée (16MB), limite reorg (64 blocs), validation nonce floor, base_fee minimum
  • Governance: snapshot-based voting (anti double-vote), timelock execution (32 blocks + epoch alignment)Gouvernance : vote par snapshot (anti double-vote), exécution avec timelock (32 blocs + alignement epoch)
  • Wallet encryption: Argon2id with m=64MB, t=3, p=4 + AES-256-GCMChiffrement wallet : Argon2id avec m=64MB, t=3, p=4 + AES-256-GCM
  • HA: strict startup checks, auto-restart, healthcheck cron, TLS auto-renewHA : checks de démarrage stricts, auto-restart, healthcheck cron, TLS auto-renew
  • Deployment: Docker, systemd, nginx TLS, multi-node deploy scriptsDéploiement : Docker, systemd, nginx TLS, scripts deploy multi-node
  • SDKs: JavaScript (@curs3d/sdk) and Python (curs3d)SDKs : JavaScript (@curs3d/sdk) et Python (curs3d)

Public surface disciplineDiscipline de surface publique

Docs, explorer, whitepaper, deployment notes and protocol code should describe the same project. CURS3D becomes more credible when every public surface agrees on what exists and what still needs to be hardened.La doc, l'explorer, le whitepaper, les notes de déploiement et le code protocolaire doivent décrire le même projet. CURS3D devient plus crédible quand chaque surface publique est d'accord sur ce qui existe et ce qui doit encore être durci.