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.
handle-proof-pattern.tsx
// 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