주문 SDK
margin manager를 통해 주문을 배치하고 관리하면 DeepBook에서 leveraged trading을 수행할 수 있다. Orders SDK는 지정가 주문와 시장가 주문을 배치하고, 포지션을 관리하며, governance에 참여하기 위한 함수를 제공한다.
주문 함수
DeepBook Margin SDK는 margin manager를 통해 주문을 관리하기 위한 다음 함수를 제공한다.
placeLimitOrder
margin manager를 통해 지정가 주문을 배치하려면 placeLimitOrder를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
params: 다음을 포함하는PlaceMarginLimitOrderParams객체이다:poolKey: DeepBook 풀을 식별하는 String이다marginManagerKey: margin manager를 식별하는 String이다clientOrderId: 클라이언트-side 주문 ID를 위한 String이다price: 주문 price를 나타내는 Number이다quantity: 주문 quantity를 나타내는 Number이다isBid: buy 주문인지 여부를 나타내는 Boolean이다expiration: 주문 expiration 타임스탬프를 위한 optional Number이다orderType: optionalOrderTypeenum이다selfMatchingOption: optionalSelfMatchingOptionsenum이다payWithDeep: DEEP 토큰으로 fee를 지불하는지 여부를 나타내는 optional boolean이다
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.placeMarketOrder
margin manager를 통해 시장가 주문을 배치하려면 placeMarketOrder를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
params: 지정가 주문와 유사한 파라미터를 포함하는PlaceMarginMarketOrderParams객체이다(price 및 expiration은 제외한다).
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.placeReduceOnlyLimitOrder
기존 debt 포지션만 줄일 수 있는 지정가 주문을 배치하려면 placeReduceOnlyLimitOrder를 사용한다. margin trading이 비활성화되어 있고 포지션을 종료해야 할 때 유용하다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
params:PlaceMarginLimitOrderParams객체이다(placeLimitOrder와 같다).
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.placeReduceOnlyMarketOrder
기존 debt 포지션만 줄일 수 있는 시장가 주문을 배치하려면 placeReduceOnlyMarketOrder를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
params:PlaceMarginMarketOrderParams객체이다(placeMarketOrder와 같다).
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.modifyOrder
기존 주문의 quantity를 수정하려면 modifyOrder를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
orderId는 주문 배치 중 생성되는 프로토콜 orderId이며, 클라이언트 orderId와는 다르다.
매개변수
marginManagerKey: margin manager를 식별하는 String이다.orderId: 프로토콜 주문 ID의 String이다.newQuantity: 새 주문 quantity를 나타내는 Number이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.cancelOrder, cancelOrders, cancelAllOrders
이 함수를 사용해 margin manager의 주문을 취소한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
marginManagerKey: margin manager를 식별하는 String이다.orderId(cancelOrder only): 프로토콜 주문 ID의 String이다.orderIds(cancelOrders only): 프로토콜 주문 ID의 Array이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.withdrawSettledAmounts
완료된 trade에서 settled amount를 인출하려면 withdrawSettledAmounts를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한 다.
매개변수
marginManagerKey: margin manager를 식별하는 String이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.stake, unstake
이 함수를 사용해 거래 수수료 혜택을 위해 margin manager를 통해 DEEP 토큰을 stake 및 unstake한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
marginManagerKey: margin manager를 식별하는 String이다.stakeAmount(stake only): stake할 amount를 나타내는 Number이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.submitProposal, vote
이 함수를 사용해 margin manager를 통해 풀 governance에 참여한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
marginManagerKey: margin manager를 식별하는 String이다.params(submitProposal):MarginProposalParams,takerFee, 그리고makerFee가 포함된stakeRequired객체이다.proposalId(vote): proposal ID를 나타내는 String이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.claimRebate
margin manager를 통해 획득한 trading rebate를 claim하려면 claimRebate를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
marginManagerKey: margin manager를 식별하는 String이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.withdrawMarginSettledAmounts
Object ID로 임의의 margin manager에 대해 settled amounts를 permissionless하게 인출하려면 withdrawMarginSettledAmounts를 사용한다. Ownership이 필요한 withdrawSettledAmounts와 달리 누구나 호출할 수 있다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
poolKey: DeepBook 풀을 식별하는 String이다.marginManagerId: margin manager의 객체 ID를 나타내는 String이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.updateCurrentPrice
Pyth oracle을 사용해 풀의 current price를 업데이트하려면 updateCurrentPrice를 사용한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.
매개변수
poolKey: DeepBook 풀을 식별하는 String이다.
packages/deepbook-v3/src/transactions/poolProxy.ts. You probably need to run `pnpm prebuild` and restart the site.예시
다음 예시는 일반적인 margin 주문 operation을 시연한다.
지정가 주문 배치
// Params for limit order
interface PlaceMarginLimitOrderParams {
poolKey: string;
marginManagerKey: string;
clientOrderId: string;
price: number;
quantity: number;
isBid: boolean;
expiration?: number | bigint;
orderType?: OrderType;
selfMatchingOption?: SelfMatchingOptions;
payWithDeep?: boolean;
}
// Example: Place a buy limit order for 10 SUI at $2.50
placeLimitOrder = (tx: Transaction) => {
const poolKey = 'SUI_DBUSDC';
const managerKey = 'MARGIN_MANAGER_1';
tx.add(
this.poolProxyContract.placeLimitOrder({
poolKey,
marginManagerKey: managerKey,
clientOrderId: '12345',
price: 2.5,
quantity: 10,
isBid: true,
payWithDeep: true,
}),
);
};
시장가 주문 배치
// Example: Place a market sell order for 5 SUI
placeMarketOrder = (tx: Transaction) => {
const poolKey = 'SUI_DBUSDC';
const managerKey = 'MARGIN_MANAGER_1';
tx.add(
this.poolProxyContract.placeMarketOrder({
poolKey,
marginManagerKey: managerKey,
clientOrderId: '12346',
quantity: 5,
isBid: false,
payWithDeep: true,
}),
);
};
reduce-only 주문 배치
// Example: Place a reduce-only limit order to close a position
placeReduceOnly = (tx: Transaction) => {
const poolKey = 'SUI_DBUSDC';
const managerKey = 'MARGIN_MANAGER_1';
tx.add(
this.poolProxyContract.placeReduceOnlyLimitOrder({
poolKey,
marginManagerKey: managerKey,
clientOrderId: '12347',
price: 2.6,
quantity: 10,
isBid: true, // Buying back to reduce short position
payWithDeep: true,
}),
);
};
주문 수정 및 cancel
// Example: Modify order quantity
modifyExistingOrder = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
const orderId = '123456789'; // Protocol order ID
const newQuantity = 8; // Reduce from 10 to 8
tx.add(this.poolProxyContract.modifyOrder(managerKey, orderId, newQuantity));
};
// Example: Cancel a single order
cancelSingleOrder = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
const orderId = '123456789';
tx.add(this.poolProxyContract.cancelOrder(managerKey, orderId));
};
// Example: Cancel multiple orders
cancelMultipleOrders = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
const orderIds = ['123456789', '987654321'];
tx.add(this.poolProxyContract.cancelOrders(managerKey, orderIds));
};
// Example: Cancel all orders
cancelAll = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
tx.add(this.poolProxyContract.cancelAllOrders(managerKey));
};
stake 및 governance 참여
// Example: Stake DEEP tokens
stakeDeep = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
const stakeAmount = 1000; // Stake 1000 DEEP
tx.add(this.poolProxyContract.stake(managerKey, stakeAmount));
};
// Example: Submit a governance proposal
submitGovernanceProposal = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
tx.add(
this.poolProxyContract.submitProposal(managerKey, {
takerFee: 0.0005, // 5 bps
makerFee: 0.0002, // 2 bps
stakeRequired: 1000,
}),
);
};
// Example: Vote on a proposal
voteOnProposal = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
const proposalId = '0x...';
tx.add(this.poolProxyContract.vote(managerKey, proposalId));
};
// Example: Claim trading rebates
claimTradingRebate = (tx: Transaction) => {
const managerKey = 'MARGIN_MANAGER_1';
tx.add(this.poolProxyContract.claimRebate(managerKey));
};