Staking poolok (kamatot termelő token poolok)
Áttekintés
A BiatecCLAMM immár támogatja azokat a staking poolokat, ahol az A és B eszköz megegyezik. Így hozhatók létre olyan kamatozó tokenek, mint a B-ALGO, B-USDC stb., amelyek révén a likviditásszolgáltatók staking jutalmakat, tranzakciós díjakat vagy más, a poolba áramló bevételeket kaphatnak.
Használati esetek
1. Natív token staking (B-ALGO)
Hozzon létre poolt, ahol az A és B eszköz egyaránt 0 (natív token). Ez B-ALGO tokent generál, amely a stakelt ALGO-t képviseli. A poolhoz jutó bármilyen ALGO (konszenzus jutalom, governance jutalom, közvetlen befizetés) szétosztható a B-ALGO tulajdonosok között.
2. Eszköz staking (B-USDC, B-TOKEN stb.)
Állítsa az A és B eszközt azonos ASA ID-re. Így jön létre a B-{TOKEN} token, amely stakelt tokeneket reprezentál. Hasznos például:
- Hitelezési protokollokban, ahol a betétek kamatoznak
- Bevételmegosztó mechanizmusokban
- Hozam aggregációs stratégiákban
Pool jellemzők
Amikor asset A megegyezik asset B-vel:
- LP token név:
B-{AssetName}(pl. "B-ALGO", "B-USDC") - LP token szimbólum: Az eszköz unit neve (pl. "ALGO", "USDC")
- Ársáv: Rögzített 1:1 arány (priceMin = priceMax = currentPrice = SCALE). A szerződés bootstrap során ezt érvényesíti (
E_STAKING_PRICEhibakód). - Swappok: Nem értelmezhetők, mivel a két eszköz azonos
- Fő műveletek: Likviditás hozzáadása (stake), likviditás kivonása (unstake), jutalmak szétosztása
Működés
1. Pool létrehozása
const { clientBiatecClammPoolProvider } = await setupPool({
algod,
assetA: 0n, // 0 az ALGO-hoz, vagy bármely ASA ID
assetB: 0n, // Megyezik az assetA-val
biatecFee: 0n, // Nincs Biatec díj
lpFee: BigInt(SCALE / 100), // 1% díj (opcionális)
p: BigInt(1 * SCALE), // Ár = 1:1
p1: BigInt(1 * SCALE), // Minimum ár = 1
p2: BigInt(1 * SCALE), // Maximum ár = 1
nativeTokenName: 'Algo', // Opcionális, a provider globális állapotához igazít
});
// Kézi tranzakció építésnél egyszer konfigurálja a providert:
// await poolProviderClient.send.setNativeTokenName({
// args: { appBiatecConfigProvider: configAppId, nativeTokenName: 'Algo' },
// appReferences: [configAppId],
// });
2. Likviditás hozzáadása (staking)
A felhasználók likviditást adnak a token stake-eléséhez:
const txId = await clammAddLiquiditySender({
algod,
account: userSigner,
amountA: stakeAmount, // Stakelni kívánt mennyiség
amountB: stakeAmount, // Azonos amountA-val
assetA: 0n, // 0 az ALGO-hoz
assetB: 0n, // Megegyezik assetA-val
assetLP: lpTokenId,
clientBiatecClammPool,
appBiatecConfigProvider,
appBiatecIdentityProvider,
appBiatecPoolProvider,
});
A felhasználók B-{TOKEN} LP tokeneket kapnak, amelyek a stakelt pozíciót jelölik.
3. Jutalmak szétosztása
Amikor a pool jutalmakat kap (staking jutalom, díjak, közvetlen befizetés), az executive fee cím osztja szét őket:
// 1. A jutalmakat a pool címére utalják
// (Ez megtörténhet automatikusan vagy manuálisan)
// 2. Az executive fee cím szétosztja a többlet eszközöket
const txId = await clammDistributeExcessAssetsSender({
algod,
account: executiveSigner,
amountA: rewardsAmount * (SCALE / assetDecimals), // Alapléptékben (9 tizedes)
amountB: 0n, // Asset B-re nincs jutalom
assetA: 0n, // 0 az ALGO-hoz
assetB: 0n, // Megegyezik assetA-val
clientBiatecClammPool,
appBiatecConfigProvider,
});
Ez arányosan növeli a pool likviditását, így a kivonáskor a felhasználók több tokent kapnak vissza, mint amennyit befizettek.
4. Likviditás kivonása (unstaking)
A felhasználók a tőkéjüket és a díjakkal növelt jutalmakat veszik fel:
const txId = await clammRemoveLiquiditySender({
algod,
account: userSigner,
assetA: 0n,
assetB: 0n,
assetLP: lpTokenId,
lpTokensToSend: lpBalance, // Teljes vagy részleges LP token
clientBiatecClammPool,
appBiatecConfigProvider,
appBiatecIdentityProvider,
appBiatecPoolProvider,
});
A felhasználók visszakapják betétjüket plusz az arányos jutalmat.