Private Identity
In ORRANGE, your private identity is the STRK20 user identity — a deterministic, Ready-derived account address. It is not a Shadow Account.
Terminology
This implementation uses two interchangeable terms for the same thing:
- STRK20 Private Identity — used in the product UI.
- Private Treasury Identity — the same address in the treasury context (the source of every AI-executed private transfer).
How it is derived
Privy public key
│
▼
computeReadyAccountAddress(publicKey, classHash)
│
▼
Ready-derived account address ← STRK20 user identity
│
▼
owns private notes · registers viewing key · sources every private transferFor the Privy lane, ORRANGE derives the counterfactual Ready account address from the Privy wallet’s Starknet public key using computeReadyAccountAddress(salt = public key, Ready v0.4.0 class hash, deployer = 0). This derived address is the real on-chain account. It is not Privy’s wallet.address, which differs.
It is the STRK20 user
The integration passes this address as the STRK20 SDK user. That user:
- is the owner of private notes (
discoverNotes(user, viewingKey, …)), - registers the viewing key, and
- is the source account of every private transfer.
In the treasury, this identity is recorded as the policy’s selfTransferAddress: a proposal whose recipient equals it is rejected deterministically as a meaningless self-transfer.
The Ready/Wallet-API lane
When you connect an external privacy wallet (Ready) instead of the Privy lane, the connected account is the STRK20 identity — there is no separate derivation. The wallet owns the viewing key and performs discovery against the same identity.
What we do not use
shadow_account_anonymizer — an on-chain anonymizer sub-account keyed bycompute_identity_key(user, viewingKey, anonymizerAddress) plus a dapp name, exposed via ShadowAccountsBuilder.invoke. ORRANGE does not integrate it: the adapter never passes a shadowAccountAnonymizerAddress. The Ready-derived address above is the private identity — not the SDK’s Shadow Account concept. This is verified by theaiShadowAccount test in the repository.For how this identity feeds the treasury copilot’s policy, see AI + Policy Architecture.
