Deployment audit statement · Arbitrum One · chain id 42161

Zxo on Arbitrum Deployment Statement

Verified source · exact match
Date
2 October 2026
Based on
Security Audit Revision 3.0
Compiler
solc 0.8.36
commit 8a079791
Build settings
Optimizer 200 runs · Shanghai · via-IR off
Verification
Sourcify, creation and runtime bytecode
Reviewer
Claude (Anthropic), AI-assisted
01

Statement

Audit score
8.7/10
8.5 → 8.7 in Revision 3.0

Score of the audited code as deployed. It is not a rating of the tokens, the team or any investment.

The Zxo contracts deployed on Arbitrum One at the five addresses in section 02 are built from the source code reviewed in Zxo Security Audit Revision 2.5. Sourcify reports an exact match of creation and runtime bytecode for each contract.

The deployed source differs from the reviewed files in three places only: the BUSL-1.1 license header added to each file, the ChainLib import (now ArbitrumLib.sol), and the Arbitrum addresses and HOLDER settings inside ArbitrumLib.sol.

No audit finding is open in the deployed code, and no path was found that lets anyone take user principal. Unstake has no price gate and no owner gate, and the core LP has no withdrawal function.

Three operational items remain open (section 07): the owner is a single wallet, no static-analysis or third-party audit report was provided to this review, and the PancakeSwap and USDT paths have not yet run on their own chains.

5Contracts with exact-match source
6Pools launched in the enforced order
58Zxo transactions reviewed
0Differences from audited logic
02

Deployed contracts

ContractAddress (links to Sourcify)BlockVerified (UTC)Bytecode
ZxoTreasury
Fee and referral receiver
0x0341A7a6CC031662526492e10796E551125AE2bc50954664229 Sep 2026 11:17Exact match
ZxoOracle
15-minute average price reader
0x98c9695bb012A42FDcB734324A78E63eE6c23D4450954788829 Sep 2026 11:19Exact match
ZxoV3Deployer
Seeds other DEXes, then finalizes
0xb6CB455CB67d59DD269C865428acece75eA0859450956180529 Sep 2026 11:21Exact match
Zxo
Farm, staking, rewards, core LP
0x5356B3004D0394dEA51161d175265EC8F92c96b750956333129 Sep 2026 11:22Exact match
ZxoToken (pool 0)
Reward token of pool 0
0x304441b6BDADA52d41f4AA0A0b13dC4185B3979B5096982912 Oct 2026 17:07Exact match

All five were deployed by 0xFf9623ABe5D081c3c4E586330ab714FcB718fa53, an externally owned account that is also the current owner of Zxo. The order on-chain was ZxoTreasury, ZxoOracle, ZxoV3Deployer, then Zxo (28 September 2026, 01:49 UTC), followed by ZxoV3Deployer.setZxoContract(Zxo) at block 509696927. That is the order the audit requires. Pools 1 to 5 use further ZxoToken instances created by Zxo.createPool from the same token code; only the pool 0 token was submitted for verification.

03

Deployed source against audited source

Hash match keccak256 in the Sourcify metadata equals the hash of the reviewed file Line match verified source compared line by line with the reviewed file
FileMethodkeccak256 of deployed fileResult
contracts/ZxoTreasury.solHash match0x0079a87d4d42342400d69e77edfdef134ec908260c99c68f81747a2f0a213056Identical to the reviewed file
contracts/ZxoOracle.solHash match0x8afbab8cd5759e84829fb1de90d6b019e8c05ccb3029a9443d2906d5a4056c69Identical to the reviewed file
contracts/tokens/ZxoToken.solHash match0x672fc398591453b8e92a5781c8ccdefeb42b4efa718056bc802927f95ee470c1Identical to the reviewed file
contracts/ZxoV3Deployer.solHash match0x18724bad994f0598fa5e063cf9604db3c932e3a5f059c0af16cc2de659492b7dIdentical; import switched to ArbitrumLib
contracts/interfaces/IZxo.solHash match0xe5829a468f8af5b9c339293d8360b5cdc533d65d24fb79efc147569868508a0fIdentical to the reviewed file
contracts/interfaces/Iv3PosManager.solHash match0x982265f349185d696df1f26f1954c203c0ac4bc7498ae34b2001edd61dc1a917Identical to the reviewed file
contracts/libraries/ArbitrumLib.sol
as compiled into ZxoV3Deployer
Hash match0xba0c9c8350ceab6d746617a4c95cae995f726174ffd17f49ba321a83a7813a5eTreasury and oracle set, deployer still zero, HOLDER settings as in section 04
contracts/Zxo.solLine match0x609ab4d98b06c234f577e1a40d19587dc7d16ed5074b1c44cd9ccac05924570f
expected value, see note
907 lines compared, no code difference; import switched to ArbitrumLib
contracts/libraries/ZxoLib.solLine match0x6350d7aa68bfe68ab1c2ff95c70db68c621a96b132f376374900b6d4d61ef30d
expected value, see note
428 lines compared, no difference
contracts/libraries/ArbitrumLib.sol
as compiled into Zxo
Line match0x29e77369880de3bf9d809129c826367eb38f2ccf719d63974f2721036b18fb75
expected value, see note
All three Zxo addresses set; otherwise as above
contracts/interfaces/IZxoToken.solLine match0x329833fbb1620d4412527a8e9f462f56694ee01169787d81532a35db6d4801c8
expected value, see note
No difference
contracts/interfaces/IZxoOracle.solLine match0x844e984436f41bcec3ad7b0ba0e06b4126dbd149a8de1b79f9c232a9207f1cec
expected value, see note
No difference
contracts/interfaces/IZxoV3Deployer.solLine match0x32a366db0f56d1ae5489bc7121d87d0d2809d3d39ef5f9949ce56f0c912ee463
expected value, see note
No difference

