Skip to content

Commit

Permalink
Money market interface (#161)
Browse files Browse the repository at this point in the history
* feat: adding types for money market

* feat: add batch query and the rest of the services

* feat: added some exports

* feat: add changeset

* chore: small fix
  • Loading branch information
SissonJ authored Aug 23, 2024
1 parent 2adcf09 commit fae6c9c
Show file tree
Hide file tree
Showing 9 changed files with 1,102 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changeset/breezy-dodos-explode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@shadeprotocol/shadejs": patch
---

Money market interface, pending tests and docs
1 change: 1 addition & 0 deletions src/contracts/definitions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from './derivativeScrt';
export * from './shadeStaking';
export * from './lend';
export * from './silkBasket';
export * from './moneyMarket';
191 changes: 191 additions & 0 deletions src/contracts/definitions/moneyMarket.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
import { AccountPermit } from '~/types/permit';
import { Pagination } from '~/types/contracts/moneyMarket/model';
import { generatePadding } from '~/index';
import { snip20 } from './snip20';

/**
* Query the contract status info
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
const msgQueryMoneyMarketConfig = () => ({ config: {} });

/**
* Query the collateral state and config info
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
const msgQueryMoneyMarketCollaterals = (
pagination?: Pagination,
) => ({
get_collateral: {
pagination,
},
});

/**
* Query the markets' state and config info
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
const msgQueryMoneyMarketMarkets = (
pagination?: Pagination,
) => ({
get_markets: {
pagination,
},
});

/**
* Query a user's collateral and debt positions
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
const msgQueryMoneyMarketUserPosition = (
address: string,
permit: AccountPermit,
) => ({
user_position: {
address,
authentication: {
permit: {
query_permit: permit,
},
},
},
});

/**
* message to borrow a debt token against deposited collateral
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
function msgMoneyMarketBorrow({
borrowAmount,
debtTokenAddress,
}: {
borrowAmount: string,
debtTokenAddress: string,
}) {
return {
borrow: {
token: debtTokenAddress,
amount: borrowAmount,
},
};
}

/**
* message to withdraw collateral against an existing user position
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
function msgMoneyMarketWithdrawCollateral({
withdrawAmount,
collateralTokenAddress,
}: {
withdrawAmount: string,
collateralTokenAddress: string,
}) {
return {
deposit_collateral: {
token: collateralTokenAddress,
amount: withdrawAmount,
},
};
}

/**
* message to deposit collateral to borrow against
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
function msgMoneyMarketDepositCollateral({
moneyMarketContractAddress,
moneyMarketCodeHash,
depositAmount,
}: {
moneyMarketContractAddress: string,
moneyMarketCodeHash?: string,
depositAmount: string,
}) {
return snip20.messages.send({
recipient: moneyMarketContractAddress,
recipientCodeHash: moneyMarketCodeHash,
amount: depositAmount,
handleMsg: { deposit_collateral: {} },
padding: generatePadding(),
}).msg;
}

/**
* message to supply tokens to be lent out
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
function msgMoneyMarketSupply({
moneyMarketContractAddress,
moneyMarketCodeHash,
supplyAmount,
}: {
moneyMarketContractAddress: string,
moneyMarketCodeHash?: string,
supplyAmount: string,
}) {
return snip20.messages.send({
recipient: moneyMarketContractAddress,
recipientCodeHash: moneyMarketCodeHash,
amount: supplyAmount,
handleMsg: { supply: {} },
padding: generatePadding(),
}).msg;
}

/**
* message to withdraw supply by sending an ltoken amount
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
function msgMoneyMarketWithdrawSupply({
moneyMarketContractAddress,
moneyMarketCodeHash,
withdrawAmount,
}: {
moneyMarketContractAddress: string,
moneyMarketCodeHash?: string,
withdrawAmount: string,
}) {
return snip20.messages.send({
recipient: moneyMarketContractAddress,
recipientCodeHash: moneyMarketCodeHash,
amount: withdrawAmount,
handleMsg: { withdraw_supply: {} },
padding: generatePadding(),
}).msg;
}

/**
* message to repay a loan that has been taken out
* NOT FOR PRODUCTION USE, CONTRACT IS IN DEVELOPMENT ON TESTNET ONLY
*/
function msgMoneyMarketRepay({
moneyMarketContractAddress,
moneyMarketCodeHash,
repayAmount,
}: {
moneyMarketContractAddress: string,
moneyMarketCodeHash?: string,
repayAmount: string,
}) {
return snip20.messages.send({
recipient: moneyMarketContractAddress,
recipientCodeHash: moneyMarketCodeHash,
amount: repayAmount,
handleMsg: { repay: {} },
padding: generatePadding(),
}).msg;
}

export {
msgQueryMoneyMarketConfig,
msgQueryMoneyMarketCollaterals,
msgQueryMoneyMarketMarkets,
msgQueryMoneyMarketUserPosition,
msgMoneyMarketBorrow,
msgMoneyMarketWithdrawCollateral,
msgMoneyMarketDepositCollateral,
msgMoneyMarketSupply,
msgMoneyMarketWithdrawSupply,
msgMoneyMarketRepay,
};
1 change: 1 addition & 0 deletions src/contracts/services/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from './derivativeShd';
export * from './shadeStaking';
export * from './lend';
export * from './silkBasket';
export * from './moneyMarket';
Loading

0 comments on commit fae6c9c

Please sign in to comment.