Skip to content

Contracts & security ​

Everything Qian does on-chain is open source, verified, and immutable. Source code, one repo per chain: robinhood-contracts · base-contracts · ethereum-contracts · arc-contracts.

Deployed contracts ​

The same stack runs on every chain, at the same addresses on every chain. All contracts are verified on their explorers.

ContractAddress (Robinhood · Base · Ethereum · BSC)
QianLocker0x73Da198D58fFD43B5754a2d72D989cab1c9aF0ce
QianFactoryV30xaC83b491b76Dd686db516c0fE9152320c83618a7
QianFactoryV40x750d0bc66baa12CF1710a8ba939B97DB4aD005c3
QianFeeRouter0xDe598E5F0b428B38EFaA6e887458FEF70bFA9436
QianSwapRouter0xEE540d2496cfFDf17E29a04bcd7b6dc795C61d66
Create2Factory0x175ae2c5EC7edaD3eE88e892C677bBDE815A2803
GuardHook0xa27D4eef437Ab754074c8C9E6bCbC55184dE2000 (BSC: 0x0090F05C65865049871E66EC1e213A72A6Eda000)

Open any of them on the explorer for your chain: Blockscout (Robinhood, 4663) · Basescan (8453) · Etherscan (1) · BscScan (56). The same address on every chain, with one exception: GuardHook is placed by CREATE2 from code that embeds the chain's Uniswap PoolManager address, so it lands at its own address on BSC.

Why the addresses match

A contract's address comes from its deployer and that deployer's transaction count, nothing else. The whole stack was deployed from one fresh key at nonce 0 on each chain, in the same order, so every address came out the same everywhere. You can check it: the addresses are a fact about the deploy, not a claim you have to trust.

The WETH address and Uniswap periphery still differ per chain, because those are Uniswap's contracts, not ours. Machine-readable, with the full periphery: chains/ in the contracts repo.

Tokens launched before 16 July 2026

Older tokens run on the previous contract set and keep that behaviour forever. Contracts are immutable, so nothing about them changed. They still display on Qian and their creators still collect fees, through the contracts they launched against. They are not tradable through the current router.

QianPay ​

QianPay settles payment links and invoices: a fixed USDC amount, paid straight to the recipient's wallet in USDC or anything a Uniswap V3 path can turn into USDC. Stateless, no admin functions. Create a link at pay.qian.ag.

ChainAddress
Base0xa3faE6c7e97506145c29f2E7a887b345f49Cf36B
Arc testnet0x73Da198D58fFD43B5754a2d72D989cab1c9aF0ce

QianPay deploys after the core stack, so its address is per-chain rather than part of the matched set above.

QianSubscriptions handles recurring pulls for subscription offers: permissionless charge, cancel by either side, no owner, no held balances.

ChainAddress
Base0xc3a89be96b8BDb1123d2Fa40f18000e3FB1A7aAf
Arc testnet0x79a7f337F1AFBecc32f862384F96128836daad2d

Arc testnet ​

Qian runs on Arc, Circle's stablecoin-native L1, since its public testnet. Gas on Arc is USDC, so payments there settle without the payer ever holding a gas token. QianPay is live and verified on arcscan; source lives in arc-contracts. The rest of the stack follows when Arc reaches mainnet.

The security model ​

No proxies. Nothing upgradeable. The locker's immutability is the product; if it could be upgraded, "locked forever" would mean nothing. The platform can change pointers only: the treasury address, and which hooks new launches may use. It cannot touch any existing token or pool.

QianLocker has no withdrawal code. No code path exists, admin-gated or otherwise. The only external effect it permits is fee collection through the fee router, which pays creator fees. You can check this by reading about one screen of Solidity.

Tokens have no owner and no extra functions. owner() returns the zero address, hardcoded. Beyond a standard ERC20 with burn, a Qian token has exactly four things: the factory that made it, a record of who launched it, the fixed supply, and its metadata link, all immutable, none of them a lever. No mint, no pause, no blacklist, no transfer hooks, no max-tx games, not even an owner-only setter to remove. There is nothing to renounce because there was never anything to hold.

One hook, and it can't touch your trades. V4 pools use the GuardHook, whose only job is to stop someone front-running a launch by initializing the pool first. Every swap-time permission on it is off, so Uniswap never calls it when you trade, so it cannot take a fee, block a sale, or see your swap. A pool's hook is fixed at launch, forever.

The swap router is stateless. It holds no funds between transactions and has no privileged control over any pool. Worst case, you can ignore it and trade the pools on Uniswap.

The deploy fee can't be raised on you. A launch names the maximum fee it will pay; if the platform's fee is higher, the transaction reverts instead of charging more.

Verify it yourself ​

Every claim on this page is checkable: open any contract above on its explorer, read the verified source, and look for what isn't there. No onlyOwner mint, no withdraw, no upgradeTo. The repository includes fork-test suites you can run against the live chains.

Contracts are MIT-licensed and verified on-chain.