Hash match. The compiler metadata embedded in each deployment lists a keccak256 hash for every source file. For the files marked Hash match, that hash equals the hash of the reviewed file with the published license header (Change Date 2029-09-28) placed in front. This is an exact, byte-level result.

Line match. The Zxo metadata was too large for this review's reader to reach the hashes of Zxo.sol and ZxoLib.sol. Those files were instead read from the Sourcify-verified input and compared with the reviewed files line by line, ignoring whitespace. No code line differs. The hash shown for these files is the value the reviewed file produces; anyone can confirm it against metadata.json on Sourcify to turn the line match into a hash match.

Interface. The verified ABI of Zxo has 24 functions, 3 events and 4 errors, and matches the reviewed interface, including unstake(uint64,uint8,bool,address) and the single ZxoEvent. The OpenZeppelin files carry identical hashes in all five deployments; they were not compared with an upstream release.

04

Configuration compiled into Zxo

Constant (ArbitrumLib)ValueNote
CHAIN_ID42161Arbitrum One
POS_MANAGER0xC36442b4a4522E871399CD717aBDD847Ab11FE88Uniswap V3 position manager
FACTORY0x1F98431c8aD98523631AE4a59f267346ea31F984Uniswap V3 factory
ZXO_TREASURY0x0341A7a6CC031662526492e10796E551125AE2bcMatches section 02
ZXO_V3_DEPLOYER0xb6CB455CB67d59DD269C865428acece75eA08594Matches section 02
ZXO_ORACLE0x98c9695bb012A42FDcB734324A78E63eE6c23D44Matches section 02
HOLDER_TOKEN0x6F296078e80907E23014a619C83d98912E35E66AChanged since Revision 2.5, which reviewed 0x286e…F164
HOLDER_THRESHOLD3,690,000,000 tokensChanged since Revision 2.5, which reviewed 369,000
What a successful Zxo deployment proves The Zxo constructor reverts unless every check passes, so the deployment at block 509563331 shows that on that block: the chain id was 42161; all six configured addresses held code; the position manager used the configured factory; the 0.01% fee tier had tick spacing 1; the HOLDER token reported 18 decimals and the threshold was at least one token; the treasury and deployer returned their identity markers; the deployer was not yet linked to another Zxo; and the oracle reported its 15-minute window. It also shows the contract compiled without stack errors and fits the 24,576-byte size limit.

The HOLDER token and threshold are not security settings, but they decide who gets the extra 25% bonus. The team should confirm that the new token and the 3.69 billion threshold are the intended ones. The test stakes reviewed below received the standard bonus without the HOLDER increase.

05

On-chain activity reviewed

Events and transactions for Zxo and ZxoV3Deployer were read through the Arbitrum Blockscout API, from deployment to 1 October 2026, 11:23 UTC: 58 Zxo transactions with 95 decoded ZxoEvent logs, and the first 14 ZxoV3Deployer transactions. Every transaction listed succeeded.

Functions exercised on mainnet

OperationSeenWhat it confirms
Pool launch: createPool, core LP, seed, finalize, core stake6 poolsEach pool followed the enforced order. Every reward token was finalized before its core stake was minted.
Seeding on another DEX6All through position manager 0x46A15B0b27311cedF172AB29E4f4766fbE7F4364, the PancakeSwap V3 position manager address. Confirm it against PancakeSwap's published Arbitrum addresses.
Stake11The health gate passed, so the spot price and the 15-minute average were both read and in range on live Uniswap V3 pools.
Harvest (claim and collect)8 + 8Rewards were minted on claim and trading fees were forwarded.
Unstake7Each position was held 24.6 to 37.4 hours, past the 1-day lock-up. Forfeited pending rewards were logged, not minted.
Config changes and rate re-targeting10 + 20Target APR and referral rate changes logged the stored value; the emission rate re-targeted after each.
ZxoV3Deployer set-up1The validator was set to the zero address at deployment, which disables the testnet-only token path. setZxoContract was called once.

