> For the complete documentation index, see [llms.txt](https://docs.kpk.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kpk.io/funds/infrastructure/architecture/onchain-accounting/meta-balance-adapters/pancakeswap-v2.md).

# PancakeSwap V2

The PancakeSwap V2 adapter reports an account's V2 LP across any pair as the dilution-adjusted pro-rata share of both reserves, emitted as one Supplied leg per token.

The PancakeSwap V2 adapter reports an account's V2 LP across any pair as the dilution-adjusted pro-rata share of both reserves, emitted as one `Supplied` leg per token. PancakeSwap V2 shares the Uniswap V2 Pair/Factory ABI and pro-rata math, so this is a thin subclass of the [Uniswap V2](/funds/infrastructure/architecture/onchain-accounting/meta-balance-adapters/uniswap-v2.md) meta-adapter. It differs in two respects: the reported protocol slug, and its `_mintFee` protocol-fee fraction, which is **not** Uniswap's; it overrides the dilution coefficients accordingly. A single immutable meta-adapter serves every pair; the active pair set lives on NAVCalculator.

* **Type:** Meta-adapter
* **protocolSubId:** `keccak256("pancakeswap-v2")`
* **Instance key:** the PancakeSwap V2 pair address, widened to bytes32.
* **Source:** `PancakeSwapV2PoolsMetaBalanceAdapter.sol`

## Positions returned

Per pair instance, up to two legs:

| Leg          | PositionKind | isDebt  | Description                          |
| ------------ | ------------ | ------- | ------------------------------------ |
| token0 share | `Supplied`   | `false` | Account's pro-rata share of reserve0 |
| token1 share | `Supplied`   | `false` | Account's pro-rata share of reserve1 |

Legs with zero amount, unregistered assets, or assets excluded by `assetFilter` are dropped.

## Balance calculation

<figure><picture><source srcset="/files/vNIQPeqv1bgKAqqmWyNC" media="(prefers-color-scheme: dark)"><img src="https://1699303810-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUsQM4bzcmOPSgkWddkeN%2Fuploads%2F6ztQtFYGGoCwUi4xZg4k%2Fmeta-pancakeswap-v2.png?alt=media&amp;token=3b056147-8936-41dc-8b3c-be1bca94f7a7" alt="Flowchart of the PancakeSwap V2 balance adapter: read calls derive position legs into PositionBalance entries."></picture><figcaption><p>PancakeSwap V2 adapter: how the underlying balances reported to the NAV Calculator are derived.</p></figcaption></figure>

Delegated to `UniswapV2PairLib.pairAmounts(pair, account, ...)`, same as [Uniswap V2](/funds/infrastructure/architecture/onchain-accounting/meta-balance-adapters/uniswap-v2.md) but with PancakeSwap's own `_mintFee` coefficients. The account's LP balance is converted to underlying reserves against an effective supply that includes the protocol fee LP the pair would mint on its next mint/burn:

```
balance         = pair.balanceOf(account)
totalSupply     = pair.totalSupply()
(r0, r1)        = pair.getReserves()
effectiveSupply = totalSupply + pendingProtocolMint        // V2 _mintFee dilution

amount0 = balance × r0 / effectiveSupply
amount1 = balance × r1 / effectiveSupply
```

with PancakeSwap V2's `_mintFee` coefficients `(numFactor, rootKCoeff, rootKLastCoeff) = (8, 17, 8)`, overriding Uniswap's `(1, 5, 1)` via the `_mintFeeConstants()` hook:

```
pendingProtocolMint = totalSupply × (√k − √kLast) × 8 / (17·√k + 8·√kLast)
```

PancakeSwap's protocol-fee fraction is larger than Uniswap's; using Uniswap's `(1, 5, 1)` constants would understate the dilution LP and slightly overstate the holder's reserve share whenever PancakeSwap's `feeTo` is set.

It is 0 when `feeTo` is unset, `kLast == 0`, or `√k <= √kLast` (read defensively).

## Identity

* **positionId:** `abi.encode(address pair)`, one positionId per pair instance (same schema as Uniswap V2).
* **positionKind:** `Supplied` for both legs.

There is no `labels` field on the position. The adapter implements `positionLabels(positionId)`, which returns `["AMM Liquidity Pool", "sym0/sym1"]` from the pair's onchain token symbols; surfaced only by the verbose reads (`getAccountPositionsVerbose` / `getAccountNavVerbose`); the full breadcrumb is `[protocolName, ...labels]`.

## Constructor

```solidity
constructor(
    address navCalculator_
)
```

| Parameter        | Description                                      |
| ---------------- | ------------------------------------------------ |
| `navCalculator_` | NAVCalculator contract for asset-registry access |

No protocol addresses are pinned; every pair is self-describing.

## Registration

Register the adapter once with `addMetaBalanceAdapter`, then enable each pair with `addMetaInstances`. The instance coordinate is the PancakeSwap V2 pair address widened to bytes32. The adapter holds no instance state; it reads its active set from `NAV_CALCULATOR.getMetaInstances(address(this))`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.kpk.io/funds/infrastructure/architecture/onchain-accounting/meta-balance-adapters/pancakeswap-v2.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
