The smart contracts behind Ivy, an onchain social network on Kaia. Identity, usernames, likes, tips, transfers and revenue distribution all live here.
This repository exists so that nothing on Ivy has to be taken on trust. Every claim we make in public is a function call away from being checked.
The contracts that collect and distribute money have no owner. Not a renounced
owner, not a timelocked owner: no owner() function at all, so the call reverts.
cast call 0x6B6c81010C124B3aA8F5342D1ed49883EBE04cde "owner()" \
--rpc-url https://public-en.node.kaia.io
# execution revertedThe fees are compiled as constants, which means they cannot be changed later because no function exists that would change them.
cast call 0x6B6c81010C124B3aA8F5342D1ed49883EBE04cde "TO_CREATOR()(uint256)" \
--rpc-url https://public-en.node.kaia.io
# 4000000000000000 (0.004 KAIA, the creator's share of a like)Every address below was checked against Kaia mainnet before publishing.
Kaia Mainnet, chainId 8217. Verified sources on KaiaScan.
owner() reverts on all of these. There is no admin function, no upgrade path
and no way for anyone to redirect the funds they handle.
| Contract | Address |
|---|---|
| IvyToken | 0xfb3b9601b6aE17A0Aa6765e74b56ED56AA58E724 |
| IvySharePool | 0x160E9Ff3484802b766f45FE3dCC3a717138E555C |
| IvyStakingPool | 0x0c94FEabFE409895472d6e475d0DE7Cc88F3cEe1 |
| LikeEngine | 0x6B6c81010C124B3aA8F5342D1ed49883EBE04cde |
| TipEngine | 0x098366647c8e5C07242f8787Aa4E75579D5C7551 |
| PostFeeEngine | 0xa5055Fd20474f1Ac49C9f5273b663088302f083b |
| TransferEngine | 0x8f9940f951C5594Ec3a7c912DF116970707FdD3F |
| PromptMarktEngine | 0xeB3B2A0644A450954e9E0fCD3a6eDF7ff4e9a001 |
| IvyNFT | 0xA5C8bB70b8ad5153a8cf7Aba1Cd0017fcA6b6ccf |
| IvyNFTMarketplace | 0xC45f7f28F950696E6C24C4eF70dd97528556791E |
| IvyCuration | 0xFD7F5470F27e2B325B877681952D3dd8a109B206 |
| IvyChannelRegistry | 0xCAc1D3529D09b500D04774e61Ee4a5a60d5a8FD2 |
| IvyVideoRegistry | 0xa0C690f4C57eC1aA11a50b1520d1226A79f4955f |
| IvyUsernameMarket | 0x8AEd1765D9cB46019fFEe9fCF288f20C8d70c8C1 |
| IvyConverter | 0xc11C1D6925FddDB212cF021f06bD1d7A1414F2d2 |
Four contracts do have an owner, and we would rather say so here than have you discover it. Identity carries human processes such as account recovery, so it was deliberately left flexible while the system settles.
| Contract | Address | What the owner can do |
|---|---|---|
| IvyRegistry | 0x43522E0aB410246C014359B7F5c55F7a196dddFc |
Set the verifier, backend signer and username contract. Upgrade the implementation (UUPS). |
| IvyVerifier | 0x4aF29818700638e0F5f3d9545801e85F77aB64FF |
Revoke a verification, change the verification fee, change where that fee goes, set the backend signer. Upgrade the implementation (UUPS). |
| IvyUsername | 0x3a5a665B9D1de5Bf87FC53Ff4Cd712754EEa474a |
Reserve or unreserve a username. Nothing else: priceOf is pure, the SharePool and registry addresses are immutable, and the contract is not upgradeable. |
| IvyGameRegistry | 0xaE2B3cF0222C7ae8E507c78f472AE0AdA54ED630 |
Add games to the store ledger, upgrade the implementation. Holds no funds. |
The first three are currently owned by 0x9F4F469B970268e5933B9df63D5Ed8719E590381,
which is an externally owned account rather than a multisig. They will be handed
to a Safe requiring 2 of 3 signatures once the system has settled, and we will
say so publicly when that happens. Until then, this is the honest state.
All values below are constant in the bytecode. Read them from the contracts if
you would rather not take the table's word for it.
| Action | Fee | Creator | Referrer | SharePool |
|---|---|---|---|---|
| Like | 0.005 KAIA | 80% | 5% | 15% |
| Tip | 0.1 KAIA minimum | 80% | 5% | 15% |
| Post | 0.005 KAIA | 0% | 5% | 95% |
| KAIA transfer | 0.01 KAIA | 0% | 0% | 100% |
| Prompt sale | up to 100 KAIA | 80% | 0% | 20% |
Where there is no referrer, the referrer's share goes to the SharePool. It never stays with us: there is no treasury contract in the current deployment.
Username minting is priced by length, and the whole fee goes to the SharePool: 100,000 KAIA for one character, then 10,000, 1,000, 100, 10, and 1 KAIA for six characters or more.
A share of the SharePool is acquired by burning 1,000,000 IVY. Distribution runs at least every 30 days and anyone can trigger it.
src/ contracts
script/ Foundry deployment scripts
test/ Foundry tests
deployments/ live addresses per chain id, with what owner() returns
Several contracts exist in two versions. The V2 files are what is deployed
today; the originals are kept because they were once live and their transactions
are still on chain. IvyVideoRegistry.sol and Treasury.sol in particular
belong to the abandoned 2026-05 deployment, which had a platform fee share and an
upgradeable owner. They are not deployed. deployments/8217.json lists those old
addresses under abandoned so that an address found in an old transaction can be
identified rather than mistaken for a live one.
Requires Foundry.
forge build
forge testFound something? Write to info@ivy.live. Please do not open a public issue for a vulnerability that is still exploitable.
See SECURITY.md.
MIT. See LICENSE.