본문으로 건너뛰기

마진 매니저 SDK

margin 계정을 관리하는 것은 DeepBook에서 leveraged trading을 수행하는 데 필수적이다. Margin Manager SDK는 margin manager 생성, 담보 예치, 자산 차입, 그리고 risk 관리에 대한 함수를 제공한다.

Margin Manager 함수​

DeepBook Margin SDK는 margin 계정을 관리하기 위한 다음 함수를 제공한다.

newMarginManager​

하나의 트랜잭션에서 새 margin manager를 생성하고 공유하려면 newMarginManager를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • poolKey: DeepBook 풀을 식별하는 String이다.

newMarginManagerWithInitializer​

margin manager를 생성하고 initializer와 함께 반환하려면 newMarginManagerWithInitializer를 사용한다. 이후 이를 공유하기 위해 shareMarginManager를 호출해야 한다. 이 호출은 manager와 initializer를 포함하는 객체를 반환한다.

매개변수

  • poolKey: DeepBook 풀을 식별하는 String이다.

shareMarginManager​

shareMarginManager로 생성한 margin manager를 공유하려면 newMarginManagerWithInitializer를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • poolKey: DeepBook 풀을 식별하는 String이다.
  • manager: margin manager를 나타내는 TransactionArgument이다.
  • initializer: initializer를 나타내는 TransactionArgument이다.

depositDuringInitialization​

depositDuringInitialization을 사용해 margin manager 생성 중, 공유되기 전에 자금을 예치한다. 이는 newMarginManagerWithInitializer와 같은 트랜잭션 안에서, shareMarginManager보다 먼저 호출해야 한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • manager: TransactionArgument가 반환한 margin manager를 나타내는 newMarginManagerWithInitializer이다.
  • poolKey: DeepBook 풀을 식별하는 String이다.
  • coinType: 예치할 코인 타입을 식별하는 String이다(예: 'SUI', 'DBUSDC', 'DEEP').
  • amount: 예치할 amount를 나타내는 Number이다(amount 또는 coin 중 하나만 제공한다).
  • coin: 예치할 코인 객체를 나타내는 TransactionArgument이다(amount 또는 coin 중 하나만 제공한다).

depositBase, depositQuote, depositDeep​

이 함수를 사용해 margin manager에 자산을 예치한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerKey: margin manager를 식별하는 String이다.
  • amount: 예치할 amount를 나타내는 Number이다.

withdrawBase, withdrawQuote, withdrawDeep​

이 함수를 사용해 margin manager에서 자산을 인출한다. 인출은 risk ratio limit의 적용을 받는다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerKey: margin manager를 식별하는 String이다.
  • amount: 인출할 amount를 나타내는 Number이다.

borrowBase, borrowQuote​

이 함수를 사용해 마진 풀에서 자산을 차입한다. 차입는 risk ratio limit의 적용을 받는다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerKey: margin manager를 식별하는 String이다.
  • amount: 차입할 amount를 나타내는 Number이다.

repayBase, repayQuote​

이 함수를 사용해 차입한 자산을 상환한다. amount를 지정하지 않으면, 총 debt까지 사용 가능한 최대 잔액을 상환한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerKey: margin manager를 식별하는 String이다.
  • amount: 상환할 amount를 나타내는 optional Number이다.

liquidate​

담보가 부족한 margin manager를 liquidation하려면 liquidate를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerAddress: liquidation할 margin manager의 주소를 나타내는 String이다.
  • poolKey: DeepBook 풀을 식별하는 String이다.
  • debtIsBase: debt가 베이스 자산인지 여부를 나타내는 Boolean이다.
  • repayCoin: 상환에 사용할 코인을 나타내는 TransactionArgument이다.

setMarginManagerReferral​

margin manager에 대해 풀-specific referral을 설정하려면 setMarginManagerReferral을 사용한다. referral은 margin manager와 연관된 풀에 대해 민트된 DeepBookPoolReferral이어야 한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerKey: margin manager를 식별하는 String이다.
  • referral: referral ID를 나타내는 String이다.

unsetMarginManagerReferral​

특정 풀에 대해 margin manager에서 referral 연관 관계를 제거하려면 unsetMarginManagerReferral을 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

  • managerKey: margin manager를 식별하는 String이다.
  • poolKey: DeepBook 풀을 식별하는 String이다.

read-only 함수​

다음 함수는 margin manager state를 수정하지 않고 쿼리한다.

managerState​

risk ratio, 자산, debts, Pyth price data를 포함한 margin manager의 종합 state 정보를 쿼리한다.

owner, deepbookPool, marginPoolId​

기본적인 margin manager 정보를 쿼리한다.

baseBalance, quoteBalance, deepBalance​

Margin manager가 보유한 개별 자산 잔액을 쿼리한다.

borrowedShares, borrowedBaseShares, borrowedQuoteShares, hasBaseDebt​

borrowed 포지션 정보를 쿼리한다.

balanceManager, calculateAssets, calculateDebts​

잔액와 debt 정보를 쿼리한다.

예시​

다음 예시는 일반적인 margin manager operation을 시연한다.

margin manager 생성​

/**
* @description Create a new margin manager
* @param {string} poolKey The key to identify the pool
* @returns A function that takes a Transaction object
*/
newMarginManager = (poolKey: string) => (tx: Transaction) => {};

// Example usage
createMarginManager = (tx: Transaction) => {
const poolKey = 'SUI_DBUSDC';
tx.add(this.marginContract.newMarginManager(poolKey));
};

담보 예치​

// Example: Deposit 100 SUI as collateral
depositCollateral = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
tx.add(this.marginContract.depositBase(managerKey, 100));
};

자산 차입​

// Example: Borrow 500 USDC
borrowFunds = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
tx.add(this.marginContract.borrowQuote(managerKey, 500));
};

loan 상환​

// Example: Repay all borrowed quote assets
repayLoan = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
// No amount specified = repay all
tx.add(this.marginContract.repayQuote(managerKey));
};

포지션 liquidate​

// Example: Liquidate an undercollateralized position
liquidatePosition = (tx: Transaction) => {
const managerAddress = '0x...'; // Address of margin manager to liquidate
const poolKey = 'SUI_DBUSDC';
const debtIsBase = false; // Debt is in USDC (quote)
const repayCoin = tx.splitCoins(tx.gas, [500 * 1_000_000]); // 500 USDC
tx.add(this.marginContract.liquidate(managerAddress, poolKey, debtIsBase, repayCoin));
};