{"network": "Vordium Testnet", "testnet": true, "note": "Test network. Every token here is a test token with no value. The network may be reset.", "chainId": 101102, "chainIdHex": "0x18aee", "genesisSha256": "8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792", "nativeToken": "VORD (test)", "bridge": {"chain": "Arbitrum Sepolia", "chainId": 421614, "address": "0x52460111936F2Ff7c5A19ca207CC1a55E13b6310", "handler": "0xfF6286cd36b668487d53b7bDAFEd1f555c9EA974", "usdc": "0xb6835cD6A3488274D29bEDB8E06D4774b52799D9", "usdcName": "Bridged USDC", "usdcDecimals": 6, "routes": [{"chain": "Arbitrum Sepolia", "chainId": 421614, "deposits": "plain deposits", "withdrawals": "to Arbitrum Sepolia"}], "note": "USDC on the test network is a bridged test token (not Circle's USDC), so routes through CCTP (Arc) are not available here. Deposits credit after the vault chain's deposit is final.", "usdcSymbol": "USDC"}, "faucet": {"amount": "100 USDC", "perAddressPerDay": 1, "kinds": ["chain", "wallet"], "token": "USDC", "tokenName": "Bridged USDC"}, "specVersion": 8, "rpc": "https://rpc-testnet.vordium.com", "evmRpc": "https://rpc-testnet.vordium.com/evmrpc", "rpcAlternates": ["https://testnet.vordex.xyz/chain/evmrpc"], "generatedAt": 1793219557944, "generatedAtIso": "2026-10-28T20:32:37Z", "runningBinary": {"sha256": "d84926317bf0ab7d1cc124e644c13ecd170dfd8404e99ec57f7b0307bb904dac", "sha8": "d8492631", "version": "2.0.0"}, "blockHeight": 117834919, "finality": {"model": "BFT with two voting rounds per view (prepare, commit)", "rule": "A batch is final when validators holding a quorum of voting power have voted to commit it in one view. Each validator first votes to prepare the batch and keeps that choice until a later view shows a higher prepared batch; the next view's leader proposes the highest prepared batch again, unchanged; a node that sees two different final batches for one height stops at that height."}, "rates": {"available": false, "reason": "finalized height or BATCH_SIZE unknown"}, "emissions": {"available": false, "reason": "not derived yet for the running test build"}, "evm": {"consensusGate": {"evmIsLive": true, "executionEnabled": true, "evmLive": true, "paused": false}, "publicRpcAcceptsWrites": true, "publicRpcWritesDetail": "undecodable tx: Rlp(\"UnexpectedType(0)\")", "contractCodeReadable": null, "contractCodeDetail": "no probe contract on the test chain", "canDeployContractToday": null, "publicEvmLane": "https://rpc-testnet.vordium.com/evmrpc"}, "fees": {"withdrawal": {"available": false, "reason": "not derived yet for the running test build"}, "effective": {"available": false, "reason": "not derived yet for the running test build"}}, "upgrades": [{"key": "aa1873_activation_height", "name": "Session expiry", "summary": "Expired trading sessions leave the chain state; one state root per batch.", "height": 0, "active": true}, {"key": "aa1874_activation_height", "name": "Order gossip", "summary": "An accepted order reaches every validator, so any block leader can include it.", "height": 0, "active": true}, {"key": "aa1877_activation_height", "name": "Session counter release", "summary": "A session's replay counter is released once all of the account's sessions have expired.", "height": 0, "active": true}, {"key": "aa1878_activation_height", "name": "Session counter cleanup", "summary": "Unused session counters are removed; a new session starts its counter at 1.", "height": 0, "active": true}, {"key": "aa1882_activation_height", "name": "Spot settlement", "summary": "Spot matches settle on chain and the liquidity pool can quote spot pairs.", "height": 0, "active": true}, {"key": "aa1886_activation_height", "name": "Chain controls", "summary": "Cancel-all and adjustable chain parameters.", "height": 0, "active": true}, {"key": "aa1888_activation_height", "name": "Control separation", "summary": "Safety controls keep their own counter and stay usable while trading is paused.", "height": 0, "active": true}, {"key": "aa1889_activation_height", "name": "Deposit and withdrawal records", "summary": "Every credited deposit and completed withdrawal is recorded on chain, so reserves can be checked.", "height": 0, "active": true}, {"key": "aa1890_activation_height", "name": "State index", "summary": "A keyed index of the chain state is kept alongside the state root.", "height": 0, "active": true}, {"key": "aa1892_activation_height", "name": "Deposit gate", "summary": "Deposits credit only while deposits are open and trading is not paused.", "height": 0, "active": true}, {"key": "aa1897_activation_height", "name": "Vaults", "summary": "Create, deposit into, withdraw from and close vaults.", "height": 0, "active": true}, {"key": "aa1898_activation_height", "name": "Keyed state root", "summary": "The state root is a keyed Merkle root; updating it costs in proportion to what changed.", "height": 0, "active": true}, {"key": "aa1900_activation_height", "name": "Vault trading", "summary": "A vault's leader trades for the vault; profit share only above a high-water mark.", "height": 0, "active": true}, {"key": "aa1901_activation_height", "name": "Points record", "summary": "A durable per-account usage record with a root per season.", "height": 0, "active": true}, {"key": "aa1906_activation_height", "name": "Settings safeguards", "summary": "A per-operation setting cannot reach a chain control switch.", "height": 0, "active": true}, {"key": "aa1958_activation_height", "name": "Missed-slot jail", "summary": "A validator that keeps missing its slots is jailed.", "height": 0, "active": true}, {"key": "aa1963_activation_height", "name": "Field-keyed snapshots", "summary": "State snapshots are written in a field-keyed format.", "height": 0, "active": true}, {"key": "aa1965_activation_height", "name": "Rejoin anchor", "summary": "A node far behind can rejoin from a snapshot anchored at the first block.", "height": 0, "active": true}, {"key": "aa1967_activation_height", "name": "Snapshot certificate check", "summary": "A snapshot from a peer is checked against the validator set's certificate.", "height": 0, "active": true}, {"key": "aa1968_activation_height", "name": "Early snapshot capture", "summary": "Servable state captures start from the first block.", "height": 0, "active": true}, {"key": "aa1970_activation_height", "name": "Sync-stall detection", "summary": "A following node counts as stalled only when it stops making progress.", "height": 0, "active": true}, {"key": "aa1998_activation_height", "name": "Validator seat lock and airdrop schedule", "summary": "Seeded validator seats keep their one-year lock; airdrop tranches follow the emission start.", "height": 0, "active": true}, {"key": "aa2001_activation_height", "name": "Scheduled-change safeguards", "summary": "A scheduled change runs only under the rules that apply to its own operation.", "height": 0, "active": true}, {"key": "aa2007_activation_height", "name": "Named agents", "summary": "Named agents with policies, signatures bound to this chain's genesis, and trading safety fixes.", "height": 0, "active": true}, {"key": "aa2007c_activation_height", "name": "Stake-based emission", "summary": "Block emission follows the seated stake, within the published yearly ceiling.", "height": 0, "active": true}, {"key": "aa2053_activation_height", "name": "Two-round batch commit", "summary": "Each batch is committed in two voting rounds (prepare, commit).", "height": 0, "active": true}, {"key": "aa2078_activation_height", "name": "Cancel-on-disconnect switch", "summary": "An account can have all its orders cancelled at a time it keeps refreshing.", "height": 0, "active": true}, {"key": "aa2086_activation_height", "name": "Validator self-unjail", "summary": "A jailed validator unjails itself after its jail period, which doubles for repeat offences.", "height": 0, "active": true}, {"key": "aa2103_activation_height", "name": "Market-maker upgrade", "summary": "Order types, batch orders, self-trade prevention and the market-maker tier.", "height": 0, "active": true}, {"key": "aa2103b_activation_height", "name": "Margin at fill price", "summary": "Margin is reserved at the price an order can fill at; a price band through the mark.", "height": 0, "active": true}, {"key": "aa2106_activation_height", "name": "Full-resolution funding rate", "summary": "The funding rate is computed at full resolution, not rounded to whole basis points.", "height": 0, "active": true}, {"key": "aa2133_activation_height", "name": "EVM blocks", "summary": "EVM transactions run in their own blocks at batch boundaries, in a 1-second and a 60-second lane, with CoreWriter actions into the core state and the USDC ERC-20 link.", "height": 0, "active": true}, {"key": "aa2137_activation_height", "name": "Validator onboarding", "summary": "New validators join jailed and unjail themselves; a bench above 21 seats; a voting-power cap; own bonds behind a switch.", "height": 0, "active": true}, {"key": "aa2149_activation_height", "name": "Vault order rules and USDC link reopening", "summary": "Vault orders pay the request allowance and follow the price and size steps and post-only; the owners can reopen a frozen USDC link once its books balance.", "height": 0, "active": true}, {"key": "bridge_v4_activation_height", "name": "Bridge vault", "summary": "Deposits and withdrawals through the vault on Arbitrum One, attested by the validators.", "height": 40, "active": true}, {"key": "cross_margin_activation_height", "name": "Cross margin", "summary": "Each perps pair can be traded in cross margin (the default) or isolated; cross positions share the account's collateral and are liquidated together, largest risk first, partly where that suffices.", "height": 10730000, "active": true}, {"key": "aa2160_activation_height", "name": "Open-interest caps and owner-only money moves", "summary": "Orders and fills that would take a market past its open-interest cap are refused (closing and reduce-only are not); every asset move needs the owner's own signature; creating a vault costs a fee paid to the treasury.", "height": 27290000, "active": true}, {"key": "aa2171_activation_height", "name": "Agent market orders and the CoreWriter contract address", "summary": "An agent's market order is judged at the price it fills at (the mark) instead of its signed price, and the CoreWriter address holds code so the standard Solidity interface call reaches it.", "height": 58470000, "active": true}, {"key": "aa2172_activation_height", "name": "Stop orders, fee settings and partial liquidation", "summary": "Stop, take-profit and stop-loss orders rest on chain and fire when the mark reaches their trigger; the perps taker and maker fees are owner settings; an isolated position is liquidated in part where that restores it.", "height": 63400000, "active": true}, {"key": "aa2179_activation_height", "name": "Per-market order limits", "summary": "Each market carries its own largest limit order, largest market order, largest order value and largest position per account, set by the owners; an order over a limit is refused at submission and at apply with its code.", "height": 76370000, "active": true}, {"key": "aa2180_activation_height", "name": "One bad-debt rule", "summary": "When a liquidation leaves a loss the account and the insurance fund cannot pay, the rest is covered at once by auto-deleveraging the opposite side of the same market, in rank order, for cross and isolated margin alike; the liquidity pool does not absorb bad debt.", "height": 77300000, "active": true}, {"key": "aa2194_activation_height", "name": "Vault rules", "summary": "A vault is live at creation; its leader must hold 100 USDC before others deposit and keep 5 % at all times; the leader's profit share is a fixed 10 % of each depositor's own gain; deposits lock for 1 day (4 days in the pool); a withdrawal short of cash cancels the vault's orders and otherwise holds the leader to reducing until it is paid; closing pays every depositor.", "height": 114000000, "active": true}], "releases": "https://testnet.vordex.xyz/releases.json", "twap": {"available": false, "reason": "not derived yet for the running test build"}, "agents": {"refusalCodes": {"reasons": [{"key": "registration_not_live", "meaning": "The agent's registration is revoked or expired."}, {"key": "policy_expired", "meaning": "The agent's policy has expired."}, {"key": "policy_disabled", "meaning": "The owner disabled the agent's policy."}, {"key": "no_policy", "meaning": "The agent has no policy, so every action is refused."}, {"key": "agents_paused", "meaning": "All agents are paused on this network."}, {"key": "agent_mode_off", "meaning": "The agent's trading mode is off."}, {"key": "capability_not_granted", "meaning": "The policy does not allow this kind of action."}, {"key": "market_not_allowed", "meaning": "The policy does not allow this market."}, {"key": "outside_active_window", "meaning": "Outside the policy's active hours (UTC)."}, {"key": "rate_limit", "meaning": "The agent used all actions allowed in its window."}, {"key": "locked_reduce_only", "meaning": "The agent is locked to reduce-only (a limit was reached)."}, {"key": "reduce_only_or_side", "meaning": "Only reducing orders, or only the policy's side, are allowed."}, {"key": "max_order", "meaning": "The order is larger than the policy allows."}, {"key": "max_position", "meaning": "The position would exceed the policy's maximum."}, {"key": "max_total_exposure", "meaning": "The agent's total exposure would exceed the policy's maximum."}, {"key": "max_leverage", "meaning": "The leverage is above the policy's maximum."}, {"key": "daily_loss_limit", "meaning": "The agent's daily loss limit is reached."}, {"key": "daily_fee_cap", "meaning": "The agent's daily fee cap is reached."}, {"key": "price_outside_band", "meaning": "The price is outside the policy's band around the oracle price."}, {"key": "oracle_unavailable", "meaning": "The market's oracle price is missing, stale or its breaker is tripped."}, {"key": "not_agents_order", "meaning": "The order or TWAP was not placed by this agent."}, {"key": "other", "meaning": "Another agent check refused the action."}], "lockReasons": [{"code": 0, "key": "none", "meaning": "No lock."}, {"code": 1, "key": "lock_daily_loss_limit", "meaning": "The agent's realised loss for the UTC day reached its daily loss limit; it is locked to reduce-only."}, {"code": 2, "key": "lock_daily_fee_cap", "meaning": "The fees the agent paid in the UTC day reached its daily fee cap; it is locked to reduce-only."}, {"code": 3, "key": "lock_liquidation", "meaning": "One of the agent's positions was liquidated; it is locked to reduce-only."}], "eventKinds": [{"code": 1, "key": "lock_daily_loss_limit", "meaning": "The agent's realised loss for the UTC day reached its daily loss limit; it is locked to reduce-only."}, {"code": 2, "key": "lock_daily_fee_cap", "meaning": "The fees the agent paid in the UTC day reached its daily fee cap; it is locked to reduce-only."}, {"code": 3, "key": "lock_liquidation", "meaning": "One of the agent's positions was liquidated; it is locked to reduce-only."}, {"code": 4, "key": "lock_cleared", "meaning": "The owner cleared the agent's lock."}, {"code": 5, "key": "twap_terminated", "meaning": "The chain stopped one of the agent's TWAPs (its policy no longer allowed it)."}], "source": "https://rpc-testnet.vordium.com/agents/codes", "where": "A refused agent action is recorded in GET /events/agent/{agent} (kind agent_refused, field reason = one of reasons[].key). A build that checks agent orders at intake answers the order HTTP 403 with code agent_refused and the same reason key and meaning.", "marketOrders": "An agent's market order is judged at the price it fills at (the mark) once the chain runs the rule; until then agents use marketable limit orders."}}, "orders": {"refusalCodes": [{"code": "min_notional", "meaning": "The order is worth less than the minimum order value (10 USDC unless the owners change it)."}, {"code": "max_notional", "meaning": "The order is worth more than the largest order this market allows (its own limit, else 1,000,000 USDC)."}, {"code": "order_size_above_max", "meaning": "The order's size is above this market's largest limit order."}, {"code": "market_order_above_max", "meaning": "The order's size is above this market's largest market order (a market or stop-market order, or a TWAP slice)."}, {"code": "position_limit", "meaning": "The order would take the account's position in this market past its per-account limit (closing and reduce-only orders are never refused)."}, {"code": "no_price", "meaning": "The market has no committed price yet, so a market order cannot be valued."}, {"code": "slippage", "meaning": "The market price is already past the slippage cap the order was signed with."}, {"code": "price_band", "meaning": "A limit price too far through the mark on the side that would trade at once."}, {"code": "tick", "meaning": "The price (or the trigger price of a stop) is not a multiple of the market's price step."}, {"code": "lot", "meaning": "The size is not a multiple of the market's size step."}, {"code": "leverage", "meaning": "The leverage is zero or above the market's maximum."}, {"code": "too_many_open_orders", "meaning": "The account already has the most open orders allowed."}, {"code": "oi_cap", "meaning": "The order would take the market past its open-interest cap (closing and reduce-only orders are never refused)."}, {"code": "rate_limited", "meaning": "The account's request allowance is used up; it grows by 1 per USDC traded, and cancels are always allowed."}, {"code": "rate_burst", "meaning": "Too many orders from one address in one block."}, {"code": "agent_refused", "meaning": "The agent that signed the order is not allowed to place it (see the agent refusal codes)."}, {"code": "not_active", "meaning": "This kind of order is not active on this chain yet."}, {"code": "stops_disabled", "meaning": "Stop orders are switched off by the owners; resting stop orders are held and fire once switched back on."}, {"code": "stop_spot", "meaning": "Stop orders are for perpetual markets only."}, {"code": "stop_trigger_missing", "meaning": "A stop order needs a trigger price."}, {"code": "stop_trigger_dir", "meaning": "The trigger direction must be 0 (fires when the mark is at or above the trigger) or 1 (at or below)."}, {"code": "stop_limit_price_missing", "meaning": "A stop-limit order needs a limit price."}, {"code": "too_many_stops", "meaning": "The account already has the most stop orders allowed (100)."}, {"code": "order_type_not_allowed", "meaning": "This market does not accept this order type (see the market's allowed order types)."}, {"code": "pair_reduce_only", "meaning": "This market is reduce-only: only orders that reduce a position are accepted."}, {"code": "pair_post_only", "meaning": "This market is post-only: only post-only orders are accepted."}, {"code": "mmp_frozen", "meaning": "The account's Market Maker Protection has tripped; it places nothing until the freeze ends."}, {"code": "dead_man", "meaning": "The account's dead-man switch time has passed; refresh it (ScheduleCancel) to trade again."}, {"code": "market_frozen", "meaning": "New positions are frozen on this chain."}, {"code": "pair_paused", "meaning": "This market is paused."}, {"code": "pair_staged", "meaning": "This market is listed but not open yet."}, {"code": "pair_delisted", "meaning": "This market is delisted."}, {"code": "pool_not_seeded", "meaning": "Trading opens once the liquidity pool is seeded."}, {"code": "bad_signature", "meaning": "The signature is not the owner's, a live session key's or a registered agent's."}, {"code": "no_session", "meaning": "The owner has no session registered: create a session key (POST /session/create), then sign with it."}, {"code": "session_expired", "meaning": "The owner's session has expired: create a new session key (POST /session/create), then sign with it."}, {"code": "invalid_body", "meaning": "The request body does not describe an order (a field is missing, malformed, or two keys for one field disagree)."}, {"code": "nonce", "meaning": "The client nonce is outside the window (a millisecond time within 2 days before and 1 day after now) or already used."}, {"code": "post_only_would_cross", "meaning": "A post-only order would trade at once against the book."}, {"code": "reduce_only_nothing_to_reduce", "meaning": "A reduce-only order with no opposite position to reduce."}, {"code": "reduce_only_would_grow", "meaning": "A reduce-only order on the same side as the open position would grow it."}, {"code": "oracle_unavailable", "meaning": "The market's price is stale or its price breaker has tripped; orders wait until it recovers."}, {"code": "pool_owner", "meaning": "Orders for the protocol pool are placed only by the chain's quoting."}, {"code": "insufficient_margin", "meaning": "The account's free USDC does not cover the order's initial margin."}, {"code": "spot_paused", "meaning": "Spot trading is switched off."}, {"code": "fok_not_on_spot", "meaning": "Fill-or-kill orders are for perpetual markets only."}, {"code": "reduce_only_spot", "meaning": "Reduce-only does not apply to spot markets."}, {"code": "spot_limit_only", "meaning": "Spot markets take limit orders only."}, {"code": "pool_exposure", "meaning": "The order would take the pool past its exposure cap on this market."}, {"code": "overflow", "meaning": "The order's size and price are too large to value."}, {"code": "bad_side", "meaning": "The side must be 0 (buy) or 1 (sell)."}, {"code": "insufficient_balance", "meaning": "The account's free USDC does not cover a spot buy (value plus the fee)."}, {"code": "insufficient_vord", "meaning": "The account's free VORD does not cover a spot sell."}, {"code": "reserve_failed", "meaning": "The spot order's funds could not be reserved."}, {"code": "unknown_order", "meaning": "No such open order of this account."}, {"code": "zero_size", "meaning": "The new size is zero (cancel the order instead)."}, {"code": "trading_paused", "meaning": "Trading is paused on this chain (or new positions are paused)."}, {"code": "twap_spot", "meaning": "TWAP orders are for perpetual markets only."}, {"code": "twap_params", "meaning": "The TWAP's duration, slices, interval, slippage or size is outside the allowed range (see the twap spec)."}, {"code": "not_rested", "meaning": "The modified order would not rest (for example an IOC or FOK limit); the old order is kept."}], "source": "https://testnet.vordex.xyz/chain/orders/codes", "where": "A refused order is answered HTTP 400 (403 for agent_refused) with code = one of refusalCodes[].code and its meaning.", "stops": {"orderTypes": {"2": "stop-market (fires as a market order; the signed price is the slippage cap, 0 = none)", "3": "stop-limit (fires as a limit order at the signed price)"}, "triggerDir": {"0": "fires when the mark is at or above the trigger", "1": "fires when the mark is at or below the trigger"}, "kinds": ["stop", "take_profit", "stop_loss"], "kindRule": "A reduce-only stop is a take-profit when it fires as the mark moves in the position's favour (a sell with triggerDir 0, a buy with triggerDir 1) and a stop-loss otherwise; any other stop is a plain stop.", "triggerPrice": "the committed mark (the price the chain liquidates and settles at), checked once per batch", "margin": "a resting stop reserves no margin; when it fires it is an ordinary order and the margin is checked then", "agents": "an agent's stop is checked against the agent's policy when placed and again when it fires", "cancel": "by order id, by cancel-all, and by the dead-man switch (which keeps reduce-only stops)", "maxPerAccount": 100, "active": true, "enabled": true}}, "markets": {"minOrderNotional6dec": "10000000", "perpsTakerFeeCbps": 450, "perpsMakerFeeCbps": 150, "feeUnit": "hundredths of a basis point (450 = 0.045 %); the maker fee applies to a maker without a market-maker tier", "isolatedPartialLiquidation": true, "pairs": [{"pairId": 1, "symbol": "ETHUSDT", "tick8dec": "10000000", "lot18dec": "100000000000000", "maxLeverageBps": 250000, "maintenanceMarginBps": 200}, {"pairId": 2, "symbol": "BTCUSDT", "tick8dec": "100000000", "lot18dec": "10000000000000", "maxLeverageBps": 400000, "maintenanceMarginBps": 200}, {"pairId": 3, "symbol": "BNBUSDT", "tick8dec": "1000000", "lot18dec": "1000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 4, "symbol": "SOLUSDT", "tick8dec": "1000000", "lot18dec": "10000000000000000", "maxLeverageBps": 200000, "maintenanceMarginBps": 200}, {"pairId": 5, "symbol": "POLUSDT", "tick8dec": "100", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 6, "symbol": "ARBUSDT", "tick8dec": "1000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 7, "symbol": "OPUSDT", "tick8dec": "1000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 8, "symbol": "AVAXUSDT", "tick8dec": "10000", "lot18dec": "10000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 9, "symbol": "LINKUSDT", "tick8dec": "100000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 10, "symbol": "UNIUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 11, "symbol": "DOGEUSDT", "tick8dec": "100", "lot18dec": "1000000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 12, "symbol": "XRPUSDT", "tick8dec": "10000", "lot18dec": "1000000000000000000", "maxLeverageBps": 200000, "maintenanceMarginBps": 200}, {"pairId": 13, "symbol": "ADAUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 14, "symbol": "DOTUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 15, "symbol": "SUIUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 16, "symbol": "ZECUSDT", "tick8dec": "10000000", "lot18dec": "1000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 17, "symbol": "NEARUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 18, "symbol": "ENAUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 19, "symbol": "WLDUSDT", "tick8dec": "1000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 20, "symbol": "AAVEUSDT", "tick8dec": "1000000", "lot18dec": "10000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 21, "symbol": "TAOUSDT", "tick8dec": "1000000", "lot18dec": "1000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 22, "symbol": "TRXUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 23, "symbol": "LTCUSDT", "tick8dec": "100000", "lot18dec": "10000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 24, "symbol": "PUMPUSDT", "tick8dec": "10", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 25, "symbol": "INJUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 26, "symbol": "ASTERUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 27, "symbol": "ONDOUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 28, "symbol": "SEIUSDT", "tick8dec": "100", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 29, "symbol": "TRUMPUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 30, "symbol": "GRAMUSDT", "tick8dec": "10000", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 31, "symbol": "XLMUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 32, "symbol": "FILUSDT", "tick8dec": "1000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 33, "symbol": "ZROUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 34, "symbol": "BCHUSDT", "tick8dec": "1000000", "lot18dec": "1000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 35, "symbol": "STRKUSDT", "tick8dec": "100", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 36, "symbol": "DASHUSDT", "tick8dec": "100000", "lot18dec": "10000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 37, "symbol": "ICPUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 38, "symbol": "FETUSDT", "tick8dec": "1000", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 39, "symbol": "COMPUSDT", "tick8dec": "100000", "lot18dec": "10000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 40, "symbol": "HBARUSDT", "tick8dec": "100", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 41, "symbol": "TIAUSDT", "tick8dec": "1000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 42, "symbol": "APTUSDT", "tick8dec": "1000", "lot18dec": "10000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 43, "symbol": "CRVUSDT", "tick8dec": "1000", "lot18dec": "100000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 44, "symbol": "WLFIUSDT", "tick8dec": "100", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 45, "symbol": "PENGUUSDT", "tick8dec": "10", "lot18dec": "1000000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 46, "symbol": "XPLUSDT", "tick8dec": "100", "lot18dec": "1000000000000000000", "maxLeverageBps": 100000, "maintenanceMarginBps": 200}, {"pairId": 47, "symbol": "RENDERUSDT", "tick8dec": "10000", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 48, "symbol": "ETCUSDT", "tick8dec": "10000", "lot18dec": "10000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 49, "symbol": "ATOMUSDT", "tick8dec": "10000", "lot18dec": "10000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}, {"pairId": 50, "symbol": "WUSDT", "tick8dec": "100", "lot18dec": "100000000000000000", "maxLeverageBps": 50000, "maintenanceMarginBps": 200}], "source": "committed state (a node read that is not publicly reachable)"}, "vaults": {"signing": {"kind": "EIP-191 personal_sign of a readable message (the wallet shows it)", "message": "lines joined by \\n, no trailing newline; line 1 'Vordium Admin', line 2 'Chain: <chain id>', line 3 'Genesis: <genesis sha256>' (this network's genesisSha256), line 4 'Action: \u2026', then the fields in the order shown", "rendering": "addresses lowercase with 0x; integers in decimal; bool as true/false; u128 fields (shares, amount, size) are decimal STRINGS in the JSON body and plain decimals in the message", "signature": "65 bytes r\u2016s\u2016v, v = 27 or 28, 0x-hex in the body's `signature`", "whoSigns": "the owner of the account named in the op (leader / user / owner). Money actions are owner-signed only; a session key is refused for VLP deposits and staking claims"}, "nonces": {"vault": "one counter per address shared by all six vault actions: GET /vaults/shares/{address}.vault_nonce; send a larger one", "vlp": "one counter per address for VLP deposit + withdraw", "staking": "one counter per address shared by stake, unstake and claim", "rule": "strictly above the last one applied, and the first is at least 1; a nonce more than 1,000,000 above the last is accepted only if it is not more than one day ahead of block time \u2014 so the current time in ms always works"}, "actions": {"createVault": {"route": "POST /vault/create", "signer": "leader", "nonce": "vault", "body": ["leader", "lock_period_secs", "leader_min_stake_bps", "profit_share_bps", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Create Vault", "Leader: <leader>", "Lock secs: <lock_period_secs>", "Leader min stake bps: <leader_min_stake_bps>", "Profit share bps: <profit_share_bps>", "Nonce: <nonce>"], "result": "the vault is live at once (deposits and the leader's trading need no switch); the signed lock / stake / share fields are ignored \u2014 the fixed rules apply. Read GET /vaults"}, "vaultDeposit": {"route": "POST /vault/deposit", "signer": "user", "nonce": "vault", "body": ["vault_id", "user", "amount_6dec", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vault Deposit", "Vault: <vault_id>", "User: <user>", "Amount 6dec: <amount_6dec>", "Nonce: <nonce>"], "result": "shares minted at the vault's share price; your entry price is what you paid (blended over a top-up); locked for 1 day from this deposit. Others may deposit only once the leader holds 100 USDC of the vault, and never below the leader's 5 %"}, "vaultWithdraw": {"route": "POST /vault/withdraw", "signer": "user", "nonce": "vault", "body": ["vault_id", "user", "shares (decimal string)", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vault Withdraw", "Vault: <vault_id>", "User: <user>", "Shares: <shares>", "Nonce: <nonce>"], "result": "shares burned, USDC paid at the share price less 10 % of YOUR gain above your entry price (nothing on recovering a loss; nothing on the leader's own shares). Short of cash: the vault's resting orders are cancelled, smallest margin first; if still short it is refused and the leader may only reduce until it is paid. The leader may not go below 5 %"}, "vaultClose": {"route": "POST /vault/close", "signer": "leader", "nonce": "vault", "body": ["vault_id", "leader", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vault Close", "Vault: <vault_id>", "Leader: <leader>", "Nonce: <nonce>"], "result": "only when the vault holds no position and no order: every depositor is paid their share in the same step (the profit share applies, the lock-up does not)"}, "vaultPlaceOrder": {"route": "POST /vault/order", "signer": "leader", "nonce": "vault", "body": ["leader", "vault_id", "pair_id", "side", "size (18-dec decimal string)", "price", "leverage_bps", "order_type", "reduce_only", "post_only", "time_in_force", "expires_at", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vault Place Order", "Vault: <vault_id>", "Leader: <leader>", "Pair: <pair_id>", "Side: <side>", "Size 18dec: <size>", "Price 8dec: <price>", "Leverage bps: <leverage_bps>", "Order type: <order_type>", "Reduce only: <true|false>", "Post only: <true|false>", "Time in force: <time_in_force>", "Expires at: <expires_at>", "Nonce: <nonce>"], "result": "an ordinary order of the vault's trading account (the normal per-market limits, margin and open-interest caps apply); reduce-only while the network's vault switch is off or a withdrawal waits for cash; the leader must hold 5 %"}, "vaultCancelOrder": {"route": "POST /vault/cancel-order", "signer": "leader", "nonce": "vault", "body": ["leader", "vault_id", "order_id", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vault Cancel Order", "Vault: <vault_id>", "Leader: <leader>", "Order: <order_id>", "Nonce: <nonce>"], "result": "the order is removed"}, "vlpDeposit": {"route": "POST /vlp/deposit", "signer": "user", "nonce": "vlp", "body": ["user", "amount_6dec", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vlp Deposit", "User: <user>", "Amount 6dec: <amount_6dec>", "Nonce: <nonce>"], "result": "pool shares minted at the pool's share price; read GET /vlp/stats"}, "vlpWithdraw": {"route": "POST /vlp/withdraw", "signer": "user", "nonce": "vlp", "body": ["user", "shares (decimal string)", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Vlp Withdraw", "User: <user>", "Shares: <shares>", "Nonce: <nonce>"], "result": "shares burned, USDC paid at the share price, after the 4-day lock-up from your latest pool deposit"}, "stake": {"route": "POST /staking/stake", "signer": "owner", "nonce": "staking", "body": ["owner", "amount (18-dec decimal string)", "lock_ms", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Stake", "Owner: <owner>", "Amount: <amount>", "Lock Ms: <lock_ms>", "Nonce: <nonce>"], "result": "VORD locked for lock_ms (one of the tiers); read GET /staking/balance/{owner}"}, "unstake": {"route": "POST /staking/unstake", "signer": "owner", "nonce": "staking", "body": ["owner", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Unstake", "Owner: <owner>", "Nonce: <nonce>"], "result": "after the lock ends: the VORD and both reward legs are paid"}, "claimStakingRewards": {"route": "POST /staking/claim", "signer": "owner", "nonce": "staking", "body": ["owner", "nonce", "signature"], "message": ["Vordium Admin", "Chain: <chain id>", "Genesis: <genesis sha256, lowercase hex, no 0x>", "Action: Claim Staking Rewards", "Owner: <owner>", "Nonce: <nonce>"], "result": "both reward legs paid; the stake stays"}}, "creatorRanges": {"lockPeriodSecs": {"min": 0, "max": 31536000, "note": "ignored: the fixed vault rules apply"}, "leaderMinStakeBps": {"min": 0, "max": 10000, "note": "ignored: the fixed vault rules apply"}, "profitShareBps": {"min": 0, "max": 10000, "note": "ignored: the fixed vault rules apply"}, "minDeposit6dec": 1000000, "minVlpDeposit6dec": 1000000, "creationFee6dec": 10000000, "creationFeeNote": "paid by the leader from free balance to the treasury when the vault is created; refused if the balance is short"}, "switches": {"registryOpen": true, "vlpDepositsAllowed": true, "stakingOpen": true, "stakingTiers": [{"lockMs": 600000, "multiplierBps": 10000}, {"lockMs": 2592000000, "multiplierBps": 12500}, {"lockMs": 7776000000, "multiplierBps": 15000}, {"lockMs": 15552000000, "multiplierBps": 20000}, {"lockMs": 31536000000, "multiplierBps": 25000}], "newVaultDeposits": "a vault takes deposits from creation; others only once the leader holds 100 USDC of it"}, "refusals": {"intake": {"400": "invalid body (code invalid_body; a field missing or malformed, the error names it)", "403": "refused with a code from `codes`: a bad signature (bad_signature), a leader action from someone else (vault_not_leader), or any rule the chain would refuse the action by \u2014 intake runs the vault apply rules on the committed state, so the answer is the chain's own"}, "apply": "202 'submitted' means the op passed every rule on the committed state and reached the mempool. An op still in flight ahead of it can change the answer by the time it applies; read the result, never infer it from the 202. A withdrawal the vault cannot pay in cash is admitted on purpose: applying it marks the vault so its leader may only reduce until that withdrawal is paid", "codes": {"invalid_body": "the request body does not describe the action (a field is missing or malformed)", "bad_signature": "the signature is not the action's owner's (a vault money action is signed by the owner's own key; a leader's order may be signed by a live session or agent key of the leader)", "trading_paused": "the chain (or the vault part of it) is paused; this action waits until it resumes", "vault_not_active": "vaults are not active on this chain yet", "vault_nonce": "the vault nonce must be above the last one this address used (and not too far ahead)", "vault_registry_closed": "the vault switch (key 253) is off or the chain is paused: no new vaults and no deposits, and vault orders may only reduce", "vault_params": "the lock period, leader stake or profit share is outside the allowed range", "vault_creation_fee": "the leader's free USDC does not cover the vault creation fee", "vault_unknown": "no such vault", "vault_deposits_off": "this vault does not take deposits (its deposits switch is off, or it is withdraw-only)", "vault_closed": "the vault is closed: no deposits and no orders; withdrawals stay open", "vault_deposit_below_minimum": "the deposit is below the vault minimum (1 USDC)", "insufficient_balance": "the account's free USDC does not cover the deposit", "vault_unpriceable": "a vault position has no mark, so the vault cannot be priced right now", "overflow": "the amount is too large to price", "vault_zero_shares": "the deposit would mint no shares", "vault_shares": "the shares are zero or more than the account holds in this vault", "vault_cash_committed": "the vault's cash is committed as margin: the leader must reduce before this withdrawal can be paid", "vault_not_leader": "the signer is not this vault's leader", "vault_not_flat": "the vault still holds a position or a resting order (close it flat)", "agent_refused": "the agent key that signed the leader's action is not allowed to (see the agent refusal codes)", "vault_delegation_off": "trading is off for this vault (its owner trading switch)", "vault_perps_only": "vaults trade perpetual markets only", "vault_order_type": "a vault order is a market or limit order (no stop orders)", "vault_exposure_cap": "the order would take the vault past an exposure cap (or the cap is zero)", "vault_unknown_order": "the order is not one of this vault's open orders", "vault_order_refused": "the placement path refused the vault's order", "vault_control_retired": "per-vault owner controls are retired: a vault is live at creation and key 253 is the only vault switch", "vault_profit_share_switch_retired": "the profit-share switch (key 255) is retired: the leader's share is a fixed 10 %", "vault_leader_below_minimum": "the vault takes other deposits only once its leader holds at least 100 USDC of it", "vault_deposit_dilutes_leader": "this deposit would leave the leader with less than 5 % of the vault", "vault_leader_below_five_percent": "the leader must keep at least 5 % of the vault (closing the vault pays everyone instead)", "vault_locked": "the deposit is still inside its lock-up (1 day from the latest deposit)", "vault_withdrawal_short": "the vault cannot pay this withdrawal in cash even after cancelling its resting orders", "vault_withdrawal_pending": "a withdrawal is waiting for cash: the leader may only reduce until it is paid", "vault_leader_stake_low": "the leader holds less than 5 % of the vault", "vlp_locked": "the pool deposit is still inside its lock-up (4 days from the latest deposit)"}, "leaderOrders": "a leader's order the ordinary placement path refuses carries the order refusal code (GET /orders/codes)", "source": "https://testnet.vordex.xyz/chain/vaults/codes"}, "reads": {"vaults": "GET https://testnet.vordex.xyz/chain/vaults \u00b7 https://testnet.vordex.xyz/chain/vaults/{id} (settings, NAV, share price, high-water mark)", "shares": "GET https://testnet.vordex.xyz/chain/vaults/shares/{address} (shares per vault, unlock time, vault_nonce)", "vlp": "GET https://testnet.vordex.xyz/chain/vlp/stats \u00b7 https://testnet.vordex.xyz/chain/vlp/balance/{address} (shares, value)", "staking": "GET https://testnet.vordex.xyz/chain/staking/info \u00b7 https://testnet.vordex.xyz/chain/staking/balance/{address}", "records": "GET https://testnet.vordex.xyz/chain/events/account/{address}"}, "vectors": {"keys": "public test keys: the private key is sha256 of the label; never funded", "labels": ["vordium-public-test-key:vaults:leader", "vordium-public-test-key:vaults:depositor"], "chainId": 101102, "genesisSha256": "8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792", "items": [{"op": "create_vault", "route": "POST /vault/create", "signer": "0xC9d95D3a3E766ECe2615503f453E858D07123B57", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Create Vault\nLeader: 0xc9d95d3a3e766ece2615503f453e858d07123b57\nLock secs: 86400\nLeader min stake bps: 500\nProfit share bps: 1000\nNonce: 1", "digest": "0x5304a0d083d74ee6fdbf324bd3a140c1027f1f8cfb6d2cebc91a46c4c86c642c", "body": {"leader": "0xC9d95D3a3E766ECe2615503f453E858D07123B57", "lock_period_secs": 86400, "leader_min_stake_bps": 500, "profit_share_bps": 1000, "nonce": 1, "signature": "0x40e3215995e38a00bd7755d432ea0c82b798dfccb63a41a03f75189b3bb643f276619e910fedafc668d4130f66e186c2aaa84dcf70abe6a484fe70306be1d7571c"}}, {"op": "vault_deposit", "route": "POST /vault/deposit", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Vault Deposit\nVault: 0\nUser: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nAmount 6dec: 25000000\nNonce: 1", "digest": "0x1abeb958e351a6d92e4b0d904a15d203c8f1410e244a6c84726dbd12e5df96eb", "body": {"vault_id": 0, "user": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "amount_6dec": 25000000, "nonce": 1, "signature": "0xe603cc74e2651360484ccb5dbd01c2bf5c2cbe10b534bc54453e4342c11cc76257a442ba35488a096ee8de5591893b7e07adce1b6b64e45dde268e18911f6d551b"}}, {"op": "vault_withdraw", "route": "POST /vault/withdraw", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Vault Withdraw\nVault: 0\nUser: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nShares: 10000000\nNonce: 2", "digest": "0x574d436e6bb6b659d12c1d052812608b1c52d53b5f23545f090c39eea33bb1e8", "body": {"vault_id": 0, "user": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "shares": "10000000", "nonce": 2, "signature": "0x78ddc96ed569784568625a9da33b18c3ca6bfbd0b8892dd4f223a6ff2bb5c0ff6bfa5845e9b9bd87bfe82eab3f3fbcb90d43d94774f01ba18a38b043bb6c93371c"}}, {"op": "vault_close", "route": "POST /vault/close", "signer": "0xC9d95D3a3E766ECe2615503f453E858D07123B57", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Vault Close\nVault: 0\nLeader: 0xc9d95d3a3e766ece2615503f453e858d07123b57\nNonce: 2", "digest": "0x32293b5fabcaa8090bdbd1ba3e8f780323802692476896727c459d9d40b92579", "body": {"vault_id": 0, "leader": "0xC9d95D3a3E766ECe2615503f453E858D07123B57", "nonce": 2, "signature": "0x35d1c1e362c909d71fadfd5c3e4022d0cfc605e129001e49f3313447eeea5dfb158717c9979e1fd560970ec62c2c1cc696a6c9af3e091d64ebde1cf63c2e624d1c"}}, {"op": "vault_cancel_order", "route": "POST /vault/cancel-order", "signer": "0xC9d95D3a3E766ECe2615503f453E858D07123B57", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Vault Cancel Order\nVault: 0\nLeader: 0xc9d95d3a3e766ece2615503f453e858d07123b57\nOrder: 42\nNonce: 3", "digest": "0x4dcef3213d1656e6c3216993b097a366699237c6a9408bb40f7d88ac7ceb1e76", "body": {"leader": "0xC9d95D3a3E766ECe2615503f453E858D07123B57", "vault_id": 0, "order_id": 42, "nonce": 3, "signature": "0xb86c16efd03536521a2e02844af22767ac4b5d8f80831a0673af40aaea6944600919f31ca9eaf21f28004dea58102cf979f15141002c5c8006511c849309cf3e1c"}}, {"op": "vlp_deposit", "route": "POST /vlp/deposit", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Vlp Deposit\nUser: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nAmount 6dec: 5000000\nNonce: 1", "digest": "0x8a9b93479cc928e7f24239a8fe8282eba3f5526f74eb66278088dff16267a9d0", "body": {"user": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "amount_6dec": 5000000, "nonce": 1, "signature": "0xdc9528cdc5dcd137bc05ebdaa1608bd69a58606ae62d4d6b6dc91c8516abf58929426ef341c2473548a0a3350d8ae3567e0664f38e22eb83ff230c1a7b197b161c"}}, {"op": "vlp_withdraw", "route": "POST /vlp/withdraw", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Vlp Withdraw\nUser: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nShares: 1000000\nNonce: 2", "digest": "0x3135b24a1e2ef50685aaae0146bc9cc212ce5f5dd1dafaa18371e7f12b351210", "body": {"user": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "shares": "1000000", "nonce": 2, "signature": "0xcd9a3463ec56a7544817e14472c4d53c6fa5b329021d2227bfc8d6a7b375eb6d1de2339a9050e49805ae9899a346942204418f72bc577c726463dae65ffd898c1b"}}, {"op": "stake", "route": "POST /staking/stake", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Stake\nOwner: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nAmount: 100000000000000000000\nLock Ms: 2592000000\nNonce: 1", "digest": "0x90c9708518120f2decd471b29c5760817d065c525b620de6584bdc8380207e0b", "body": {"owner": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "amount": "100000000000000000000", "lock_ms": 2592000000, "nonce": 1, "signature": "0x3181fd79c5b4458cc541acff84e9d662d6c1096912b41c47880076f5b0633dea62f22f3859d07cc8c775de1da1f4499815150eb0ea606a54f82347dba2e574e31c"}}, {"op": "unstake", "route": "POST /staking/unstake", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Unstake\nOwner: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nNonce: 2", "digest": "0xa91c2b61f0abf0058e447b1dd1330983dadd82480eb9a9564284173d3be55bce", "body": {"owner": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "nonce": 2, "signature": "0x5f06299458eafecf4a9d32f6012f00c27e9bbc9667b129ad45c4e972782e7f8d429bf1360a5133d5786896d4ff84f6a23205286a16d6bcfdf863cf2c9b3f52901b"}}, {"op": "claim_staking_rewards", "route": "POST /staking/claim", "signer": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "message": "Vordium Admin\nChain: 101102\nGenesis: 8b5d414c5cd5d18bc468b64f87ac8e2c2b5ff494c769d5e09dcf50ce75a59792\nAction: Claim Staking Rewards\nOwner: 0xe5775c1a56b28ce66a870bee65e70acdb5076ef4\nNonce: 3", "digest": "0x7fecd2a25be4f7d61ae2c5c6b56ac74779f195a4666347ab112a2dd0373f07c9", "body": {"owner": "0xe5775C1a56b28cE66a870BeE65E70AcDb5076EF4", "nonce": 3, "signature": "0xae6d6775e866141767d51788250e338e75f455fc01debf1367ae3db5dc113d6774091be255e5428093db6eef43abcecc8c2216131318f30e6c2c531d48554e431c"}}]}, "rules": {"profitShareBps": 1000, "profitShareBasis": "each depositor's own entry price (blended on top-ups); nothing on recovering a loss; none on the leader's own shares", "lockUpSecs": 86400, "poolLockUpSecs": 345600, "leaderMinDeposit6dec": 100000000, "leaderMinStakeBps": 500, "shortfall": "a withdrawal the vault cannot pay in cash cancels its resting orders (smallest margin first); if still short it is refused and the leader may only reduce until that depositor's withdrawal is paid", "close": "pays every depositor in the same step", "switch": "one network-wide vault switch: off = no new vaults, no deposits, vault orders reduce-only; withdrawals and closing always work", "reads": "GET https://testnet.vordex.xyz/chain/vaults/{id} (rules, leader stake, reduce-only state; each holder's entry price and performance)"}}, "truth": {"path": "/truth/v1", "ok": true, "readAt": 1793219554590, "readers": 7, "agreedBy": 7, "same": ["chainId", "genesisSha256", "runningBinary", "upgrades[].active"]}, "_note": "Canonical Vordium network spec \u2014 single source of truth, generated from live chain state. Do not hand-edit. Assert `specVersion` (see `_contract`) before consuming. This is the PUBLIC copy: source citations and operational names are kept internally."}