Statement
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 PulseChain mainnet at the six addresses in section 02 are built from the source code reviewed in the Zxo Security Audit. Sourcify reports an exact match of creation and runtime bytecode for each one. It is the same code that runs on Arbitrum One.
The deployed source differs from the reviewed files in three places only: the BUSL-1.1 license header on each file, the ChainLib import (now PulseChainLib.sol), and the PulseChain addresses and HOLDER settings inside PulseChainLib.sol.
No audit finding is open in the deployed code, and no path was found that lets anyone take user principal. The protocol ran as audited on LibertySwap, a PancakeSwap-style V3 DEX: nine pools launched in the enforced order, and a live reward claim was reproduced to the last wei.
The open items are operational (section 08): the owner is a single wallet, and no static-analysis or third-party audit report was provided to this review.
Deployed contracts
| Contract | Address (links to Sourcify) | Block | Verified (UTC) | Bytecode |
|---|---|---|---|---|
| ZxoTreasury Fee and referral receiver | 0x923cbe1C05e9c0014D6514a506A8E74B9254FF86 | 27704288 | 5 Oct 2026 11:30 | Exact match |
| ZxoOracle 15-minute average price reader | 0xC8CaA5F5961d4679C79A18731C53b6023Ac8862B | 27704319 | 5 Oct 2026 11:31 | Exact match |
| ZxoVerify (first run) Configuration check before the deployer | 0xa8D7A6A9291E60400F0CA64c5dfed64997Cd3817 | 27704333 | 6 Oct 2026 00:51 | Exact match |
| ZxoV3Deployer Seeds other DEXes, then finalizes | 0x3D62C13A12F246A2CAC2d7fCe1A43D63ED253FBE | 27704349 | 5 Oct 2026 11:33 | Exact match |
| ZxoVerify (second run) Configuration check with the deployer | 0x923028273B38b24fb98F846f0e4c809fAB58523f | 27704375 | 6 Oct 2026 00:52 | Exact match |
| Zxo Farm, staking, rewards, core LP | 0x813984963d4e0CC7fF5d04E830767fe63D815B0A | 27704394 | 5 Oct 2026 11:34 | Exact match |
All six were deployed on 3 October 2026 by 0x98C3eEc2b28D82b05edfA3D40F8A468a58BD1e24, an externally owned account that is also the current owner of Zxo. The order on-chain was ZxoTreasury, ZxoOracle, ZxoVerify, ZxoV3Deployer, ZxoVerify again, then Zxo at 16:46 UTC, followed by ZxoV3Deployer.setZxoContract(Zxo) at block 27704538. That is the order the audit requires. Both ZxoVerify deployments succeeded, and ZxoVerify reverts unless its checks pass.
The nine reward tokens are ZxoToken instances created by Zxo.createPool from the same token source. No reward token address was submitted for separate verification, so they are covered through the Zxo build, which contains the token code.
Deployed source against audited source
| File | Method | keccak256 of deployed file | Result |
|---|---|---|---|
| contracts/ZxoTreasury.sol | Hash match | 0x7fe7c3597e1ce0a7d1a47af5d8be8c6790ffe8e45a3e25ab8da0b671fd7168ea | Identical to the reviewed file |
| contracts/ZxoOracle.sol | Hash match | 0xece409c3f72fb085760937016f8814eb054fd3bac85d914f881cdf4aa9b187b3 | Identical to the reviewed file |
| contracts/ZxoV3Deployer.sol | Hash match | 0x21a2fcf6c4845487ce4e4bc1706e70ea7d54c1b4aee1c697bc15fd0ca18ae07c | Identical; import switched to PulseChainLib |
| contracts/ZxoVerify.sol | Hash match | 0xcfda46a8ab850909f1dda4f844190438c0ff81b1c85af4e31d0e85651eee4779 | Identical; import switched to PulseChainLib |
| contracts/interfaces/IZxo.sol | Hash match | 0x585cf1d293808b83e594f728c802a9af8b8d2f46ed657a4f3868347513f1d720 | Identical to the reviewed file |
| contracts/interfaces/IZxoOracle.sol | Hash match | 0x18f282e363125d95b610fbe5f0a5fc0a2d6e2a0e5adec5943a1b5b30399de13e | Identical to the reviewed file |
| contracts/interfaces/Iv3PosManager.sol | Hash match | 0x982265f349185d696df1f26f1954c203c0ac4bc7498ae34b2001edd61dc1a917 | Identical to the reviewed file |
| contracts/interfaces/IUniswapV3.sol | Hash match | 0xb0a9deea3bcffc41b32de19bfdf5100d138914f070f882238e18208942c4875a | Identical to the reviewed file |
| contracts/libraries/PulseChainLib.sol first ZxoVerify and ZxoV3Deployer | Hash match | 0xd0cb26af18a7dd18872a6f910cb5c29998c90e64bca50399c41185838dae3dad | Treasury and oracle set, deployer still zero, HOLDER settings as in section 04 |
| contracts/libraries/PulseChainLib.sol second ZxoVerify and Zxo | Hash match | 0x22ad53a7a2ad2bde4c76fca9f3f3ef59ffde50211f497bec90715a207feaa789 | All three Zxo addresses set. The copy compiled into Zxo reads the same line for line |
| contracts/Zxo.sol | Line match | 0x48a1be203e0ce18d0741af8144f37ffb120dd89937467915edd6ac15ccc9e6ff expected value, see note | 907 lines compared, no difference; import switched to PulseChainLib |
| contracts/libraries/ZxoLib.sol | Line match | 0x5824ce7e7131aa46ed589ba47d7178c5c442a349eff7c7f97b52ccca6a7f200b expected value, see note | 428 lines compared, no difference |
| contracts/tokens/ZxoToken.sol | Line match | 0x52566870113cb2dea33c69495c8a3c31e775283ed0e2e9ceeb55b43d33dfb00a expected value, see note | 83 lines compared, no difference |
| contracts/interfaces/IZxoToken.sol | Line match | 0x3f5b34c68c2abafacea47bdb3a9ee7b0ad0e89a19091e56cbb8cc7873bb929ae expected value, see note | No difference |
| contracts/interfaces/IZxoV3Deployer.sol | Line match | 0x5865997e0c6674cd4ced4204abb6c3dfaba0f14ed91c0de32ea3284aa1b42617 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-10-03) placed in front. This is an exact, byte-level result. It covers ten files here, including both versions of PulseChainLib.sol and ZxoVerify.sol.
Line match. The Zxo metadata is too large for this review's reader to reach the hashes of the files compiled only into Zxo. Those files were read from the Sourcify-verified input and compared with the reviewed files line by line, ignoring whitespace. No line differs. The hash shown is the value the reviewed file produces; anyone can confirm it against metadata.json on Sourcify.
Interface. The verified ABI of Zxo has 24 functions, 3 events and 4 errors and is the same as on Arbitrum. The OpenZeppelin files carry the same hashes as in the Arbitrum deployment; they were not compared with an upstream release.
Configuration compiled into Zxo
| Constant (PulseChainLib) | Value | Note |
|---|---|---|
| CHAIN_ID | 369 | PulseChain mainnet |
| POS_MANAGER | 0x19b1347900840e7a299F339868881750918FAD91 | LibertySwap position manager |
| FACTORY | 0x796fcbDC956b85797EFe21145Aa97599B7FB36a6 | LibertyV3Factory, verified on Sourcify |
| ZXO_TREASURY | 0x923cbe1C05e9c0014D6514a506A8E74B9254FF86 | Matches section 02 |
| ZXO_V3_DEPLOYER | 0x3D62C13A12F246A2CAC2d7fCe1A43D63ED253FBE | Matches section 02 |
| ZXO_ORACLE | 0xC8CaA5F5961d4679C79A18731C53b6023Ac8862B | Matches section 02 |
| HOLDER_TOKEN | 0xDb3fF08284f0874860281b3A84a0D48ab25040d6 | Labelled DYNASTY in the source. Was zero in the reviewed library |
| HOLDER_THRESHOLD | 3,690,000,000 tokens | Was zero in the reviewed library |
LibertySwap, a PancakeSwap-style V3 DEX
The original audit's finding H-02 was that a typed slot0() read reverts on PancakeSwap-style V3 pools, because those pools return one field in a different size from Uniswap. It would have blocked stake and harvest. The fix reads the price with a low-level call and decodes only the two fields every V3 fork shares.
PulseChain is the first deployment where the main pools are that pool type. The LibertyV3Factory is verified on Sourcify, and its interface has the functions that PancakeSwap added to the Uniswap V3 factory (poolDeployer, setLmPoolDeployer, setWhiteListAddress, and setFeeProtocol with a pool argument).
| Code path on a LibertySwap pool | Seen on mainnet | Result |
|---|---|---|
Create the pool, then read its price and require the launch price (initializePool, core) | 9 | Worked |
Health gate: spot price read and 15-minute average through observe (stake, harvest) | 22 | Worked |
| Mint positions through the LibertySwap position manager (pool initialization and stake) | 34 | Worked |
| Collect core LP trading fees to the treasury | 1 | Worked |
This confirms the H-02 fix on a live PancakeSwap-style pool. PancakeSwap itself on BNB Chain has not been run, but it uses the same pool design and the same Zxo code path, so the remaining risk there is low. The health gate count is the 16 stake and 6 harvest transactions. The mint count is the 18 successful pool initializations and the 16 stakes.
On-chain activity reviewed
Transactions and events for Zxo and ZxoV3Deployer were read through the PulseChain explorer API, from deployment on 3 October 2026, 16:46 UTC to 5 October 2026, 22:39 UTC: 100 Zxo transactions with 119 ZxoEvent logs, and all 38 ZxoV3Deployer transactions with their 39 logs.
Functions exercised on mainnet
| Operation | Seen | What it confirms |
|---|---|---|
| Pool launch: createPool, core LP, seed, finalize, core stake | 9 pools | All nine followed the enforced order. Every reward token was finalized before its core stake was minted. |
| Seeding on other DEXes | 27 | Three position managers per pool (section 07). Each TokenFinalized event followed the third seeding. |
| Stake | 16 | The health gate passed on LibertySwap pools: spot price and 15-minute average both read and in range. |
| Harvest (claim and collect) | 6 | Rewards were minted on claim and trading fees were forwarded. |
| Unstake | 2 | Positions were held 27.1 and 24.4 hours, past the 1-day lock-up. Forfeited pending rewards were logged, not minted. |
| Core LP fee collection | 1 | 133.09 pair tokens of trading fees from pool 0's core LP went to the treasury. Core liquidity was not touched. |
| HOLDER bonus | 8 stakes | Stakes from qualifying wallets received 13.74%, exactly 1.25 times the standard 10.99%. |
| Config changes and rate re-targeting | 17 + 24 | Target APR and referral rates logged the stored value; emission rates re-targeted after each. |
| ZxoV3Deployer set-up | 1 | The 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 result | On-chain value | Result |
|---|---|---|---|
| First reward claim, using the contract's integer steps over 6,990 seconds | 637,524,190,098,746,069 wei | 637,524,190,098,746,069 wei | Exact |
| Staked value counted for emissions with only the core stake present | 110,385,144.43 tokens | 110,385,144.43 tokens | Match |
| Stake bonus at the launch price | 10% to 12% expected | 10.99% to 11.00% standard | In range |
| HOLDER bonus multiplier | 1.25 × | 13.74% ÷ 10.99% = 1.25 | Exact |
The first row reproduces a live claim to the last wei from the reward formula in the audit. The second shows that the single-sided core stake counts toward the value used for emissions (finding M-01): the on-chain figure comes from the first emission rate, and the formula figure from the core-stake liquidity and its tick range.
Who used it
- 94 of the 100 transactions came from the deployer wallet.
- Four other addresses sent 6 transactions: 5 stakes and 1 harvest, in pools 6, 7 and 8.
- This review cannot tell whether those four are team wallets or the public. One of them named a team address as its referrer.
Two failed transactions
- The first two
initializePool(0, core)calls reverted. Each had a 4,000,000 gas limit and used 3,761,352. - The third call, with a 7,800,000 limit, succeeded using 5,072,846. Creating the LibertySwap pool needs more than the first limit allowed.
- A reverted call changes nothing on-chain. This was a gas setting, not a contract fault.
Pools and owner settings observed
| Pool | Reward token | Created (UTC) | Target APR at 5 Oct | Referral rate | Pair token |
|---|---|---|---|---|---|
| 0 | 0x4542fD562bBa19AE85e017d5b50Be7C4b16443DF | 3 Oct 17:24 | 10% | 3% | WPLS |
| 1 | 0x27381e9925B58133136297d7dd79dab1F2A1dD32 | 3 Oct 21:25 | 15% | 5.55% | HEX |
| 2 | 0x3647464C8e72CdB4Ea3Fc58002D2A1C9E0fe2daF | 4 Oct 01:41 | 21% | 10% | PLSX |
| 3 | 0x2dE787C0AB8DeCb4167d43ee00A0eE4d2e3f6f9E | 4 Oct 03:59 | 12% | 7% | INC |
| 4 | 0xbcE06Bb11FF7fEb628eE80589BC70206085A63Be | 4 Oct 11:40 | 28% | 16% | PRVX |
| 5 | 0x518bC3Ce004a6d6f074eD24cE0e6e730786aE99f | 4 Oct 17:26 | 360% | 25% | INTARSIA |
| 6 | 0x8fA5C2a7CD2974b5b817136A986bf5475F310887 | 4 Oct 17:52 | 510% | 30% | ZXO |
| 7 | 0x3BfefFA660696417b8068E19E8De1456211063d5 | 5 Oct 00:13 | 48% | 18% | PCOCK |
| 8 | 0x204250574e7c7BE7fc6AEdD38c365DA651695eaF | 5 Oct 00:30 | 110% | 26% | pDAI |
- Target APR. Pools 5 and 6 target 360% and 510%. Both were created with the 320% cap, which doubles to 640% in the first year. Each pool's emissions are also limited by its 30-day cap, fixed at creation.
- Referral rate. It ranges from the 3% default to the 30% maximum (pool 6). The referral share comes out of each claim, so a staker on pool 6 keeps 70% of rewards unless they are their own referrer.
- Core stake and your APR. The core stake counts toward a pool's reward weight but never claims (finding M-03, accepted). What that costs stakers depends on its size beside theirs. The core stakes are small, so the cost fades quickly as a pool fills; the table below gives the sizes.
- Seeding. Every pool was seeded through three position managers: 0xCC05bf158202b4F461Ede8843d76dcd7Bbad07f2, 0x18A532b36A9F6B10b3FEC5BF225C00A0Ec89B79E and 0xC36442b4a4522E871399CD717aBDD847Ab11FE88. The third is the Uniswap V3 position manager address. This review did not identify the DEX behind the first two; the team should publish their names so users can check them.
- Token-only calls. 23 of the 32
createPoolcalls usedwithoutPool = true. These deploy a token with no pool and no supply and have no effect on the pools.
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.
Core stake size and what it costs stakers
| Pool | Pair token | Core stake (reward tokens) | About, in USD | User stakes beside it, 5 Oct | Stakers earn, share of target APR |
|---|---|---|---|---|---|
| 0 | WPLS | 110,385,144.43 | $1,030 | None (test stake withdrawn) | n/a |
| 1 | HEX | 246,560.14 | $590 | 0.7% of it | about 50% |
| 2 | PLSX | 55,206,463.20 | $420 | 0.6% of it | about 50% |
| 3 | INC | 1,949.70 | $790 | 0.3% of it | about 50% |
| 4 | PRVX | 3,538,570.42 | $330 | under 0.01% of it | about 50% |
| 5 | INTARSIA | 0.9615 | $450 | 0.3% of it | about 50% |
| 6 | ZXO | 769,033.58 | $560 | 8 times | about 90% |
| 7 | PCOCK | 36,900.00 | $390 | 1.3% of it | about 50% |
| 8 | pDAI | 217,058.82 | $360 | 885 times | about 99.9% |
- Size. The nine core stakes are worth about $330 to $1,030 each and about $4,900 together, at DEX prices of the pair tokens on 5 October 2026. The team reports $1,078.57 for pool 0 and about $200 to $600 for the others. This review's figures agree, except pool 3, which comes out near $790 at the INC price used here.
- Fixed at creation. Each amount is set in the
createPoolcall, stored as an immutable value in the reward token, and minted once. It cannot be increased later. The amounts above are decoded from those calls and match each pool's first emission rate exactly. - Effect on APR. A core stake carries about 2.2 times the reward weight of a user stake of the same value. When user stakes equal the core stake, stakers earn about 62% of the target APR. At ten times the core stake they earn about 90%, and at one hundred times about 99%. For pool 0 that is roughly $10,000 and $100,000 of user stakes; for a $400 core stake, $4,000 and $40,000.
- Where the pools stood. Pools 6 and 8 held real user stakes, and stakers there were earning about 90% and 99.9% of target. The other pools held test-size stakes far smaller than the core stake, or none. That is the only case where stakers earn about half of target.
Open items
| Item | Status | Detail |
|---|---|---|
| Owner is a single wallet | Open | Zxo 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) | Open | No report has been provided. |
| Independent human audit | Team-reported | The team states that all audits passed. No third-party report was provided to this review, so none is relied on here. |
| Seeding DEX names | Open | Publish which DEX each of the three seeding position managers belongs to (section 07). |
| Price history per pool | Team-reported | Stakes 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 nine pools if not already done. |
| HOLDER settings | Team-reported | The token and the 3.69 billion threshold were set after the audit reviewed this library. The bonus worked for qualifying wallets, which suggests the values are the intended ones. Confirm. |
| Deployment gas limit | Team-reported | Use at least the 7,800,000 limit for initializePool on LibertySwap, as the later calls did. |
Limits of this report
- It covers the six addresses in section 02 on PulseChain mainnet only. Other chains need their own report.
- Source and bytecode status come from Sourcify. Transactions and events come from the PulseChain explorer API, up to 5 October 2026, 22:39 UTC. Later activity is not covered.
- No contract state was read directly from a node. The current owner, the deployer link, pool history sizes and treasury settings are inferred from events, not read from storage.
- Dollar values of the core stakes use DEX prices of each pair token read from DexScreener on 5 October 2026. They are approximate and move with the market. Pool 5's pair token has thin liquidity, so its figure is the least reliable.
- 11 of the 119 event records came through the reader with damaged data and were only partly decoded. None of the checks in section 06 relies on them.
- The files compiled only into Zxo were matched line by line, not by hash (section 03).
- The LibertySwap pool and position manager contracts themselves were not audited. Their type was inferred from the verified factory interface.
- No fuzzing, static analysis or fork testing was run by this review. This AI-assisted report does not replace an independent human audit.
Verify it yourself
Source and bytecode
- Open each address in section 02 on Sourcify and check that it shows Exact Match.
- Download
metadata.jsonfor Zxo and compare thekeccak256ofcontracts/Zxo.solandcontracts/libraries/ZxoLib.solwith 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
PoolStartedevent 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.