@zebec-protocol/plutus-sdk v1.0.2
Zebec Plutus Contract SDK
SDK for interacting with zebec bnb contracts
Installation
yarn add @zebec-protocol/plutus-sdk
// or
npm install @zebec-protocol/plutus-sdk
Files and Folders
Files and folders | Descriptions |
---|---|
Borrower | Contains Borrower client and definitions |
CreditDesk | Contains CreditDesk client and definitions |
PlutusConfig | Contains PlutusConfig client and definitions |
Pool | Contains Pool client and definitions |
Contracts | Contains typechain generated files and are used to create clients |
ZebecConsensus | Contains ZebecConsensus Client and definitions |
Utils | Contains utility functions for logging, approving tokens, etc |
Contansts | Contains constants such as contract address |
Development
To run the project
yarn start
To build the project
yarn build
To remove dist folder
yarn clean
To run test scripts:
yarn test:single <path to test script>
# example for windows: yarn test:single tests\pool.spec.ts
# example for linux: yarn test:single tests/pool.spec.ts
To compile generate typechain files from abis
yarn build:typechain
Usage
Create Pool Client
Pool client can be created in following way.
const lender = <signer>;
const client = new PoolClient(lender);
Deposit usdc to pool
To deposit usdc in pool, do as given below.
const depositReceipt = await client.deposit(amount);
After depositing usdc corresponding amount of PLP token is received by lender. You can see your PLP balance.
const owner = <signer>;
const plpToken = Token__factory.connect(PLP_ADDRESS, owner);
const lenderPlp = await plpToken.balanceOf(lender.address);
Withdraw USDC from pool
Withdraw USDC from pool burns the PLP tokens that the lender have.
const amount = "100";
const withdrawTxn = await client.withdraw(amount, USDC_ADDRESS);
Create CreditDesk Client
const signer = <signer>;
const creditDeskClient = new CreditDeskClient(signer);
Create zebec consensus client
const admin = <signer>;
const zebecConsensusClient = new ZebecConsesusClient(admin, ZEBEC_CONSENSUS_ADDRESS)
Tokenize assets
After tokenization, certain amount of asset token is minted to borrower as specified in loan limit.
const name = "Test Token";
const symbol = "TKN";
const borrower = "<address>";
const loanLimit = BigInt("10000");
const interestApr = 15; // percent
const paymentPeriodInDays = "30";
const termInDays = "90";
const lateFeeApr = "10"; // percent
const receipt = zebecConsensusClient.tokenization(
name,
symbol,
borrower,
loanLimit,
interestApr,
paymentPeriodInDays,
termInDays,
lateFeeApr,
);
Detokenize assets
const assetTokenAddress = "<address>";
const creditLineAddress = "<address>";
const receipt = zebecConsensusClient.deTokenization(assetTokenAddress, creditLineAddress);
Get creditline of underwriter
Here the underwriter is ZebecConsensus Contract.
const creditLines = creditDeskClient.getUnderwriterCreditLines(ZEBEC_CONSENSUS_ADDRESS);
Get creditline of borrower
const borrowerAddress = "<address>";
const creditline = creditDeskClient.getBorrowerCreditLines(borrowerAddress);
Get overall APR
const apr = creditDeskClient.getOverallApr(ZEBEC_CONSENSUS_ADDRESS);
Get supply balance and interest
const lenderAddress = "<address>";
const { supplyAmountLended, claimableInterest } =
creditDeskClient.getSupplyBalanceAndInterest(lenderAddress);
Get pool usage
const usage = creditDeskClient.getPoolUsage(ZEBEC_CONSENSUS_ADDRESS);
Create Borrower Client
const owner = <signer>;
const borrowerClient = new BorrowerClient(owner, BORROWER_ADDRESS, CREDIT_DESK_ADDRESS);
Get loan
For getting loan, creditline must be approved and created by admin.
const creditLineAddress = "<address>";
const assetTokenAddress = "<address>";
const amount = "10000";
const receipt = borrowerClient.getLoan(creditLineAddress, amount, assetTokenAddress);
Get next payment amount
const creditLineAddress = "<address>";
const paymentAmount = borrowerClient.getNextPaymentAmount(creditLineAddress);
Repay loan
const amount = "100";
const creditLineAddress = "<address>";
const receipt = borrowerClient.repayLoan(creditLineAddress, amount);
Repay loan in full
const creditLineAddress = "<address>";
const receipt = borrowerClient.repayLoanInFull(creditLineAddress);
9 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
9 months ago
9 months ago
10 months ago
11 months ago