5.2.9 • Published 9 months ago

@kamino-finance/klend-sdk v5.2.9

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

Installation

# npm
npm install @kamino-finance/klend-sdk

# yarn
yarn add @kamino-finance/klend-sdk

Kamino Lending Typescript SDK

This is the Kamino Lending Typescript SDK to interact with the Kamino Lend smart contract

Basic usage

Reading data

// There are three levels of data you can request (and cache) about the lending market.
// 1. Initalize market with parameters and metadata
const market = await KaminoMarket.load(
  connection,
  new PublicKey("7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF") // main market address. Defaults to 'Main' market
);
console.log(market.reserves.map((reserve) => reserve.config.loanToValueRatio));

// 2. Refresh reserves
await market.loadReserves();

const usdcReserve = market.getReserve("USDC");
console.log(usdcReserve?.stats.totalDepositsWads.toString());


// Refresh all cached data
market.refreshAll();

const obligation = market.getObligationByWallet("WALLET_PK");
console.log(obligation.stats.borrowLimit);

Perform lending action

const kaminoAction = await KaminoAction.buildDepositTxns(
  kaminoMarket,
  amountBase,
  symbol,
  new VanillaObligation(PROGRAM_ID),
);

const env = await initEnv('mainnet-beta');
await sendTransactionFromAction(env, sendTransaction); // sendTransaction from wallet adapter or custom

FAQ

Client

  • npx tsx src/client.ts deposit --url --owner ./keypair.json --token USDH --amount 10
  • npx tsx src/client.ts deposit --url --owner ./keypair.json --token SOL --amount 10

Codegen

  • Copy the new idl from the kamino-lending program to src/idl.json
  • yarn codegen

Setup localnet

  • Ensure deps contains the correct .so you want to test against. Either build it from the main repo or dump it from mainnet
  • yarn start-validator

Run tests

  • yarn start-validator-and-test
  • Or, if the local validator is already running, yarn test

TODO:

Better sdk documentation

Sync with smart contracts

  • Copy the program .so, idl and codegen
$ yarn
$ cp ../kamino-lending/target/deploy/kamino_lending.so deps/programs/kamino_lending.so
$ cp ../kamino-lending/target/idl/kamino_lending.json src/idl.json
$ yarn codegen

Getting a vanilla obligation for a user

  const kaminoMarket = await KaminoMarket.load(env.provider.connection, marketAddress, DEFAULT_RECENT_SLOT_DURATION_MS, programId);

  const obligation = await kaminoMarket!.getUserVanillaObligation(user);

  // to check the reserve is used in the obligation
  const isReservePartOfObligation = kaminoMarket!.isReserveInObligation(obligation, reserve);

Getting a list of user obligations for a specific reserve

  const kaminoMarket = await KaminoMarket.load(env.provider.connection, marketAddress, DEFAULT_RECENT_SLOT_DURATION_MS, programId);

  const obligations = await kaminoMarket!.getAllUserObligationsForReserve(user, reserve);

Getting a list of user obligations for a specific reserve with caching

  1. Fetch all user obligations, this should be cached as it takes longer to fetch
  const kaminoMarket = await KaminoMarket.load(env.provider.connection, marketAddress, DEFAULT_RECENT_SLOT_DURATION_MS, programId); 

  const allUserObligations = await kaminoMarket!.getAllUserObligations(user);
  allUserObligations.forEach(obligation  => {
    if (obligation !== null) {
      for (const deposits of obligation.deposits.keys()) {
        if (deposits.equals(reserve)) {
          finalObligations.push(obligation);
        }
      }
      for (const borrows of obligation.borrows.keys()) {
        if (borrows.equals(reserve)) {
          finalObligations.push(obligation);
        }
      }
    }
  });
5.2.9

9 months ago

5.2.8

9 months ago

5.2.7

9 months ago

5.2.6

9 months ago

5.2.5

9 months ago

5.2.4

9 months ago

5.2.3

9 months ago

5.2.2

9 months ago

5.2.1

9 months ago

5.2.0

9 months ago

5.1.11

9 months ago

5.1.10

9 months ago

5.1.5

9 months ago

5.1.9

9 months ago

5.1.8

9 months ago

5.1.7

9 months ago

5.1.6

9 months ago

5.1.4

9 months ago

5.1.3

9 months ago

5.1.2

9 months ago

5.1.1

9 months ago

5.1.0

9 months ago

5.0.7

9 months ago

5.0.6

9 months ago

5.0.5

9 months ago

5.0.4

9 months ago

5.0.3

9 months ago

5.0.2

10 months ago

5.0.1

10 months ago

5.0.0

10 months ago

5.0.2-fix

9 months ago

4.1.0

10 months ago

3.2.24

10 months ago

3.2.23

10 months ago

3.2.26

10 months ago

3.2.25

10 months ago

3.2.20

11 months ago

3.2.22

10 months ago

3.2.21

11 months ago

4.0.1

10 months ago

4.0.0

10 months ago

4.0.2

10 months ago

3.2.17

11 months ago

3.2.16

11 months ago

3.2.19

11 months ago

3.2.18

11 months ago

2.12.0-SNAPSHOT

1 year ago

2.13.10

12 months ago

2.11.0

1 year ago

3.2.2

12 months ago

3.2.1

12 months ago

3.2.0

12 months ago

3.0.1

12 months ago

3.2.6

12 months ago

3.2.5

12 months ago

3.2.4

12 months ago

2.13.8

12 months ago

3.2.3

12 months ago

2.13.9

12 months ago

2.13.6

1 year ago

2.13.7

12 months ago

2.13.4

1 year ago

2.13.5

1 year ago

3.0.0

12 months ago

2.13.2

1 year ago

2.13.3

1 year ago

2.13.0

1 year ago

2.13.1

1 year ago

2.12.2-kv-beta

1 year ago

2.12.0

1 year ago

2.10.14

1 year ago

2.10.15

1 year ago

2.10.16

1 year ago

3.2.9

11 months ago

2.10.17

1 year ago

3.2.8

12 months ago

2.10.18

1 year ago

3.2.7

12 months ago

2.10.19

1 year ago

3.2.13

11 months ago

3.2.12

11 months ago

3.2.15

11 months ago

3.2.14

11 months ago

3.1.0

12 months ago

3.2.11

11 months ago

2.12.1

1 year ago

3.2.10

11 months ago

2.12.2

1 year ago

2.10.20

1 year ago

2.10.21

1 year ago

2.13.6-kv-beta

12 months ago

2.10.12

1 year ago

2.10.13

1 year ago

2.10.11

1 year ago

2.10.10

1 year ago

2.10.9

1 year ago

2.10.8

1 year ago

2.10.7

1 year ago

2.10.6

1 year ago