본문으로 건너뛰기

마진 매니저 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를 호출해야 한다. 이 호출은 managerinitializer를 포함하는 객체를 반환한다.

매개변수

  • 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));
};