Skip to main content

Keys and roles

Verified against: F-015 (2026-11-09), F-016 (2026-11-10), F-019 (2026-11-10), F-020 (2026-11-10), F-030 (2026-11-09), F-040 (2026-11-09) · spec docs/PRD.md §6.1, §16.1 · D-007, D-010

Status: accounts created on testnet 2026-11-09 (G2 PASS 2026-11-09T20:55Z, commit 5f27f44). Ids from packages/config/config.yaml.

Roles in nectar-core​

RoleAccountMay call
ownernectar.testnet (deployer key)collateral and risk params, oracle params and owner price, fee split, keeper, pause, gas reserve
keeperkeeper.nectar.testnet (no full-access key, D-012)trigger_preliquidation, relay_settlement_result, 0 deposit, through a function-call key (D-010)
token contractsmock USDC, mock NVDAxft_on_transfer (predecessor check)
quoter (P1)outlayer.testnet (F-040)only the #[private] callback on_quoter_result
MPC signer (P2)v1.signer-prod.testnet (F-030)only the #[private] callback on_signature
anyone—views; own quotes: withdraw, claim; own positions: repay

Where keys live​

KeyCreated byStored
parent testnet accountnear account create-account sponsor-by-faucet-service … save-to-keychain (F-016)OS keychain
sub-accountsnear account create-account fund-myself … save-to-keychain (F-020)OS keychain
keeper function-call keynear account add-key … grant-function-call-access (F-020)OS keychain or a 0600 file under ~/.nectar/
Solana devnet deployer (P2)solana-keygen~/.config/solana/, never in the repo

No key is ever pasted, committed or printed. .env holds paths and ids only. A pre-commit hook runs gitleaks. Signing a mainnet transaction, publishing, or anything irreversible needs the human owner (D-007).

Rotation​

  • Keeper: owner calls set_keeper(new), then near account delete-keys removes the old key (F-019).
  • Owner: on testnet, redeploy. PROD: DAO proposal.