Repository
nuvex
Path
programs/, crates/
Language
Rust, Anchor 1.2.0
Toolchain
Solana CLI 4.1.2, Rust 1.89 MSRV
What lives here
oracle-core creates requests, accounts for fees, finalises and performs callbacks. oracle-registry registers nodes, locks stake, records heartbeats and accepts slash from a configured authority. verification checks proofs. crates/ holds the shared types, the PDA seeds and the cryptography boundary.
- oracle-corerequests, callbacksLive
- oracle-registrynodes, stake, slashLive
- verificationECVRF proofsLive
Every account is a PDA and no account stores a URL or an unbounded list. Seeds are shared between nuvex-common and tests/fixtures/pda-seeds.json, so a new account means a new entry in both.
A first contribution
- Add a negative test for an instruction that already exists, then make sure it fails for the stated reason rather than by accident.
- Tighten an error: a check that returns a generic Anchor error where the protocol has a named one.
- Document a seed or a discriminant in crates/ that the fixtures already pin.
- Fix an arithmetic path that is not using checked arithmetic on lamports.
A change that adds an instruction needs a decision record first. A change that only wants the code to compile is not a reason to open a blocked decision.
Checks that must pass
Every pull request to the protocol repository has to pass one command:
make checkThat runs formatting, Clippy, cargo build-sbf for the three programs and the test callback consumer, the Rust tests and the JavaScript SDK tests. Program tests load target/deploy/*.so, so the Solana CLI and the platform tools have to be installed.
- LiteSVM 0.17 loads the default SBF architecture from that command, because verification calls sol_sha512.
- A cluster where SIMD-0512 is inactive cannot run the verifier, so do not assume a local validator without it.
- Program ids in Anchor.toml are local ids. Development keypairs live in keys/program/ and are gitignored.
Decisions that are closed
- ADR 0001: cancel, expire and VRF fulfilment are the live transitions. Every challenge, reject and fail edge stays forbidden.
- ADR 0002: challenge and reward vault accounts are not allocated.
- ADR 0005: max_fee is stored and never charged, and no basis points are set.
- ADR 0006: the callback receives the output and zero accounts. Forwarding remaining_accounts was rejected.
- ADR 0007: no program is deployed, and scripts/deploy-mainnet.sh exits before any transaction.
On this page