Numbers recomputed from the audited formulas

Check (pool 0)Formula resultOn-chain valueResult
First reward claim: rate × seconds × weight ÷ total weight, over 2,351 seconds3,583,870,758 wei3,583,870,758 weiExact
Staked value counted for emissions with only the core stake present0.187688 tokens0.187688 tokensMatch
Stake bonus at the launch price10% to 12% expected10.99% on all 11 stakesIn range
Core LP size from its liquidity over ticks 11 to 300361,486.49 tokensliquidity 2.52 × 10²⁵Derived

The first row reproduces a live claim to the last wei from the reward formula in the audit. The second shows that a single-sided stake counts toward the value used for emissions, which was finding M-01. The staked value on-chain comes from the emission rate set by the first re-target; the formula result comes from the core-stake liquidity and its tick range.

All activity so far is the team's own Every stake, claim and unstake in the period came from the deployer address. This is a live mainnet test by the team with small amounts, not evidence of use by the public. It does show the contracts behave as audited on Arbitrum.
06

Pools and owner settings observed

PoolReward tokenCreated (UTC)Max tokens per 30 daysTarget APR at 1 OctBurned at finalize
00x304441b6BDADA52d41f4AA0A0b13dC4185B3979B28 Sep 11:5737.54640%3.138138 tokens
10x113CA9e137ee2FD5bB89C979255010BBb3997D4f28 Sep 16:3812,010,569,300.98100%0
20x387BAfD20705c33Ff04A392C125BDeB39DfC6f9828 Sep 18:37485,201.3675%0
30x1BABe35Eb60B5bdd4E4299EBdc6d511E29F0E90628 Sep 20:44100,00032%453,914 wei
40x3Ec1c1ED083156c2B33Bf49550eCc9390e1b50eB28 Sep 23:514,947.23220%0
50x0cc4C9B093223E95d93FF10E6C6CdEae1457925829 Sep 13:481.04240%92,483 wei

These settings are within the limits the contract enforces and are the owner's to choose. They are listed so that users can see them; they are not findings.

07

Open items

Open not done or not evidenced Team-reported stated by the team, not independently checked
ItemStatusDetail
Owner is a single walletOpenZxo and ZxoV3Deployer are owned by the deployer account. No ownership transfer appears in the logs. The team plans a multisig after all mainnet deployments. Until then one key can create pools, change target APR and referral rates, and collect core LP fees. It cannot touch staked positions, block unstaking or withdraw core liquidity.
Static analysis (Slither or Aderyn)OpenThe team's note reports successful testing but does not say a static analyzer was run. No report was provided.
Independent human auditTeam-reportedThe team states that all audits passed. No third-party report was provided to this review, so none is relied on here.
PancakeSwap pool as the main pool; USDT pairOpenOn Arbitrum the main pools are Uniswap V3. Reading the price from a PancakeSwap pool (BNB Chain) and staking a USDT pair (Ethereum) have not run on-chain yet. Test both on a fork before those deployments.
Revert testsTeam-reportedPre-initialized pool, mismatched decimals, and unstake to a contract that cannot receive NFTs. The team confirms each reverts as designed. A contract staker must be able to pass the to argument to recover.
Price history per poolTeam-reportedStakes and harvests succeeded, so the 15-minute average was available. The stored history size of each pool was not read. Run set-observations.py for all six pools if not already done.
HOLDER settingsOpenConfirm the new HOLDER token and 3.69 billion threshold are intended (section 04).
08

Limits of this statement

09

Verify it yourself

Source and bytecode

  • Open each address in section 02 on Sourcify and check that it shows Exact Match.
  • Download metadata.json for Zxo and compare the keccak256 of contracts/Zxo.sol and contracts/libraries/ZxoLib.sol with section 03.
  • Or compile the published standard JSON input with solc 0.8.36 and compare the runtime bytecode with the chain.

Before you stake in a pool

  • ZxoV3Deployer.isFinalized(rewardToken) returns true.
  • The deployer's balance of the reward token is 0.
  • Each PoolStarted event names a position manager you recognize.
  • Zxo.owner() shows who controls pool settings; check whether it is a multisig yet.
  • Zxo.poolInfo(id) shows the target APR and referral rate that apply to you.