{"surface":"Iris — the public JSON-RPC endpoint of a SourceLess node","protocol":"JSON-RPC 2.0 over HTTP POST at /. Named parameters only. Every call needs an id.","chainName":"SourceLess Midgard (testnet, public keys)","routes":[{"path":"/","method":"POST","description":"JSON-RPC 2.0. One call or a bounded batch. Named params only; every request needs an id"},{"path":"/rpc","method":"GET","description":"this index: the method catalogue with the cost class of each, the bounds, and how this endpoint is exposed"},{"path":"/health","method":"GET","description":"liveness. Asks the chain nothing at all, so a probe cannot drive it"}],"methods":[{"name":"getStatus","cost":"read","params":"{}","description":"chain id, height, head hash, pending count, and whether a write submitted here reaches the network"},{"name":"submissionReach","cost":"read","params":"{}","description":"whether a record submitted here leaves this node, and when it does not, why not"},{"name":"parameters","cost":"read","params":"{}","description":"the consensus parameters actually in force, governed values included"},{"name":"genesis","cost":"read","params":"{}","description":"the genesis hash, the genesis chain id, and the two chain bindings a signature must carry"},{"name":"balances","cost":"read","params":"{ address }","description":"all seven ledgers for one address, with the rule each imposes, plus the settled and next nonce"},{"name":"nonce","cost":"read","params":"{ address }","description":"the settled nonce, the nonce the next signature must carry, and how many are in flight"},{"name":"delegations","cost":"read","params":"{ master?, delegate? }","description":"live Gefjon spending authorities, with how much of each cap this window has left"},{"name":"transaction","cost":"read","params":"{ txId }","description":"queued, settled, final, diverged, abandoned or honestly unknown. `unknown` is not `rejected`"},{"name":"domainHolder","cost":"read","params":"{ domain }","description":"who holds an STR.domain, allocated or proved, or nothing"},{"name":"findDomain","cost":"read","params":"{ domain, address?, suggest? }","description":"the whole standing of a name: available, booked, held, in burn cooldown, or barred to `address`. A `null` from domainHolder cannot tell those apart"},{"name":"wnft","cost":"read","params":"{ wnftId }","description":"a wNFT as the chain holds it: entries, versions, slaves and the lock"},{"name":"wnftSequence","cost":"read","params":"{ wnftId }","description":"the next sequence number an identity record must carry"},{"name":"wnftAttribute","cost":"read","params":"{ wnftId, key }","description":"the active value of a PUBLIC attribute. A private entry is a commitment and is never opened here"},{"name":"contractNonce","cost":"read","params":"{ caller }","description":"the next call nonce a contract authorization must sign over, queued records included"},{"name":"contractCatalog","cost":"read","params":"{ address }","description":"the callable ABI of a deployed contract"},{"name":"contractEvents","cost":"read","params":"{ address }","description":"the event feed of a deployed contract"},{"name":"contractStorage","cost":"read","params":"{ address }","description":"a contract's storage leaves, as an object"},{"name":"governanceState","cost":"read","params":"{}","description":"the parameters in force and the assembly that decides them"},{"name":"collateralReserves","cost":"read","params":"{}","description":"reserves held against minted $TR, so a holder can check the peg themselves"},{"name":"bridgeAttestors","cost":"read","params":"{}","description":"the keys this chain's genesis authorises to mint $TR. An empty list is a real answer"},{"name":"simulateCall","cost":"compute","params":"{ address, functionName, caller, args? }","description":"runs a call against current state and commits nothing. Gas-bounded. Not a promise: state may move before a queued call is sealed"},{"name":"submitTransaction","cost":"write","params":"{ record }","description":"a signed transfer. Announced to the network when this node has a runtime"},{"name":"allocateDomain","cost":"write","params":"{ record }","description":"a signed STR.domain claim. Announced. An allocated domain may RECEIVE and nothing more; submitRegistration is what admits a transaction"},{"name":"submitRegistration","cost":"write","params":"{ record }","description":"a signed STR.domain proof, which locks 1000 STR. Announced. Takes a proof, never a key"},{"name":"submitWnft","cost":"write","params":"{ record }","description":"an identity record: a new version, a hide, a burn, a slave. Does NOT gossip — see `reach` on /rpc"},{"name":"submitGovernance","cost":"write","params":"{ record }","description":"a proposal, a ballot or an execution. Does NOT gossip"},{"name":"submitCollateral","cost":"write","params":"{ record }","description":"a bridge mint or redemption, signed by a genesis attestor. Does NOT gossip"},{"name":"submitDomainBurn","cost":"write","params":"{ record }","description":"a signed burn: the one path back out of the 1000 STR lock. Does NOT gossip"},{"name":"submitWnftTransfer","cost":"write","params":"{ record }","description":"a domain sale, signed by BOTH parties over identical bytes. Does NOT gossip"},{"name":"submitGefjon","cost":"write","params":"{ record }","description":"a spending delegation: a grant or revocation signed by the master, or a spend signed by the delegate. Does NOT gossip"},{"name":"submitWrapRecord","cost":"write","params":"{ record }","description":"a signed WSTR wrap or unwrap. Does NOT gossip"},{"name":"deployContract","cost":"write","params":"{ source: { name, source }, deployer, salt?, authorization? }","description":"queues a deployment and returns the address it will have. Nothing executes here"},{"name":"callContract","cost":"write","params":"{ address, functionName, caller, args?, authorization? }","description":"queues a call for the next block. Returns a receipt, not a result — use simulateCall for that"}],"bounds":{"maxBodyBytes":524288,"maxBatch":20,"maxUrlLength":2048,"contentLengthRequired":true,"note":"A POST must declare Content-Length. The length prefix is what lets an oversized or unaffordable body be refused before it is allocated, which is the same rule the wire framing follows and the reason a charge levied after the decode buys nothing."},"limits":{"keyedBy":"the socket peer address. No header is read: a header is a string a stranger writes, and a bucket key a stranger chooses is a fresh full burst per request.","read":{"perSecond":32,"burst":128},"writeAndCompute":{"perSecond":4,"burst":32},"bytes":{"perSecond":1048576,"burst":4194304},"refusal":"HTTP 429 with Retry-After and JSON-RPC code -32000. A refusal is a wait: no connection is dropped, no address is banned and nothing is remembered as hostile."},"exposure":{"kind":"loopback","host":"127.0.0.1","note":"Bound to loopback. Nothing leaves this machine."},"authentication":"None, and that is the design. Every write here is a record that carries its own signature over its own fields plus this chain's genesis hash, so there is no caller to authenticate — there is only work to bound, which is what the limits above do. This endpoint holds no key and will never take one: see JsonRpcSurface.submitRegistration.","reads":"Reads are public and answer whatever this node holds. `transaction` returns `unknown` for a transaction this node cannot find, and `unknown` is NOT a statement that it failed — do not render it as rejected.","notServedHere":{"blocks":"JsonRpcSurface exposes no block read, so neither does this endpoint. getStatus gives the height and the head hash. A service that needs block bodies should follow the chain itself rather than ask a node for them: see Fylgja (src/explorer/fylgja.ts), which joins the network as its own read-only node and holds a full copy.","operations":"Nothing privileged. Producing a block, reading the audit trail and every other operator action lives on Gungnir and Astrolabe, behind a Themis role table, and none of it is reachable from here."}}