Core Concepts
Confidential Handles
A handle is the on-chain reference to encrypted data managed by Nox Protocol ACL rules.A handle is a 32-byte 0x-prefixed identifier that points to encrypted input. The plaintext value is never written to the public chain.
encryptInput sends the value to the Nox Gateway and returns a handle plus handleProof. The contract validates that proof before using the handle.
CRITICAL: Encrypt immediately before submit.
Nox handle proofs expire after 1 hour. Never store a handleProof in React state and submit it later. Always call encryptInput() immediately before writeContractAsync() in the same async function.
- Proof expiry: submit to the contract within 1 hour of encrypting.
- ACL admins: contracts can be allowed to operate on handles.
- Viewers: wallets added via ACL can decrypt authorized handles.
- isPublic: not used for sensitive deal values; SeaEquity keeps values private.
- Transient vs persistent access: input proofs are transient, viewer access persists after ACL updates.
// WRONG - proof may expire
const [handle, setHandle] = useState(null);
// user fills form, takes 2 hours...
await writeContractAsync({ args: [handle] }); // REVERT
// CORRECT - encrypt immediately before submit
const { handle, handleProof } = await handleClient.encryptInput(...);
await writeContractAsync({ args: [handle, handleProof] }); // SUCCESS