UNPKG

@indigo-labs/indigo-sdk

Version:

Indigo SDK for interacting with Indigo endpoints via lucid-evolution

303 lines (285 loc) 11.8 kB
import { describe, expect, it } from 'vitest'; import { Data, fromHex } from '@lucid-evolution/lucid'; import { parseStakingManagerDatum, parseStakingPositionOrThrow, serialiseStakingDatum, StakingManager, StakingPosition, } from '../src/contracts/staking/types-new'; import { parsePriceOracleDatum, serialisePriceOracleDatum, } from '../src/contracts/price-oracle/types-new'; import { parseInterestOracleDatum, serialiseFeedInterestOracleRedeemer, serialiseInterestOracleDatum, } from '../src/contracts/interest-oracle/types-new'; import * as Core from '@evolution-sdk/evolution'; describe('Datum checks', () => { it('Price Oracle', () => { expect( serialisePriceOracleDatum({ price: { numerator: 1_295_175n, denominator: 1_000_000n }, expirationTime: 1738766423000n, auxiliaryData: Core.Data.fromCBORHex(Data.void()), }), ).toEqual('d8799fd8799f1a0013c3471a000f4240ff1b00000194d68e13d8d87980ff'); expect( parsePriceOracleDatum( 'd8799fd8799f1a0013c3471a000f4240ff1b00000194d68e13d8d87980ff', ), ).toEqual({ price: { numerator: 1295175n, denominator: 1000000n }, expirationTime: 1738766423000n, auxiliaryData: Core.Data.fromCBORHex(Data.void()), }); }); it('Interest Oracle', () => { expect( parseInterestOracleDatum( 'd8799f1b0180e51d1ae19514d8799f1a00030d40ff1b00000194ce33c598ff', ), ).toEqual({ unitaryInterest: 108338304224695572n, interestRate: { getOnChainInt: 200000n }, lastUpdated: 1738626287000n, }); expect( serialiseInterestOracleDatum({ unitaryInterest: 108338304224695572n, interestRate: { getOnChainInt: 200000n }, lastUpdated: 1738626287000n, }), ).toEqual('d8799f1b0180e51d1ae19514d8799f1a00030d40ff1b00000194ce33c598ff'); }); it('Interest Oracle Redeemer', () => { expect( serialiseFeedInterestOracleRedeemer({ newInterestRate: { getOnChainInt: 1_000_000n }, currentTime: 1724851200n, }), ).toEqual('d8799fd8799f1a000f4240ff1a66cf2400ff'); }); // eslint-disable-next-line vitest/no-commented-out-tests // it.todo('CDP', () => { // // Active CDP // const activeCDPDatum = // 'd8799fd8799fd8799f581c98e30e1c6dbb727dc98bdcb48b99b313c97fabfb537ff4b29a94ed1cff44695553441b00000004d9b0a47ed8799f1b00000194d5ebec201b03022de04fddf5f9ffffff'; // const activeCDPObject: CDPContent = { // cdpOwner: fromHex( // '98e30e1c6dbb727dc98bdcb48b99b313c97fabfb537ff4b29a94ed1c', // ), // iasset: fromHex(fromText('iUSD')), // mintedAmt: 20832101502n, // cdpFees: { // ActiveCDPInterestTracking: { // lastSettled: 1738755796000n, // unitaryInterestSnapshot: 216786173503075833n, // }, // }, // }; // expect(serialiseCdpDatum(activeCDPObject)).toEqual(activeCDPDatum); // expect(parseCdpDatum(activeCDPDatum)).toEqual(O.some(activeCDPObject)); // // Frozen CDP // const frozenCDPDatum = // 'd8799fd8799fd87a8044695553441a0050924ed87a9f1a0002765a1a0003ca56ffffff'; // const frozenCDPObject: CDPContent = { // cdpOwner: null, // iasset: fromHex(fromText('iUSD')), // mintedAmt: 5280334n, // cdpFees: { // FrozenCDPAccumulatedFees: { // iassetInterest: 161370n, // lovelacesIndyStakers: 248406n, // }, // }, // }; // expect(parseCdpDatum(frozenCDPDatum)).toEqual(O.some(frozenCDPObject)); // expect(serialiseCdpDatum(frozenCDPObject)).toEqual(frozenCDPDatum); // }); // eslint-disable-next-line vitest/no-commented-out-tests // it.todo('iAsset', () => { // const assetDatum = // 'd87a9fd8799f4469455448d87a9fd8799fd8799f581c6c9497ffd7e8baf86c3c0d6fcd43c524daa49ad5fceba26d715468e952694554483230323231323139313931333032ffffffd8799f581c7b75e317505dddce858ae7bf200656a967c7544e55efa5d18ef302494d694554485f494e544552455354ffd8799f1a08f0d180ffd8799f1a06dac2c0ffd8799f1a068e7780ffd8799f1a000186a0ffd8799f1a001e8480ffd8799f19c350ffd8799f1a000f4240ffd8799f1a000f4240ffd8799f1a01c9c380ffd87980d8799f4469534f4cffffff'; // const assetObject: IAssetDatum = { // assetName: fromHex(fromText('iETH')), // price: { // Oracle: { // oracleNft: { // currencySymbol: fromHex( // '6c9497ffd7e8baf86c3c0d6fcd43c524daa49ad5fceba26d715468e9', // ), // tokenName: fromHex(fromText('iETH20221219191302')), // }, // }, // }, // interestOracleNft: { // currencySymbol: fromHex( // '7b75e317505dddce858ae7bf200656a967c7544e55efa5d18ef30249', // ), // tokenName: fromHex(fromText('iETH_INTEREST')), // }, // redemptionRatio: { getOnChainInt: 150000000n }, // maintenanceRatio: { getOnChainInt: 115000000n }, // liquidationRatio: { getOnChainInt: 110000000n }, // debtMintingFeePercentage: { getOnChainInt: 100000n }, // liquidationProcessingFeePercentage: { getOnChainInt: 2000000n }, // stabilityPoolWithdrawalFeePercentage: { getOnChainInt: 50000n }, // redemptionReimbursementPercentage: { getOnChainInt: 1000000n }, // redemptionProcessingFeePercentage: { getOnChainInt: 1000000n }, // interestCollectorPortionPercentage: { getOnChainInt: 30000000n }, // firstIAsset: false, // nextIAsset: fromHex(fromText('iSOL')), // }; // expect(serialiseIAssetDatum(assetObject)).toEqual(assetDatum); // expect(parseIAssetDatumOrThrow(assetDatum)).toEqual(assetObject); // }); it('Staking Manager', () => { const stakingManagerDatum = 'd8799fd8799f1b000009c04704429ed8799f1b000001402802fec1ffffff'; const stakingManagerObject: StakingManager = { totalStake: 10721429832350n, managerSnapshot: { snapshotAda: 1375060819649n, }, }; expect(parseStakingManagerDatum(stakingManagerDatum)).toEqual( stakingManagerObject, ); expect(serialiseStakingDatum(stakingManagerObject)).toEqual( stakingManagerDatum, ); }); it('Staking Position', () => { const stakingPositionDatum = 'd87a9fd8799f581cd45527a088a92fd31f42b5777fe39c40f810e0f79d13c6d77eeb7f439f9f1853d8799f1a5c8c1cfb1b0000019616971410ffffffd8799f1b0000013a7ed5b0fdffffff'; const stakingPositionObject: StakingPosition = { owner: fromHex( 'd45527a088a92fd31f42b5777fe39c40f810e0f79d13c6d77eeb7f43', ), lockedAmount: [ [83n, { voteAmt: 1552686331n, votingEnd: 1744135722000n }], ], positionSnapshot: { snapshotAda: 1350747664637n, }, }; expect(parseStakingPositionOrThrow(stakingPositionDatum)).toEqual( stakingPositionObject, ); expect(serialiseStakingDatum(stakingPositionObject)).toEqual( stakingPositionDatum, ); }); // eslint-disable-next-line vitest/no-commented-out-tests // it('Stability Pool', () => { // const stabilityPoolDatum = // 'd8799fd8799f4469555344d8799fd8799f1b0a37ad5c452ffb2affd8799fc24d1f94ac680ce6b48ea21bb122baffd8799f1b0fde3bba456cd5deff0100ff9f9fd8799f0000ffd8799f1b084494e2d23b2b7effff9fd8799f0100ffd8799f1b0fde3bba456cd5deffffffffff'; // const stabilityPoolObject: StabilityPoolContent = { // asset: fromHex(fromText('iUSD')), // poolSnapshot: { // productVal: { value: 736247675907734314n }, // depositVal: { value: 2502085246000826468068228145850n }, // sumVal: { value: 1143417026613401054n }, // epoch: 1n, // scale: 0n, // }, // epochToScaleToSum: [ // [{ epoch: 0n, scale: 0n }, { value: 595764752630360958n }], // [{ epoch: 1n, scale: 0n }, { value: 1143417026613401054n }], // ], // }; // expect(parseStabilityPoolDatum(stabilityPoolDatum)).toEqual( // stabilityPoolObject, // ); // expect( // serialiseStabilityPoolDatum({ StabilityPool: stabilityPoolObject }), // ).toEqual(stabilityPoolDatum); // }); // eslint-disable-next-line vitest/no-commented-out-tests // it('Stability Pool Account', () => { // const stabilityPoolDatum = // 'd87a9fd8799f581c12c646d4c6d7a35c14788d15f0f6142f6148975d8932592fbd625f674469555344d8799fd8799f1b0a37ad5c452ffb2affd8799fc24c39fa2838b1f7dd38267f0a6dffd8799f1b0fde3b75c28ab489ff0100ffd87a80ffff'; // const stabilityPoolObject: AccountContent = { // owner: fromHex( // '12c646d4c6d7a35c14788d15f0f6142f6148975d8932592fbd625f67', // ), // asset: fromHex(fromText('iUSD')), // accountSnapshot: { // productVal: { value: 736247675907734314n }, // depositVal: { value: 17943066955221270821727046253n }, // sumVal: { value: 1143416732359767177n }, // epoch: 1n, // scale: 0n, // }, // request: null, // }; // expect(parseAccountDatum(stabilityPoolDatum)).toEqual(stabilityPoolObject); // expect( // serialiseStabilityPoolDatum({ Account: stabilityPoolObject }), // ).toEqual(stabilityPoolDatum); // }); // eslint-disable-next-line vitest/no-commented-out-tests // it('Stability Pool Account w/ Adjust Request', () => { // const stabilityPoolDatum = // 'd87a9fd8799f581c90e40129516ee738fa6aa9183cf57b45c46946496e1590d34ca1b15c4469555344d8799fd8799f1b0a374472be304a62ffd8799fc24b01aef07f96e5ce00f80000ffd8799f1b0f88aa07a1048079ff0100ffd8799fd87a9f3a0007c359d8799fd8799f581c90e40129516ee738fa6aa9183cf57b45c46946496e1590d34ca1b15cffd8799fd8799fd8799f581c75a4f9204b9308a92a09b0e22b94125e56f24b73bb85e2795f176c6affffffffffffffff'; // const stabilityPoolObject: AccountContent = { // owner: fromHex( // '90e40129516ee738fa6aa9183cf57b45c46946496e1590d34ca1b15c', // ), // asset: fromHex(fromText('iUSD')), // accountSnapshot: { // productVal: { value: 736132323706161762n }, // depositVal: { value: 2035054000000000000000000n }, // sumVal: { value: 1119331457144488057n }, // epoch: 1n, // scale: 0n, // }, // request: { // Adjust: { // amount: -508762n, // outputAddress: { // paymentCredential: { // PublicKeyCredential: fromHex( // '90e40129516ee738fa6aa9183cf57b45c46946496e1590d34ca1b15c', // ), // }, // stakeCredential: { // Inline: { // PublicKeyCredential: fromHex( // '75a4f9204b9308a92a09b0e22b94125e56f24b73bb85e2795f176c6a', // ), // }, // }, // }, // }, // }, // }; // expect(parseAccountDatum(stabilityPoolDatum)).toEqual(stabilityPoolObject); // expect( // serialiseStabilityPoolDatum({ Account: stabilityPoolObject }), // ).toEqual(stabilityPoolDatum); // }); // eslint-disable-next-line vitest/no-commented-out-tests // it('Stability Pool SnapshotEpochToScaleToSum', () => { // const stabilityPoolDatum = // 'd87b9fd8799f9f9fd8799f0000ffd8799f1b084494e2d23b2b7effff9fd8799f0100ffd8799f1b0fde3bba456cd5deffffff4469555344ffff'; // const stabilityPoolObject: SnapshotEpochToScaleToSumContent = { // asset: fromHex(fromText('iUSD')), // snapshot: [ // [{ epoch: 0n, scale: 0n }, { value: 595764752630360958n }], // [{ epoch: 1n, scale: 0n }, { value: 1143417026613401054n }], // ], // }; // expect(parseSnapshotEpochToScaleToSumDatum(stabilityPoolDatum)).toEqual( // stabilityPoolObject, // ); // expect( // serialiseStabilityPoolDatum({ // SnapshotEpochToScaleToSum: stabilityPoolObject, // }), // ).toEqual(stabilityPoolDatum); // }); });