FAQ
Common questions from developers building on OXN. If your question isn't here, contact the team via the Support channels.
General
Is OXN a rollup?
No. OXN is a sovereign Layer 1 with its own validator set and consensus. It does not post state to Ethereum or depend on any other chain for finality.
Why do my contract calls revert with invalid code?
You compiled with an EVM version newer than paris. OXN does not yet support the PUSH0 opcode introduced in Shanghai. Set evmVersion: "paris" in your compiler config. See EVM Compatibility.
Can I read another user's balance from my contract?
No, if the contract uses confidential storage. Only the account holder (or someone they've approved) can read their balance via signed query. See Signed Queries and Building a Confidential ERC-20.
When is mainnet?
Timeline is not published. See Mainnet Status for the roadmap and current state.
Development
How should I set gasLimit?
Set gasLimit explicitly on every transaction rather than relying on client-side eth_estimateGas. See the recommended defaults below and in Gas and Fees.
Recommended gas limits?
- Native token transfer:
100_000n - ERC-20 transfer:
500_000n - Simple contract deploy:
3_000_000n - Large contract deploy:
5_000_000n+
Unused gas is refunded, so setting the limit high is safe.
Can I use viem or web3.js instead of ethers.js?
Yes, with appropriate wrappers. ethers.js has the most complete OXN SDK integration. viem is supported; web3.js support is more limited. Contact the team for the current status of alternate SDKs.
Can I test confidentiality locally with Hardhat?
Only partially. Hardhat's built-in network runs a plain EVM without SGX, so confidentiality-specific behavior (encrypted calldata, signed queries, encrypted storage) does not exist locally. Test business logic locally, then run integration tests against OXN Testnet for confidentiality paths. See Testing Confidential Behavior.
Why does Sapphire.randomBytes return the same value in one block?
By design. The randomness source is derived per-block. To get multiple independent random values within one call, pass different personalization strings:
bytes memory r1 = Sapphire.randomBytes(32, "draw-1");
bytes memory r2 = Sapphire.randomBytes(32, "draw-2");
Wallets and accounts
Why does MetaMask show "Invalid address" when sending?
Possibly a misleading error label. The OXN Web Wallet (in some versions) displays "Invalid address" when the underlying error is actually insufficient balance to pay fees. Check the account balance and, on testnet, try gasPrice: 0n.
Why does the faucet reject my address?
The faucet only accepts EVM (0x…) addresses, not native (oxn1…) addresses. Copy the EVM address from your wallet's main view.
Can I use my Ethereum mnemonic on OXN?
Yes. The same mnemonic produces the same private key, which produces the same EVM (0x…) address on both networks. Balances at that address are separate on each chain.
What does "TBLUAI" or "BLUAI" mean in my wallet?
Both refer to OXN's native token. The wallet display symbol differs by environment:
- Testnet:
TBLUAI(theTprefix marks testnet, and testnet tokens have no economic value). - Mainnet:
BLUAI(this will be the symbol once mainnet launches).
Older documentation may still show "TEST" — that was the earlier testnet symbol and is being replaced by TBLUAI.
Confidentiality
Can a global indexer decrypt my contract's events?
No. Event contents are encrypted with the caller's session key, so only the caller who emitted them can decrypt. If you need global event visibility, emit a plain companion event without sensitive fields. See Confidentiality Model.
Can I hide msg.sender?
No. msg.sender is public — it's the transaction sender, and the chain has to route transactions somewhere. If you need transaction-graph privacy, layer a mixer or relayer on top of OXN.
Can I hide the contract I'm calling?
No. tx.to is public. Confidentiality hides what you asked the contract to do, not that you called it.
Is my gas usage private?
No. Gas is a public resource measured on public hardware. If your contract branches on secret state, the gas used leaks which branch executed. See Confidentiality Pitfalls.
Operations
Chain state was reset. What happened?
OXN Testnet may be reset during active development. Contract addresses and account balances are cleared on reset. Chain ID and endpoints stay the same. See Testnet Parameters.
Can I run a validator?
Not currently. Validator onboarding is not open in the testnet phase. Third parties can run read-only RPC nodes. See Node Operators Overview.
How do I report a bug?
Non-security bugs: file an issue on the appropriate GitHub repository. Security issues: see Reporting Security Issues — do not file security issues publicly.