Kona Points β†’ PEARL: Integration Guide

For smart contracts, vaults, bots, and AI agents on Abstract Chain

Contract Address Registry

Core System

Contract
Address

KonaPointsFarm

0x89e9d9b7D87591875359247f7d8eb786e7ea6910

PearlMinter

0x92C18C91Ad1356DDEA429Bf5C49949489Cea4608

PointsSpenderProxy

0x7de407C3a07Da1CC405e024374186f9249d76B00

Tokens

Token
Address
Decimals

KONA

0x92aba186c85b5aFEB3a2CEdC8772Ae8638F1B565

18

PEARL

0x792CF0A64a46DbB48CA414DFf20DcD341812579e

18

WETH

0x3439153EB7AF838Ad19d56E1571FBD09333C2809

18

USDC

0x84A71ccD554Cc1b02749b35d22F684CC8ec987e1

6

USDT

0x0709F39376dEEe2A2dfC94A58EdEb2Eb9DF012bD

6

PENGU

0x9eBe3A824Ca958e4b3Da772D2065518F009CBa62

18

Kona Lend (Aave V3)

Contract
Address

Pool Proxy

0x8f16B5713F412C5dE4951Aaf678Eb8409101f819

Pool Addresses Provider

0x7326d30aDAec89c992eBfEbA3beDB9044AC2F704

Protocol Data Provider

0xDfc422c8793864ecD12Bc59F2024614034BcB078

Aave Oracle

0xE4Cd99d4698482ff263C300fbe2fA5fE08af1622

RewardsController

0x4237d126713bf1FaBA29Ed8A55A6A0634886e223

Emission Manager

0xC8Ffda370edF4a15554A4120c95641Ddd6c084C8

Kona Lend Incentivized Assets

Market
kToken (Supply)
variableDebt (Borrow)

PENGU

0x5f8eee4e8033978e19b45399f044d05928527fbe

0xdb7c7029e541028d0dc79da4a6e744fca7d96356

USDC

0xdf480d354d2136257d3cb61bf121fde6d4fce646

0xa1cd10e2c8923e1174007073f47f8fa200163fc8

USDT

0xcb77c57249ef930d014d227a4fb64bcaaea982da

0x59cf6d4027761bd560216e08981e7746106e7c4e

WETH

0x79e8627dcb7abe2160c830795c07b78b648577b5

0xf59fadd8200993025490e746fd1e4bcf6d3dfa75

Kona Swap

Contract
Address

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

Asset
Type
Points/Second

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:

Points
PEARL Out
KONA Cost
Cost/PEARL (at $1 KONA)

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