Kona Points β PEARL: Integration Guide
For smart contracts, vaults, bots, and AI agents on Abstract Chain
Contract Address Registry
Core System
KonaPointsFarm
0x89e9d9b7D87591875359247f7d8eb786e7ea6910
PearlMinter
0x92C18C91Ad1356DDEA429Bf5C49949489Cea4608
PointsSpenderProxy
0x7de407C3a07Da1CC405e024374186f9249d76B00
Tokens
KONA
0x92aba186c85b5aFEB3a2CEdC8772Ae8638F1B565
18
PEARL
0x792CF0A64a46DbB48CA414DFf20DcD341812579e
18
WETH
0x3439153EB7AF838Ad19d56E1571FBD09333C2809
18
USDC
0x84A71ccD554Cc1b02749b35d22F684CC8ec987e1
6
USDT
0x0709F39376dEEe2A2dfC94A58EdEb2Eb9DF012bD
6
PENGU
0x9eBe3A824Ca958e4b3Da772D2065518F009CBa62
18
Kona Lend (Aave V3)
Pool Proxy
0x8f16B5713F412C5dE4951Aaf678Eb8409101f819
Pool Addresses Provider
0x7326d30aDAec89c992eBfEbA3beDB9044AC2F704
Protocol Data Provider
0xDfc422c8793864ecD12Bc59F2024614034BcB078
Aave Oracle
0xE4Cd99d4698482ff263C300fbe2fA5fE08af1622
RewardsController
0x4237d126713bf1FaBA29Ed8A55A6A0634886e223
Emission Manager
0xC8Ffda370edF4a15554A4120c95641Ddd6c084C8
Kona Lend Incentivized Assets
PENGU
0x5f8eee4e8033978e19b45399f044d05928527fbe
0xdb7c7029e541028d0dc79da4a6e744fca7d96356
USDC
0xdf480d354d2136257d3cb61bf121fde6d4fce646
0xa1cd10e2c8923e1174007073f47f8fa200163fc8
USDT
0xcb77c57249ef930d014d227a4fb64bcaaea982da
0x59cf6d4027761bd560216e08981e7746106e7c4e
WETH
0x79e8627dcb7abe2160c830795c07b78b648577b5
0xf59fadd8200993025490e746fd1e4bcf6d3dfa75
Kona Swap
Aggregator Router
0xf9D3E237427C84741394C7C2E9cd66f94EA3d4D6
Aggregator Factory
0x29372c22459a4e373851798bFd6808e71EA34A71
V2 Router
0x441E0627Db5173Da098De86b734d136b27925250
V2 Factory
0x7c2e370CA0fCb60D8202b8C5b01f758bcAD41860
β οΈ KONA Gating: Read This First
Points alone cannot be converted to PEARL. Every single PEARL mint permanently burns 1 KONA token. KONA has a hard cap of ~90,000 tokens and that number only goes down. There is no mechanism to create more KONA beyond the existing FROTH β KONA conversion (1,000 FROTH burned = 1 KONA minted), and FROTH itself is a finite, decaying supply.
This means:
A contract or agent that earns 1,000,000 points but holds zero KONA cannot mint a single PEARL.
Every PEARL mint removes 1 KONA from circulation permanently. The cost to produce PEARL rises over time β like Bitcoin mining difficulty, except it never adjusts downward.
Early integrators who acquire KONA and convert at today's prices have a structural cost advantage that compounds as supply shrinks.
If you are building a vault, bot, or agent that farms Kona Points, you need a KONA acquisition and treasury strategy. Points are the easy part. KONA is the bottleneck.
How the System Works
Two protocols feed a single points ledger:
Kona Lend β Points accrue per-second to holders of kTokens (supply) and variableDebtTokens (borrow). No staking required. Claim via RewardsController.
Kona Swap β Points accrue per-block to users who stake LP tokens in KonaPointsFarm. MasterChef-style.
Both converge into KonaPointsFarm.totalPoints[user]. Those points convert to PEARL via PearlMinter at 100 points = 1 PEARL, burning 1 KONA per transaction.
Part 1: Earning Points via Kona Lend
Depositing into Kona Lend gives you kTokens. Borrowing gives you variableDebtTokens. Both accrue points automatically via the RewardsController. You call claimAllRewardsToSelf() to harvest into KonaPointsFarm.
Current Emission Rates
kPENGU
Supply
8
variableDebtPENGU
Borrow
3
kUSDC
Supply
10
variableDebtUSDC
Borrow
4
kUSDT
Supply
10
variableDebtUSDT
Borrow
4
kWETH
Supply
8
variableDebtWETH
Borrow
3
Note: stablecoin markets (USDC, USDT) carry the highest emission rates. Builders optimizing for point velocity should factor this into allocation strategy.
These rates are configurable via the Emission Manager and will eventually be governed by vePEARL gauge voting.
Point Accrual Math
Example: 10,000 kPENGU held out of 100,000 total, emission = 8/sec:
RewardsController Functions
Reading Pending Lend Points (JS/viem)
Claim Flow (Internal)
When claimAllRewardsToSelf() is called:
Points land in the unified KonaPointsFarm ledger and are immediately available for PEARL minting.
Part 2: Earning Points via Kona Swap LP Farming
Provide liquidity on Kona Swap, receive LP tokens, then stake them in KonaPointsFarm. Points accrue per-block proportional to your staked share.
KonaPointsFarm Functions
Points Per Block Scaling
The pointsPerBlock value stored on-chain is scaled β divide by 100 to get actual points per block. Daily output depends on Abstract's variable block time:
Available Points Calculation
This balance includes points from both Kona Lend claims and Kona Swap farming. They're fungible once in the farm contract.
Enumerating Farms Programmatically
Builders can discover all active farms on-chain:
Part 3: Converting Points to PEARL
The PearlMinter is the sole contract that creates PEARL. Every mint requires sufficient points in KonaPointsFarm and KONA approved to the minter for burning.
PearlMinter Functions
Events:
Mint Execution Flow
PointsSpenderProxy Functions
Important: Third-party contracts do not need to be authorized on the PointsSpenderProxy. You call PearlMinter.mint() or PearlMinter.mintAll() directly β the PearlMinter is already authorized and handles the proxy call internally. Only the protocol team can add new authorized spenders via the proxy owner.
Batching Economics
The KONA fee is fixed per transaction regardless of mint size. Larger mints are dramatically more capital efficient:
100
1
1 KONA
$1.0000
10,000
100
1 KONA
$0.0100
100,000
1,000
1 KONA
$0.0010
1,000,000
10,000
1 KONA
$0.0001
Accumulate points and mint in bulk. There is no maximum mint size. Use mintAll() to convert your entire balance in one transaction.
Part 4: Full Mint Integration (JS/viem)
Part 5: Solidity Integration Pattern
A complete vault/agent contract covering earn, harvest, and convert:
Important Notes for Integrators
Points are non-transferable. They accrue to the address that holds kTokens or staked LP. If your vault contract holds the positions, the vault earns the points. Design your architecture accordingly.
Claim Lend points explicitly. Unlike Swap farms where points auto-update on stake/unstake, Lend points require an explicit claimAllRewardsToSelf() call. Lend rewards are returned as 18-decimal scaled values β divide by 1e18 for actual points.
Batch your mints. The fixed KONA fee per transaction means small mints are extremely capital-inefficient. Accumulate 10,000+ points before converting. Use mintAll() for maximum efficiency.
pointsPerPearl and konaFeeAmount are configurable. Read them from PearlMinter rather than hardcoding. They may change via governance.
pointsPerBlock is scaled. The raw value returned by farms() must be divided by 100 to get actual points per block.
Third-party contracts don't need proxy authorization. Call PearlMinter.mint() or mintAll() directly. The PearlMinter is already an authorized spender on the PointsSpenderProxy. You do not need to interact with the proxy yourself.
KONA is the scarce resource. Any contract can earn unlimited points. Converting them requires KONA, which is permanently deflationary. Every PEARL mint burns 1 KONA from a hard-capped supply that will never increase. Your KONA acquisition timing is the real alpha.
Last updated