@cetusprotocol/deepbook-utils 0.1.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +1 -0
- package/dist/index.d.ts +78 -7
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/.env
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MNEMONIC_PHRASE='town salad runway country farm obscure approve length cheap timber hunt plate'
|
package/dist/index.d.ts
CHANGED
|
@@ -221,13 +221,32 @@ type Package<T = undefined> = {
|
|
|
221
221
|
};
|
|
222
222
|
|
|
223
223
|
type OrderFee = {
|
|
224
|
-
|
|
224
|
+
takerFee: string;
|
|
225
|
+
makerFee: string;
|
|
225
226
|
feeType: string;
|
|
227
|
+
takerFeeDisplay: string;
|
|
228
|
+
makerFeeDisplay: string;
|
|
226
229
|
};
|
|
227
230
|
type OrderDeepPrice = {
|
|
228
231
|
asset_is_base: boolean;
|
|
229
232
|
deep_per_asset: number;
|
|
230
233
|
};
|
|
234
|
+
declare enum OrderType {
|
|
235
|
+
NO_RESTRICTION = 0,
|
|
236
|
+
IMMEDIATE_OR_CANCEL = 1,
|
|
237
|
+
FILL_OR_KILL = 2,
|
|
238
|
+
POST_ONLY = 3
|
|
239
|
+
}
|
|
240
|
+
type Token = {
|
|
241
|
+
coinType: string;
|
|
242
|
+
decimals: number;
|
|
243
|
+
};
|
|
244
|
+
type PoolInfo = {
|
|
245
|
+
address: string;
|
|
246
|
+
baseCoin: Token;
|
|
247
|
+
quoteCoin: Token;
|
|
248
|
+
[key: string]: any;
|
|
249
|
+
};
|
|
231
250
|
|
|
232
251
|
type BigNumber = Decimal.Value | number | string;
|
|
233
252
|
|
|
@@ -318,7 +337,7 @@ declare class DeepbookUtilsModule implements IModule {
|
|
|
318
337
|
get sdk(): DeepbookUtilsSDK;
|
|
319
338
|
get deepCoin(): DeepCoin;
|
|
320
339
|
createAndShareBalanceManager(): Transaction;
|
|
321
|
-
getBalanceManager(account: string): Promise<any>;
|
|
340
|
+
getBalanceManager(account: string, forceRefresh?: boolean): Promise<any>;
|
|
322
341
|
createAndDepsit({ account, coin, amountToDeposit }: {
|
|
323
342
|
account: string;
|
|
324
343
|
coin: CoinItem;
|
|
@@ -339,6 +358,14 @@ declare class DeepbookUtilsModule implements IModule {
|
|
|
339
358
|
returnAssets?: boolean;
|
|
340
359
|
txb?: Transaction;
|
|
341
360
|
}): Transaction | _mysten_sui_transactions.TransactionResult;
|
|
361
|
+
withdrawManagersFreeBalance({ account, balanceManagers, tx }: {
|
|
362
|
+
account: string;
|
|
363
|
+
balanceManagers: Record<string, {
|
|
364
|
+
coinType: string;
|
|
365
|
+
amount: string;
|
|
366
|
+
}[]>;
|
|
367
|
+
tx?: Transaction;
|
|
368
|
+
}): Transaction;
|
|
342
369
|
withdrawSettledAmounts({ poolInfo, balanceManager }: {
|
|
343
370
|
poolInfo: any;
|
|
344
371
|
balanceManager: string;
|
|
@@ -348,6 +375,10 @@ declare class DeepbookUtilsModule implements IModule {
|
|
|
348
375
|
balanceManager: string;
|
|
349
376
|
coins: CoinItem[];
|
|
350
377
|
}): Promise<any>;
|
|
378
|
+
getAccountAllManagerBalance({ account, coins }: {
|
|
379
|
+
account: string;
|
|
380
|
+
coins: CoinItem[];
|
|
381
|
+
}): Promise<any>;
|
|
351
382
|
getMarketPrice(poolInfo: any): Promise<string>;
|
|
352
383
|
getPools(): Promise<any>;
|
|
353
384
|
getQuoteQuantityOut(poolInfo: any, baseQuantity: string, account: string): Promise<{
|
|
@@ -409,14 +440,53 @@ declare class DeepbookUtilsModule implements IModule {
|
|
|
409
440
|
quoteAsset: any;
|
|
410
441
|
feeAsset: any;
|
|
411
442
|
}>;
|
|
412
|
-
createDepositThenPlaceLimitOrder(poolInfo
|
|
443
|
+
createDepositThenPlaceLimitOrder({ poolInfo, priceInput, quantity, orderType, isBid, maxFee, account, payWithDeep, expirationTimestamp }: {
|
|
444
|
+
poolInfo: PoolInfo;
|
|
445
|
+
priceInput: string;
|
|
446
|
+
quantity: string;
|
|
447
|
+
orderType: OrderType;
|
|
448
|
+
isBid: boolean;
|
|
449
|
+
maxFee: string;
|
|
450
|
+
account: string;
|
|
451
|
+
payWithDeep: boolean;
|
|
452
|
+
expirationTimestamp?: number;
|
|
453
|
+
}): Promise<any>;
|
|
413
454
|
getEmptyCoin(txb: any, coin: string): any;
|
|
414
|
-
createDepositThenPlaceMarketOrder(poolInfo
|
|
415
|
-
|
|
455
|
+
createDepositThenPlaceMarketOrder({ poolInfo, quantity, isBid, maxFee, account, payWithDeep, slippage }: {
|
|
456
|
+
poolInfo: any;
|
|
457
|
+
quantity: string;
|
|
458
|
+
isBid: boolean;
|
|
459
|
+
maxFee: string;
|
|
460
|
+
account: string;
|
|
461
|
+
payWithDeep: boolean;
|
|
462
|
+
slippage?: number;
|
|
463
|
+
}): Promise<any>;
|
|
464
|
+
placeLimitOrder({ balanceManager, poolInfo, priceInput, quantity, isBid, orderType, maxFee, account, payWithDeep, expirationTimestamp }: {
|
|
465
|
+
balanceManager: string;
|
|
466
|
+
poolInfo: any;
|
|
467
|
+
priceInput: string;
|
|
468
|
+
quantity: string;
|
|
469
|
+
isBid: boolean;
|
|
470
|
+
orderType: OrderType;
|
|
471
|
+
maxFee: string;
|
|
472
|
+
account: string;
|
|
473
|
+
payWithDeep: boolean;
|
|
474
|
+
expirationTimestamp?: number;
|
|
475
|
+
}): Promise<Transaction>;
|
|
416
476
|
getBestAskprice(poolInfo: any): Promise<any>;
|
|
417
477
|
getBestBidprice(poolInfo: any): Promise<any>;
|
|
418
478
|
getBestAskOrBidPrice(poolInfo: any, isBid: boolean): Promise<any>;
|
|
419
|
-
placeMarketOrder(balanceManager
|
|
479
|
+
placeMarketOrder({ balanceManager, poolInfo, baseQuantity, quoteQuantity, isBid, maxFee, account, payWithDeep, slippage }: {
|
|
480
|
+
balanceManager: string;
|
|
481
|
+
poolInfo: PoolInfo;
|
|
482
|
+
baseQuantity: string;
|
|
483
|
+
quoteQuantity: string;
|
|
484
|
+
isBid: boolean;
|
|
485
|
+
maxFee: string;
|
|
486
|
+
account: string;
|
|
487
|
+
payWithDeep: boolean;
|
|
488
|
+
slippage?: number;
|
|
489
|
+
}): Promise<any>;
|
|
420
490
|
getOpenOrderFromDeepbook(account: string, balanceManager: string): Promise<void>;
|
|
421
491
|
getOrderInfoList(poolInfo: any, orderIds: string[], account: string): Promise<any>;
|
|
422
492
|
decodeOrderId(encodedOrderId: bigint): {
|
|
@@ -516,6 +586,7 @@ type SdkOptions = {
|
|
|
516
586
|
published_at: string;
|
|
517
587
|
global_config_id: string;
|
|
518
588
|
cetus_balance_manager_indexer_id: string;
|
|
589
|
+
vault_global_config_id?: string;
|
|
519
590
|
};
|
|
520
591
|
DEEP_COIN: {
|
|
521
592
|
coinType: string;
|
|
@@ -894,4 +965,4 @@ declare class CoinAssist {
|
|
|
894
965
|
static calculateTotalBalance(coins: CoinAsset[]): bigint;
|
|
895
966
|
}
|
|
896
967
|
|
|
897
|
-
export { AdjustResult, Balances, BigNumber, BuildCoinResult, CLOCK_ADDRESS, CachedContent, DeepbookUtilsSDK as CetusClmmSDK, ClmmExpectSwapModule, ClmmFetcherModule, ClmmIntegratePoolModule, ClmmIntegratePoolV2Module, ClmmIntegrateRouterModule, ClmmIntegrateRouterWithPartnerModule, ClmmIntegrateUtilsModule, CoinAsset, CoinAssist, CoinConfig, CoinInfoAddress, CoinStoreAddress, DEEP_SCALAR, DEFAULT_GAS_BUDGET_FOR_MERGE, DEFAULT_GAS_BUDGET_FOR_SPLIT, DEFAULT_GAS_BUDGET_FOR_STAKE, DEFAULT_GAS_BUDGET_FOR_TRANSFER, DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI, DEFAULT_NFT_TRANSFER_GAS_FEE, DataPage, DeepbookClobV2Moudle, DeepbookCustodianV2Moudle, DeepbookEndpointsV2Moudle, DeepbookUtilsModule, FLOAT_SCALAR, GAS_SYMBOL, GAS_TYPE_ARG, GAS_TYPE_ARG_LONG, NFT, NORMALIZED_SUI_COIN_TYPE, OrderDeepPrice, OrderFee, Package, PageQuery, PaginationArgs, RpcModule, SUI_SYSTEM_STATE_OBJECT_ID, SdkOptions, StateAccount, SuiAddressType, SuiBasicTypes, SuiInputTypes, SuiObjectDataWithContent, SuiObjectIdType, SuiResource, SuiStructTag, SuiTxArg, TransactionUtil, addHexPrefix, asIntN, asUintN, bufferToHex, cacheTime24h, cacheTime5min, checkAddress, composeType, d, decimalsMultiplier, DeepbookUtilsSDK as default, extractAddressFromType, extractStructTagFromType, fixCoinType, fixDown, fixSuiObjectId, fromDecimalsAmount, getDefaultSuiInputType, getFutureTime, getMoveObject, getMoveObjectType, getMovePackageContent, getObjectDeletedResponse, getObjectDisplay, getObjectFields, getObjectId, getObjectNotExistsResponse, getObjectOwner, getObjectPreviousTransactionDigest, getObjectReference, getObjectType, getObjectVersion, getSuiObjectData, hasPublicTransfer, hexToNumber, hexToString, isSortedSymbols, isSuiObjectResponse, maxDecimal, normalizeCoinType, patchFixSuiObjectId, printTransaction, removeHexPrefix, secretKeyToEd25519Keypair, secretKeyToSecp256k1Keypair, shortAddress, shortString, toBuffer, toDecimalsAmount, utf8to16 };
|
|
968
|
+
export { AdjustResult, Balances, BigNumber, BuildCoinResult, CLOCK_ADDRESS, CachedContent, DeepbookUtilsSDK as CetusClmmSDK, ClmmExpectSwapModule, ClmmFetcherModule, ClmmIntegratePoolModule, ClmmIntegratePoolV2Module, ClmmIntegrateRouterModule, ClmmIntegrateRouterWithPartnerModule, ClmmIntegrateUtilsModule, CoinAsset, CoinAssist, CoinConfig, CoinInfoAddress, CoinStoreAddress, DEEP_SCALAR, DEFAULT_GAS_BUDGET_FOR_MERGE, DEFAULT_GAS_BUDGET_FOR_SPLIT, DEFAULT_GAS_BUDGET_FOR_STAKE, DEFAULT_GAS_BUDGET_FOR_TRANSFER, DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI, DEFAULT_NFT_TRANSFER_GAS_FEE, DataPage, DeepbookClobV2Moudle, DeepbookCustodianV2Moudle, DeepbookEndpointsV2Moudle, DeepbookUtilsModule, FLOAT_SCALAR, GAS_SYMBOL, GAS_TYPE_ARG, GAS_TYPE_ARG_LONG, NFT, NORMALIZED_SUI_COIN_TYPE, OrderDeepPrice, OrderFee, OrderType, Package, PageQuery, PaginationArgs, PoolInfo, RpcModule, SUI_SYSTEM_STATE_OBJECT_ID, SdkOptions, StateAccount, SuiAddressType, SuiBasicTypes, SuiInputTypes, SuiObjectDataWithContent, SuiObjectIdType, SuiResource, SuiStructTag, SuiTxArg, Token, TransactionUtil, addHexPrefix, asIntN, asUintN, bufferToHex, cacheTime24h, cacheTime5min, checkAddress, composeType, d, decimalsMultiplier, DeepbookUtilsSDK as default, extractAddressFromType, extractStructTagFromType, fixCoinType, fixDown, fixSuiObjectId, fromDecimalsAmount, getDefaultSuiInputType, getFutureTime, getMoveObject, getMoveObjectType, getMovePackageContent, getObjectDeletedResponse, getObjectDisplay, getObjectFields, getObjectId, getObjectNotExistsResponse, getObjectOwner, getObjectPreviousTransactionDigest, getObjectReference, getObjectType, getObjectVersion, getSuiObjectData, hasPublicTransfer, hexToNumber, hexToString, isSortedSymbols, isSuiObjectResponse, maxDecimal, normalizeCoinType, patchFixSuiObjectId, printTransaction, removeHexPrefix, secretKeyToEd25519Keypair, secretKeyToSecp256k1Keypair, shortAddress, shortString, toBuffer, toDecimalsAmount, utf8to16 };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ve=Object.create;var V=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Pe=Object.prototype.hasOwnProperty;var Re=(r,e,t)=>e in r?V(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var qe=(r,e)=>{for(var t in e)V(r,t,{get:e[t],enumerable:!0})},ge=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ee(e))!Pe.call(r,s)&&s!==t&&V(r,s,{get:()=>e[s],enumerable:!(n=De(e,s))||n.enumerable});return r};var me=(r,e,t)=>(t=r!=null?ve(Me(r)):{},ge(e||!r||!r.__esModule?V(t,"default",{value:r,enumerable:!0}):t,r)),Ie=r=>ge(V({},"__esModule",{value:!0}),r);var be=(r,e,t)=>(Re(r,typeof e!="symbol"?e+"":e,t),t);var Nt={};qe(Nt,{CLOCK_ADDRESS:()=>Ot,CachedContent:()=>q,CetusClmmSDK:()=>Z,ClmmExpectSwapModule:()=>vt,ClmmFetcherModule:()=>Bt,ClmmIntegratePoolModule:()=>wt,ClmmIntegratePoolV2Module:()=>Tt,ClmmIntegrateRouterModule:()=>xt,ClmmIntegrateRouterWithPartnerModule:()=>jt,ClmmIntegrateUtilsModule:()=>Dt,CoinAssist:()=>T,CoinInfoAddress:()=>Et,CoinStoreAddress:()=>Mt,DEEP_SCALAR:()=>te,DEFAULT_GAS_BUDGET_FOR_MERGE:()=>$e,DEFAULT_GAS_BUDGET_FOR_SPLIT:()=>Fe,DEFAULT_GAS_BUDGET_FOR_STAKE:()=>Ge,DEFAULT_GAS_BUDGET_FOR_TRANSFER:()=>Le,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI:()=>Ve,DEFAULT_NFT_TRANSFER_GAS_FEE:()=>He,DeepbookClobV2Moudle:()=>Rt,DeepbookCustodianV2Moudle:()=>Pt,DeepbookEndpointsV2Moudle:()=>qt,DeepbookUtilsModule:()=>H,FLOAT_SCALAR:()=>F,GAS_SYMBOL:()=>Ke,GAS_TYPE_ARG:()=>z,GAS_TYPE_ARG_LONG:()=>ne,NORMALIZED_SUI_COIN_TYPE:()=>ot,RpcModule:()=>K,SUI_SYSTEM_STATE_OBJECT_ID:()=>Ze,TransactionUtil:()=>E,addHexPrefix:()=>re,asIntN:()=>ft,asUintN:()=>ht,bufferToHex:()=>We,cacheTime24h:()=>I,cacheTime5min:()=>se,checkAddress:()=>Je,composeType:()=>ie,d:()=>c,decimalsMultiplier:()=>Y,default:()=>Ut,extractAddressFromType:()=>rt,extractStructTagFromType:()=>D,fixCoinType:()=>it,fixDown:()=>M,fixSuiObjectId:()=>ke,fromDecimalsAmount:()=>Ct,getDefaultSuiInputType:()=>It,getFutureTime:()=>U,getMoveObject:()=>ee,getMoveObjectType:()=>Te,getMovePackageContent:()=>lt,getObjectDeletedResponse:()=>Ae,getObjectDisplay:()=>mt,getObjectFields:()=>ue,getObjectId:()=>ce,getObjectNotExistsResponse:()=>Oe,getObjectOwner:()=>gt,getObjectPreviousTransactionDigest:()=>pt,getObjectReference:()=>ae,getObjectType:()=>dt,getObjectVersion:()=>ct,getSuiObjectData:()=>N,hasPublicTransfer:()=>bt,hexToNumber:()=>Ye,hexToString:()=>Xe,isSortedSymbols:()=>nt,isSuiObjectResponse:()=>we,maxDecimal:()=>X,normalizeCoinType:()=>Q,patchFixSuiObjectId:()=>W,printTransaction:()=>at,removeHexPrefix:()=>J,secretKeyToEd25519Keypair:()=>yt,secretKeyToSecp256k1Keypair:()=>kt,shortAddress:()=>ze,shortString:()=>_e,toBuffer:()=>he,toDecimalsAmount:()=>_t,utf8to16:()=>fe});module.exports=Ie(Nt);var se=5*60*1e3,I=24*60*60*1e3;function U(r){return Date.parse(new Date().toString())+r}var q=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};var R=require("@mysten/sui/utils");var Ue="0x2::coin::Coin",Ne=/^0x2::coin::Coin<(.+)>$/,Fe=1e3,$e=500,Le=100,Ve=100,Ge=1e3,z="0x2::sui::SUI",ne="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Ke="SUI",He=450,Ze="0x0000000000000000000000000000000000000005",T=class{static getCoinTypeArg(e){let t=e.type.match(Ne);return t?t[1]:null}static isSUI(e){let t=T.getCoinTypeArg(e);return t?T.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let n=BigInt(0);return e.forEach(s=>{t===s.coinAddress&&(n+=BigInt(s.balance))}),n}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${Ue}<${e}>`}static getCoinAssets(e,t){let n=[];return t.forEach(s=>{Q(s.coinAddress)===Q(e)&&n.push(s)}),n}static isSuiCoin(e){return D(e).full_address===z}static selectCoinObjectIdGreaterThanOrEqual(e,t,n=[]){let s=T.selectCoinAssetGreaterThanOrEqual(e,t,n),i=s.selectedCoins.map(u=>u.coinObjectId),o=s.remainingCoins,a=s.selectedCoins.map(u=>u.balance.toString());return{objectArray:i,remainCoins:o,amountArray:a}}static selectCoinAssetGreaterThanOrEqual(e,t,n=[]){let s=T.sortByBalance(e.filter(l=>!n.includes(l.coinObjectId))),i=T.calculateTotalBalance(s);if(i<t)return{selectedCoins:[],remainingCoins:s};if(i===t)return{selectedCoins:s,remainingCoins:[]};let o=BigInt(0),a=[],u=[...s];for(;o<i;){let l=t-o,m=u.findIndex(d=>d.balance>=l);if(m!==-1){a.push(u[m]),u.splice(m,1);break}let g=u.pop();g.balance>0&&(a.push(g),o+=g.balance)}return{selectedCoins:T.sortByBalance(a),remainingCoins:T.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,n)=>t.balance<n.balance?-1:t.balance>n.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,n)=>t.balance>n.balance?-1:t.balance<n.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,n)=>t+n.balance,BigInt(0))}};var Qe=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function re(r){return r.startsWith("0x")?r:`0x${r}`}function J(r){return r.startsWith("0x")?`${r.slice(2)}`:r}function _e(r,e=4,t=4){let n=Math.max(e,1),s=Math.max(t,1);return`${r.slice(0,n+2)} ... ${r.slice(-s)}`}function ze(r,e=4,t=4){return _e(re(r),e,t)}function Je(r,e={leadingZero:!0}){if(typeof r!="string")return!1;let t=r;if(e.leadingZero){if(!r.startsWith("0x"))return!1;t=t.substring(2)}return Qe.test(t)}function he(r){if(!Buffer.isBuffer(r))if(Array.isArray(r))r=Buffer.from(r);else if(typeof r=="string")exports.isHexString(r)?r=Buffer.from(exports.padToEven(exports.stripHexPrefix(r)),"hex"):r=Buffer.from(r);else if(typeof r=="number")r=exports.intToBuffer(r);else if(r==null)r=Buffer.allocUnsafe(0);else if(r.toArray)r=Buffer.from(r.toArray());else throw new Error("invalid type");return r}function We(r){return re(he(r).toString("hex"))}function Ye(r){let e=new ArrayBuffer(4),t=new DataView(e);for(let s=0;s<r.length;s++)t.setUint8(s,r.charCodeAt(s));return t.getUint32(0,!0)}function fe(r){let e,t,n,s,i;e="";let o=r.length;for(t=0;t<o;)switch(n=r.charCodeAt(t++),n>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=r.charAt(t-1);break;case 12:case 13:s=r.charCodeAt(t++),e+=String.fromCharCode((n&31)<<6|s&63);break;case 14:s=r.charCodeAt(t++),i=r.charCodeAt(t++),e+=String.fromCharCode((n&15)<<12|(s&63)<<6|(i&63)<<0);break}return e}function Xe(r){let e="",t=J(r),n=t.length/2;for(let s=0;s<n;s++)e+=String.fromCharCode(parseInt(t.substr(s*2,2),16));return fe(e)}var et=0,ye=1,tt=2;function Ce(r,e){return r===e?et:r<e?ye:tt}function st(r,e){let t=0,n=r.length<=e.length?r.length:e.length,s=Ce(r.length,e.length);for(;t<n;){let i=Ce(r.charCodeAt(t),e.charCodeAt(t));if(t+=1,i!==0)return i}return s}function nt(r,e){return st(r,e)===ye}function ie(r,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],s=[r,...e].filter(Boolean).join("::");return t&&t.length&&(s+=`<${t.join(", ")}>`),s}function rt(r){return r.split("::")[0]}function D(r){try{let e=r.replace(/\s/g,""),n=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(n){e=e.slice(0,e.indexOf("<"));let u={...D(e),type_arguments:n.map(l=>D(l).source_address)};return u.type_arguments=u.type_arguments.map(l=>T.isSuiCoin(l)?l:D(l).source_address),u.source_address=ie(u.full_address,u.type_arguments),u}let s=e.split("::"),o={full_address:e,address:e===z||e===ne?"0x2":(0,R.normalizeSuiObjectId)(s[0]),module:s[1],name:s[2],type_arguments:[],source_address:""};return o.full_address=`${o.address}::${o.module}::${o.name}`,o.source_address=ie(o.full_address,o.type_arguments),o}catch{return{full_address:r,address:"",module:"",name:"",type_arguments:[],source_address:r}}}function Q(r){return D(r).source_address}function ke(r){return r.toLowerCase().startsWith("0x")?(0,R.normalizeSuiObjectId)(r):r}var it=(r,e=!0)=>{let t=r.split("::"),n=t.shift(),s=(0,R.normalizeSuiObjectId)(n);return e&&(s=J(s)),`${s}::${t.join("::")}`};function W(r){for(let e in r){let t=typeof r[e];if(t==="object")W(r[e]);else if(t==="string"){let n=r[e];r[e]=ke(n)}}}var ot=(0,R.normalizeStructTag)(R.SUI_TYPE_ARG);var oe=me(require("decimal.js"));oe.default.config({precision:64,rounding:oe.default.ROUND_DOWN,toExpNeg:-64,toExpPos:64});var G=me(require("decimal.js"));function c(r){return G.default.isDecimal(r)?r:new G.default(r===void 0?0:r)}function Y(r){return c(10).pow(c(r).abs())}var M=(r,e)=>{try{return c(r).toDP(e,G.default.ROUND_DOWN).toString()}catch{return r}},X=(r,e)=>G.default.max(c(r),c(e));var Se=require("@mysten/sui/transactions");async function at(r,e=!0){r.blockData.transactions.forEach((t,n)=>{})}var P=class{static async adjustTransactionForGas(e,t,n,s){s.setSender(e.senderAddress);let i=T.selectCoinAssetGreaterThanOrEqual(t,n).selectedCoins;if(i.length===0)throw new Error("Insufficient balance");let o=T.calculateTotalBalance(t);if(o-n>1e9)return{fixAmount:n};let a=await e.fullClient.calculationTxGas(s);if(T.selectCoinAssetGreaterThanOrEqual(t,BigInt(a),i.map(l=>l.coinObjectId)).selectedCoins.length===0){let l=BigInt(a)+BigInt(500);if(o-n<l){if(n-=l,n<0)throw new Error("gas Insufficient balance");let m=new Se.Transaction;return{fixAmount:n,newTx:m}}}return{fixAmount:n}}static buildCoinForAmount(e,t,n,s,i=!0,o=!1){let a=T.getCoinAssets(s,t);if(n===BigInt(0)&&a.length===0)return P.buildZeroValueCoin(t,e,s,i);let u=T.calculateTotalBalance(a);if(u<n)throw new Error(`The amount(${u}) is Insufficient balance for ${s} , expect ${n} `);return P.buildCoin(e,t,a,n,s,i,o)}static buildCoin(e,t,n,s,i,o=!0,a=!1){if(T.isSuiCoin(i)){if(o){let k=e.splitCoins(e.gas,[e.pure.u64(s)]);return{targetCoin:e.makeMoveVec({elements:[k]}),remainCoins:t,tragetCoinAmount:s.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(s===0n&&n.length>1){let k=T.selectCoinObjectIdGreaterThanOrEqual(n,s);return{targetCoin:e.object(k.objectArray[0]),remainCoins:k.remainCoins,tragetCoinAmount:k.amountArray[0],isMintZeroCoin:!1}}let C=T.selectCoinObjectIdGreaterThanOrEqual(n,s);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(s)]),remainCoins:C.remainCoins,tragetCoinAmount:s.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let u=T.selectCoinObjectIdGreaterThanOrEqual(n,s),l=u.amountArray.reduce((C,_)=>Number(C)+Number(_),0).toString(),m=u.objectArray;if(o)return{targetCoin:e.makeMoveVec({elements:m.map(C=>e.object(C))}),remainCoins:u.remainCoins,tragetCoinAmount:u.amountArray.reduce((C,_)=>Number(C)+Number(_),0).toString(),isMintZeroCoin:!1};let[g,...d]=m,b=e.object(g),p=b,f=u.amountArray.reduce((C,_)=>Number(C)+Number(_),0).toString(),y;return d.length>0&&e.mergeCoins(b,d.map(C=>e.object(C))),a&&Number(l)>Number(s)&&(p=e.splitCoins(b,[e.pure.u64(s)]),f=s.toString(),y=b),{targetCoin:p,remainCoins:u.remainCoins,originalSplitedCoin:y,tragetCoinAmount:f,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,n,s=!0){let i=P.callMintZeroValueCoin(t,n),o;return s?o=t.makeMoveVec({elements:[i]}):o=i,{targetCoin:o,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,n,s,i=!0){let o=T.getCoinAssets(s,t);if(n.amountFirst===BigInt(0))return o.length>0?P.buildCoin(e,[...t],[...o],n.amountFirst,s,i):P.buildZeroValueCoin(t,e,s,i);let a=T.calculateTotalBalance(o);if(a>=n.amountFirst)return P.buildCoin(e,[...t],[...o],n.amountFirst,s,i);if(a<n.amountSecond)throw new Error(`The amount(${a}) is Insufficient balance for ${s} , expect ${n.amountSecond} `);return P.buildCoin(e,[...t],[...o],n.amountSecond,s,i)}static buildCoinTypePair(e,t){let n=[];if(e.length===2){let s=[];s.push(e[0],e[1]),n.push(s)}else{let s=[];s.push(e[0],e[e.length-1]),n.push(s);for(let i=1;i<e.length-1;i+=1){if(t[i-1]===0)continue;let o=[];o.push(e[0],e[i],e[e.length-1]),n.push(o)}}return n}},E=P;be(E,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));function N(r){return r.data}function Ae(r){if(r.error&&"object_id"in r.error&&"version"in r.error&&"digest"in r.error){let{error:e}=r;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Oe(r){if(r.error&&"object_id"in r.error&&!("version"in r.error)&&!("digest"in r.error))return r.error.object_id}function ae(r){if("reference"in r)return r.reference;let e=N(r);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:Ae(r)}function ce(r){return"objectId"in r?r.objectId:ae(r)?.objectId??Oe(r)}function ct(r){return"version"in r?r.version:ae(r)?.version}function we(r){return r.data!==void 0}function ut(r){return r.content!==void 0}function lt(r){let e=N(r);if(e?.content?.dataType==="package")return e.content.disassembled}function ee(r){let e="data"in r?N(r):r;if(!(!e||!ut(e)||e.content.dataType!=="moveObject"))return e.content}function Te(r){return ee(r)?.type}function dt(r){let e=we(r)?r.data:r;return!e?.type&&"data"in r?e?.content?.dataType==="package"?"package":Te(r):e?.type}function pt(r){return N(r)?.previousTransaction}function gt(r){return N(r)?.owner}function mt(r){let e=N(r)?.display;return e||{data:null,error:null}}function ue(r){let e=ee(r)?.fields;if(e)return"fields"in e?e.fields:e}function bt(r){return ee(r)?.hasPublicTransfer??!1}var L=require("@mysten/bcs"),le=require("@mysten/sui/keypairs/ed25519"),de=require("@mysten/sui/keypairs/secp256k1");function _t(r,e){let t=Y(c(e));return Number(c(r).mul(t))}function ht(r,e=32){return BigInt.asUintN(e,BigInt(r)).toString()}function ft(r,e=32){return Number(BigInt.asIntN(e,BigInt(r)))}function Ct(r,e){let t=Y(c(e));return Number(c(r).div(t))}function yt(r,e="hex"){if(r instanceof Uint8Array){let n=Buffer.from(r);return le.Ed25519Keypair.fromSecretKey(n)}let t=e==="hex"?(0,L.fromHEX)(r):(0,L.fromB64)(r);return le.Ed25519Keypair.fromSecretKey(t)}function kt(r,e="hex"){if(r instanceof Uint8Array){let n=Buffer.from(r);return de.Secp256k1Keypair.fromSecretKey(n)}let t=e==="hex"?(0,L.fromHEX)(r):(0,L.fromB64)(r);return de.Secp256k1Keypair.fromSecretKey(t)}var xe=require("@mysten/sui/client"),K=class extends xe.SuiClient{async queryEventsByPage(e,t="all"){let n=[],s=!0,i=t==="all",o=i?null:t.cursor;do{let a=await this.queryEvents({query:e,cursor:o,limit:i?null:t.limit});a.data?(n=[...n,...a.data],s=a.hasNextPage,o=a.nextCursor):s=!1}while(i&&s);return{data:n,nextCursor:o,hasNextPage:s}}async getOwnedObjectsByPage(e,t,n="all"){let s=[],i=!0,o=n==="all",a=o?null:n.cursor;do{let u=await this.getOwnedObjects({owner:e,...t,cursor:a,limit:o?null:n.limit});u.data?(s=[...s,...u.data],i=u.hasNextPage,a=u.nextCursor):i=!1}while(o&&i);return{data:s,nextCursor:a,hasNextPage:i}}async getDynamicFieldsByPage(e,t="all"){let n=[],s=!0,i=t==="all",o=i?null:t.cursor;do{let a=await this.getDynamicFields({parentId:e,cursor:o,limit:i?null:t.limit});a.data?(n=[...n,...a.data],s=a.hasNextPage,o=a.nextCursor):s=!1}while(i&&s);return{data:n,nextCursor:o,hasNextPage:s}}async batchGetObjects(e,t,n=50){let s=[];try{for(let i=0;i<Math.ceil(e.length/n);i++){let o=await this.multiGetObjects({ids:e.slice(i*n,n*(i+1)),options:t});s=[...s,...o]}}catch{}return s}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let n=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:s}=n.effects;return Number(s.computationCost)+Number(s.storageCost)-Number(s.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};var pe=require("@mysten/deepbook-v3"),h=require("@mysten/sui/bcs"),Be=require("js-base64"),w=require("@mysten/sui/transactions"),S=require("@mysten/sui/utils");function v(...r){let e="DeepbookV3_Utils_Sdk###"}var te=1e6,F=1e9,St={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},At={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},je=1e3*60*60*24*365*100,H=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?At:St}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new w.Transaction,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}async getBalanceManager(e){let t=new w.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[t.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t.pure.address(e)],typeArguments:[]});let i=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:t}))?.events?.filter(a=>a.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],o=[];return i.forEach(a=>{o.push({balanceManager:a,cetusBalanceManager:""})}),o||[]}createAndDepsit({account:e,coin:t,amountToDeposit:n}){let s=new w.Transaction;s.setSenderIfNotSet(e);let i=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),o=(0,w.coinWithBalance)({type:t.coinType,balance:BigInt(n)});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[i,o],typeArguments:[t.coinType]}),s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),i],typeArguments:[]}),s.moveCall({target:"0x2::transfer::public_share_object",arguments:[i],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),s}depositIntoManager({account:e,balanceManager:t,coin:n,amountToDeposit:s,tx:i}){let o=i||new w.Transaction;if(t){o.setSenderIfNotSet(e);let a=(0,w.coinWithBalance)({type:n.coinType,balance:BigInt(s)});return o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[o.object(t),a],typeArguments:[n.coinType]}),o}return null}withdrawFromManager({account:e,balanceManager:t,coin:n,amountToWithdraw:s,returnAssets:i,txb:o}){let a=o||new w.Transaction,u=a.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[a.object(t),a.pure.u64(s)],typeArguments:[n.coinType]});return i?u:(a.transferObjects([u],e),a)}withdrawSettledAmounts({poolInfo:e,balanceManager:t}){let n=new w.Transaction,s=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[n.object(t)]});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[n.object(e.address),n.object(t),s],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),n}async getManagerBalance({account:e,balanceManager:t,coins:n}){let s=new w.Transaction;n.forEach(a=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[s.object(t)],typeArguments:[a.coinType]})});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}),o={};return i.results?.forEach((a,u)=>{let l=n[u],m=a.returnValues[0][0],g=h.bcs.U64.parse(new Uint8Array(m)),d=c(g),b=d.div(Math.pow(10,l.decimals)).toString();o[l.coinType]={adjusted_balance:b,balance:d.toString()}}),o}async getMarketPrice(e){try{let t=new w.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],i=Number(h.bcs.U64.parse(new Uint8Array(s))),o=Math.pow(10,e.baseCoin.decimals).toString(),a=Math.pow(10,e.quoteCoin.decimals).toString();return c(i).mul(o).div(a).div(F).toString()}catch(t){return v("getMarketPrice ~ error:",t),"0"}}async getPools(){let e=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),t=/<([^>]+)>/,n=[];return e?.data?.forEach(s=>{let i=s?.parsedJson,o=s.type.match(t);if(o){let u=o[1].split(", ");n.push({...i,baseCoinType:u[0],quoteCoinType:u[1]})}}),n}async getQuoteQuantityOut(e,t,n){let s=new w.Transaction;s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[s.object(e.address),s.pure.u64(t),s.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),a=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),u=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{baseQuantityDisplay:c(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:c(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:c(a).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:c(u).div(te).toString(),baseQuantity:t,baseOut:o,quoteOut:a,deepRequired:u}}async getBaseQuantityOut(e,t,n){let s=new w.Transaction;s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[s.object(e.address),s.pure.u64(t),s.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),a=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),u=String(h.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{quoteQuantityDisplay:c(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:c(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:c(a).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:c(u).div(te).toString(),quoteQuantity:t,baseOut:o,quoteOut:a,deepRequired:u}}async getQuantityOut(e,t,n,s){let i=new w.Transaction;i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[i.object(e.address),i.pure.u64(t),i.pure.u64(n),i.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:i}),a=Number(h.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[0][0]))),u=Number(h.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[1][0]))),l=Number(h.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[2][0])));return{baseQuantityDisplay:c(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:c(n).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:c(a).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:c(u).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:c(l).div(te).toString(),baseQuantity:t,quoteQuantity:n,baseOut:a,quoteOut:u,deepRequired:l}}async estimatedMaxFee(e,t,n,s,i,o,a){let u=this.deepCoin,l=await this.getMarketPrice(e),m=o?n:l!=="0"?l:a;if(m==="0")throw new Error("Cannot get market price");let g=Math.pow(10,e.baseCoin.decimals).toString(),d=Math.pow(10,e.quoteCoin.decimals).toString(),b=c(m).div(g).mul(d).mul(F).toString(),p=c(m),{taker_fee:f}=e;if(s){let y=await this.getOrderDeepPrice(e);if(!y)throw new Error("Cannot get deep price");let C=X(b,n),_=c(t).mul(c(f)).div(c(F)).mul(c(y.deep_per_asset)).div(c(F));return y.asset_is_base||(_=_.mul(C).div(c(F))),{quantity:_.ceil().toString(),feeType:u.coinType}}else if(i){let y=X(b,n);return{quantity:c(t).mul(y).mul(c(125)).div(c(1e5)).div(c(F)).ceil().toFixed(0),feeType:e.quoteCoin.coinType}}else return{quantity:c(t).mul(c(125)).div(c(1e5)).ceil().toFixed(0),feeType:e.baseCoin.coinType}}async getOrderDeepPrice(e){try{let t=new w.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[t.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0];return this.parseOrderDeepPrice(new Uint8Array(s))}catch(t){return v("getMarketPrice ~ error:",t),null}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),n=t.getUint8(0)!==0,s=Number(t.getBigUint64(1,!0));return{asset_is_base:n,deep_per_asset:s}}getCoinAssets(e,t,n,s){return E.buildCoinForAmount(s,n,BigInt(c(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,n,s,i,o,a){let u=this.deepCoin;if(!a)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};let l=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];s&&l.push(u);let m=await this.getManagerBalance({account:i,balanceManager:a,coins:l}),g=m?.[t]?.balance||"0",d=m?.[n]?.balance||"0",b=o&&m?.[u.coinType]?.balance||"0";return{baseManagerBlance:g,quoteManagerBlance:d,feeManaerBalance:b}}getFeeAsset(e,t,n,s,i,o,a,u,l,m){let g=c(e).gt(0)&&l,d="0";if(!g)return{feeAsset:this.getEmptyCoin(m,t),haveDepositFee:"0"};if(o||a){let b=c(i).sub(o?s:n);d=b.lte(0)?e:b.sub(e).lt(0)?b.sub(e).toString():"0"}else d=c(i).sub(e).lt("0")?c(i).sub(e).abs().toString():"0";return{feeAsset:c(d).gt("0")?this.getCoinAssets(t,d,u,m):this.getEmptyCoin(m,t),haveDepositFee:d}}async getTransactionRelatedAssets(e,t,n,s,i,o,a,u,l){let m=this.deepCoin,g=(0,S.normalizeStructTag)(e.baseCoin.coinType),d=(0,S.normalizeStructTag)(e.quoteCoin.coinType),b=g===m.coinType,p=d===m.coinType,f=!b&&!p,{baseManagerBlance:y,quoteManagerBlance:C,feeManaerBalance:_}=await this.getTransactionRelatedBalance(e,g,d,f,o,a,u),k,A,B=!1,O=await this._sdk.getOwnerCoinAssets(o);if(i){a||(n=c(n).add(c(s)).toString());let x=c(C).sub(n).toString();c(x).lt(0)?(B=!0,A=this.getCoinAssets(d,x,O,l)):A=this.getEmptyCoin(l,d),k=this.getEmptyCoin(l,g)}else{a||(t=c(t).add(c(s)).toString());let x=c(y).sub(t).toString();c(x).lt(0)?(B=!0,k=this.getCoinAssets(g,x,O,l)):k=this.getEmptyCoin(l,g),A=this.getEmptyCoin(l,d)}let j=this.getFeeAsset(s,m.coinType,t,n,_,p,b,O,a,l);return{baseAsset:k,quoteAsset:A,feeAsset:j,haveDeposit:B}}async getMarketTransactionRelatedAssets(e,t,n,s,i,o,a,u,l){let m=this.deepCoin,g=(0,S.normalizeStructTag)(e.baseCoin.coinType),d=(0,S.normalizeStructTag)(e.quoteCoin.coinType),b=g===m.coinType,p=d===m.coinType,f=!b&&!p,{baseManagerBlance:y,quoteManagerBlance:C}=await this.getTransactionRelatedBalance(e,g,d,f,o,a,u),_,k,A=await this._sdk.getOwnerCoinAssets(o);if(i){a||(n=c(n).add(c(s)).toString());let O=c(C).sub(n).toString();if(c(O).lt(0)){let j;c(C).gt(0)&&(j=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:C,returnAssets:!0,txb:l}));let x=this.getCoinAssets(d,O,A,l);j&&l.mergeCoins(x,[j]),k=x}else k=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:n,returnAssets:!0,txb:l});_=this.getEmptyCoin(l,g)}else{a||(t=c(t).add(c(s)).toString());let O=c(y).sub(t).toString();if(c(O).lt(0)){let j;c(y).gt(0)&&(j=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:y,returnAssets:!0,txb:l}));let x=this.getCoinAssets(g,O,A,l);j&&l.mergeCoins(x,[j]),_=x}else _=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:l});k=this.getEmptyCoin(l,d)}let B=this.getEmptyCoin(l,m.coinType);return{baseAsset:_,quoteAsset:k,feeAsset:B}}async createDepositThenPlaceLimitOrder(e,t,n,s,i,o,a,u=Date.now()+je){let l=this.deepCoin,m=e.address,g=e.baseCoin.decimals,d=e.quoteCoin.decimals,b=e.baseCoin.coinType,p=e.quoteCoin.coinType,f=c(t).mul(10**(d-g+9)).toString(),y=(0,S.normalizeStructTag)(b),C=(0,S.normalizeStructTag)(p),_=new w.Transaction,k,A,B=await this._sdk.getOwnerCoinAssets(o);if(s==="bid"){let $=c(t).mul(c(n).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();a||($=c($).add(c(i)).toString()),A=E.buildCoinForAmount(_,B,BigInt($),C,!1,!0)?.targetCoin}else{let $=n;a||($=c(n).abs().add(c(i)).toString()),k=E.buildCoinForAmount(_,B,BigInt(c($).abs().toString()),y,!1,!0)?.targetCoin}let O=a?c(i).gt(0)?E.buildCoinForAmount(_,B,BigInt(c(i).abs().ceil().toString()),l.coinType,!1,!0).targetCoin:this.getEmptyCoin(_,l.coinType):this.getEmptyCoin(_,l.coinType),j=_.moveCall({typeArguments:[s==="bid"?b:p],target:"0x2::coin::zero",arguments:[]}),x=[_.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),_.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),_.object(m),s==="bid"?j:k,s==="bid"?A:j,O,_.pure.u8(0),_.pure.u8(0),_.pure.u64(f),_.pure.u64(n),_.pure.bool(s==="bid"),_.pure.bool(!1),_.pure.u64(u),_.object(S.SUI_CLOCK_OBJECT_ID)];return _.moveCall({typeArguments:[y,C],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:x}),_}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder(e,t,n,s,i,o,a=.01){let u=e.address,l=e.baseCoin.coinType,m=e.quoteCoin.coinType,g=n==="bid",d=(0,S.normalizeStructTag)(l),b=(0,S.normalizeStructTag)(m),p=new w.Transaction,f,y,C=t,_,k=await this.getOrderBook(e,"all",6);if(g){let j=k?.ask?.[0]?.price||"0",x=c(j).mul(c(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();_=c(x).plus(c(x).mul(a)).ceil().toString()}else{let j=await k?.bid?.[0]?.price||"0",x=c(j).mul(c(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();_=c(x).minus(c(x).mul(a)).floor().toString()}let A=await this._sdk.getOwnerCoinAssets(i);g?(o||(_=c(_).add(c(s)).toString()),y=this.getCoinAssets(b,_,A,p),f=this.getEmptyCoin(p,d)):(o||(C=c(C).add(c(s)).toString()),y=this.getEmptyCoin(p,b),f=this.getCoinAssets(d,C,A,p));let B=o?c(s).gt(0)?E.buildCoinForAmount(p,A,BigInt(c(s).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(p,this.deepCoin.coinType):this.getEmptyCoin(p,this.deepCoin.coinType),O=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(u),f,y,B,p.pure.u8(0),p.pure.u64(t),p.pure.bool(g),p.pure.bool(o),p.pure.u64(_),p.object(S.SUI_CLOCK_OBJECT_ID)];return p.moveCall({typeArguments:[d,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:O}),p}async placeLimitOrder(e,t,n,s,i,o,a,u,l=Date.now()+je){let m=this.deepCoin,g=c(n).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),d=t.baseCoin.coinType,b=t.quoteCoin.coinType,p=new w.Transaction,f=i==="bid",y=f?c(n).mul(c(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",C=f?"0":s,{baseAsset:_,quoteAsset:k,feeAsset:A,haveDeposit:B}=await this.getTransactionRelatedAssets(t,C,y,o,f,a,u,e,p);if(B){v("placeLimitOrder~ deposit_then_place_limit_order_by_owner have deposit"),v("placeLimitOrder ~ deposit_then_place_limit_order_by_owner args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,baseAsset:_,quoteAsset:k,feeAsset:A.feeAsset,order_type:0,self_matching_option:0,price:g,quantity:s,is_bid:i==="bid",expirationTimestamp:l,SUI_CLOCK_OBJECT_ID:S.SUI_CLOCK_OBJECT_ID});let O=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(t.address),p.object(e),_,k,A.feeAsset,p.pure.u8(0),p.pure.u8(0),p.pure.u64(g),p.pure.u64(s),p.pure.bool(i==="bid"),p.pure.bool(u),p.pure.u64(l),p.object(S.SUI_CLOCK_OBJECT_ID)];return p.moveCall({typeArguments:[d,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:O}),p}else{let O=new w.Transaction;c(A.haveDepositFee).gt(0)&&this.depositIntoManager({account:a,balanceManager:e,coin:m,amountToDeposit:A.haveDepositFee,tx:O}),v("placeLimitOrder~ not have deposit"),v("placeLimitOrder ~ args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,order_type:0,self_matching_option:0,price:g,quantity:s,is_bid:i==="bid",pay_with_deep:!0,expirationTimestamp:l,SUI_CLOCK_OBJECT_ID:S.SUI_CLOCK_OBJECT_ID});let j=[O.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),O.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),O.object(t.address),O.object(e),O.pure.u8(0),O.pure.u8(0),O.pure.u64(g),O.pure.u64(s),O.pure.bool(i==="bid"),O.pure.bool(u),O.pure.u64(l),O.object(S.SUI_CLOCK_OBJECT_ID)];return O.moveCall({typeArguments:[d,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:j}),O}}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:n}=e,s=new w.Transaction,i=await this.getMarketPrice(e),o=c(i).gt(0)?i:Math.pow(10,-1),a=Math.pow(10,6),u=c(o).mul(Math.pow(10,9+n.decimals-t.decimals)).toString(),l=c(a).mul(Math.pow(10,9+n.decimals-t.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(u),s.pure.u64(l),s.pure.bool(!1),s.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,n.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:s}),d=[],b=g.results[0].returnValues[0][0],p=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(b)),f=g.results[0].returnValues[1][0],y=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(f));return p.forEach((C,_)=>{let k=c(C).div(Math.pow(10,9+n.decimals-t.decimals)).toString(),A=c(y[_]).div(Math.pow(10,t.decimals)).toString();d.push({price:k,quantity:A})}),d?.[0]?.price||0}catch(t){return v("getBestAskprice ~ error:",t),0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:n}=e,s=new w.Transaction,i=await this.getMarketPrice(e),o=c(i).gt(0)?c(i).div(3).toNumber():Math.pow(10,-6),a=c(i).gt(0)?i:Math.pow(10,6),u=c(o).mul(Math.pow(10,9+n.decimals-t.decimals)).toString(),l=c(a).mul(Math.pow(10,9+n.decimals-t.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(M(u,0)),s.pure.u64(M(l,0)),s.pure.bool(!0),s.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,n.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:s}),d=[],b=g.results[0].returnValues[0][0],p=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(b)),f=g.results[0].returnValues[1][0],y=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(f));return p.forEach((C,_)=>{let k=c(C).div(Math.pow(10,9+n.decimals-t.decimals)).toString(),A=c(y[_]).div(Math.pow(10,t.decimals)).toString();d.push({price:k,quantity:A})}),d?.[0]?.price||0}catch(t){return v("getBestBidprice ~ error:",t),0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:n,quoteCoin:s}=e,i=new w.Transaction,o=await this.getMarketPrice(e),a,u;t?(a=c(o).gt(0)?c(o).div(3).toNumber():Math.pow(10,-6),u=c(o).gt(0)?o:Math.pow(10,6)):(a=c(o).gt(0)?o:Math.pow(10,-1),u=c(o).gt(0)?c(o).mul(3).toNumber():Math.pow(10,6));let l=c(a).mul(Math.pow(10,9+s.decimals-n.decimals)).toString(),m=c(u).mul(Math.pow(10,9+s.decimals-n.decimals)).toString();i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(M(l,0)),i.pure.u64(M(m,0)),i.pure.bool(t),i.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.coinType,s.coinType]});let g=this._sdk.sdkOptions.simulationAccount.address,d=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:i}),b=[],p=d.results[0].returnValues[0][0],f=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(p)),y=d.results[0].returnValues[1][0],C=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(y));return f.forEach((_,k)=>{let A=c(_).div(Math.pow(10,9+s.decimals-n.decimals)).toString(),B=c(C[k]).div(Math.pow(10,n.decimals)).toString();b.push({price:A,quantity:B})}),b?.[0]?.price||0}catch(n){return v("getBestBidprice ~ error:",n),0}}async placeMarketOrder(e,t,n,s,i,o,a,u,l=.01){let m=(0,S.normalizeStructTag)(t.baseCoin.coinType),g=(0,S.normalizeStructTag)(t.quoteCoin.coinType),d=new w.Transaction,{baseAsset:b,quoteAsset:p,feeAsset:f}=await this.getMarketTransactionRelatedAssets(t,n,s,o,i,a,u,e,d),y=await this.getOrderBook(t,"all",6);if(i){let k=y?.ask?.[0]?.price||"0",A=c(k).mul(c(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();s=c(A).plus(c(A).mul(l)).ceil().toString()}else{let k=await y?.bid?.[0]?.price||"0",A=c(k).mul(c(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();s=c(A).minus(c(A).mul(l)).floor().toString()}let C=s;console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:1450 ~ DeepbookUtilsModule ~ placeMarketOrder ~ amountLimit:",{amountLimit:C,quoteQuantity:s});let _=[d.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),d.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),d.object(t.address),d.object(e),b,p,f,d.pure.u8(0),d.pure.u64(n),d.pure.bool(i),d.pure.bool(u),d.pure.u64(C),d.object(S.SUI_CLOCK_OBJECT_ID)];return d.setSenderIfNotSet(a),d.moveCall({typeArguments:[m,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:_}),d}async getOpenOrderFromDeepbook(e,t){let n=this._sdk.fullClient,s=new pe.DeepBookClient({client:n,address:e,env:"testnet",balanceManagers:{test1:{address:t,tradeCap:""}}}),i=await s.accountOpenOrders("DEEP_SUI","test1"),o=await s.getOrder("DEEP_SUI","1844674407389401905673709551611")}async getOrderInfoList(e,t,n){try{let s=new w.Transaction;t.forEach(m=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[s.object(e.address),s.pure.u128(m)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]})});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=h.bcs.struct("ID",{bytes:h.bcs.Address}),a=h.bcs.struct("OrderDeepPrice",{asset_is_base:h.bcs.bool(),deep_per_asset:h.bcs.u64()}),u=h.bcs.struct("Order",{balance_manager_id:o,order_id:h.bcs.u128(),client_order_id:h.bcs.u64(),quantity:h.bcs.u64(),filled_quantity:h.bcs.u64(),fee_is_deep:h.bcs.bool(),order_deep_price:a,epoch:h.bcs.u64(),status:h.bcs.u8(),expire_timestamp:h.bcs.u64()}),l=[];return i?.results?.forEach(m=>{let g=m.returnValues[0][0],d=u.parse(new Uint8Array(g));l.push(d)}),l}catch(s){return v("getOrderInfoList ~ error:",s),[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),n=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),s=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:n,orderId:s}}async getOpenOrder(e,t,n,s){let i;if(s)i=s;else{let u=new w.Transaction;u.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[u.object(e.address),u.object(n)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let m=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:u})).results[0].returnValues[0][0];i=h.bcs.struct("VecSet",{constants:h.bcs.vector(h.bcs.U128)}).parse(new Uint8Array(m)).constants,v("getOpenOrder ~ orderIds:",i)}let o=await this.getOrderInfoList(e,i,t)||[];v("getOpenOrder ~ orderInfoList:",o);let a=[];return o.forEach(u=>{let l=this.decodeOrderId(BigInt(u.order_id));a.push({...u,price:l.price,isBid:l.isBid})}),a}cancelOrders(e,t){let n=new w.Transaction;return e.forEach(s=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),n.object(t),n.object(s.poolInfo.address),n.pure.u128(s.orderId),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.poolInfo.baseCoin.coinType,s.poolInfo.quoteCoin.coinType]})}),n}async getDeepbookOrderBook(e,t,n,s,i,o){let a=this._sdk.fullClient,l=await new pe.DeepBookClient({client:a,address:i,env:"testnet",balanceManagers:{test1:{address:o,tradeCap:""}}}).getLevel2Range(e,t,n,s)}processOrderBookData(e,t,n,s){let i=e.returnValues[0][0],o=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(i)),a=e.returnValues[1][0],u=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(a)),l={};return o.forEach((g,d)=>{let b=M(c(g).div(Math.pow(10,9+n.decimals-t.decimals)).toString(),s),p=c(u[d]).div(Math.pow(10,t.decimals)).toString();l[b]?l[b]={price:b,quantity:c(l[b].quantity).add(p).toString()}:l[b]={price:b,quantity:p}}),Object.values(l)}getLevel2RangeTx(e,t,n,s,i=new w.Transaction){let{baseCoin:o,quoteCoin:a}=e,u=M(c(n).mul(Math.pow(10,9+a.decimals-o.decimals)).toString(),0),l=M(c(s).mul(Math.pow(10,9+a.decimals-o.decimals)).toString(),0);return i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(u),i.pure.u64(l),i.pure.bool(t),i.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[o.coinType,a.coinType]}),i}async fetchOrderBook(e,t,n,s,i,o){let a=new w.Transaction,{baseCoin:u,quoteCoin:l}=e;try{if(t==="bid"||t==="all"){let p=s,f=n==="0"?i:n;a=this.getLevel2RangeTx(e,!0,p,f,a)}if(t==="ask"||t==="all"){let p=n==="0"?s:n,f=i;a=this.getLevel2RangeTx(e,!1,p,f,a)}let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:a}),d=[];(t==="bid"||t==="all")&&(d=g.results?.[0]?this.processOrderBookData(g.results[0],u,l,o):[]);let b=[];if(t==="ask"||t==="all"){let p=t==="ask"?0:1;b=g.results?.[p]?this.processOrderBookData(g.results[p],u,l,o):[]}return{bid:d.sort((p,f)=>f.price-p.price),ask:b.sort((p,f)=>p.price-f.price)}}catch{let g=this._sdk.sdkOptions.simulationAccount.address,d=[],b=[];try{let p=this.getLevel2RangeTx(e,!0,s,n),f=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:p});d=f.results?.[0]?this.processOrderBookData(f.results[0],u,l,o):[]}catch{d=[]}try{let p=this.getLevel2RangeTx(e,!1,s,n),f=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:p});b=f.results?.[0]?this.processOrderBookData(f.results[0],u,l,o):[]}catch{b=[]}return{bid:d,ask:b}}}async getOrderBook(e,t,n){let s={bid:[],ask:[]};try{let i=await this.getMarketPrice(e),o=t,a=Math.pow(10,-n),u=Math.pow(10,n),l=await this.fetchOrderBook(e,o,i,a,u,n);return{bid:l?.bid,ask:l?.ask}}catch{return s}}async getOrderBookOrigin(e,t){try{let n=new w.Transaction,s=await this.getMarketPrice(e),{baseCoin:i,quoteCoin:o}=e;if(t==="bid"||t==="all"){let g=Math.pow(10,-6),d=s,b=c(g).mul(Math.pow(10,9+o.decimals-i.decimals)).toString(),p=c(d).mul(Math.pow(10,9+o.decimals-i.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(b),n.pure.u64(p),n.pure.bool(!0),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,o.coinType]})}if(t==="ask"||t==="all"){let g=s,d=Math.pow(10,6),b=c(g).mul(Math.pow(10,9+o.decimals-i.decimals)).toString(),p=c(d).mul(Math.pow(10,9+o.decimals-i.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(b),n.pure.u64(p),n.pure.bool(!1),n.object(S.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,o.coinType]})}let a=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:a,transactionBlock:n}),l=[];if(t==="bid"||t==="all"){let g=u.results[0]?.returnValues[0]?.[0],d=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(g)),b=u.results[0]?.returnValues[1]?.[0],p=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(b));d.forEach((f,y)=>{let C=c(f).div(Math.pow(10,9+o.decimals-i.decimals)).toString(),_=c(p[y]).div(Math.pow(10,i.decimals)).toString();l.push({price:C,quantity:_})})}let m=[];if(t==="ask"||t==="all"){let g=t==="ask"?0:1,d=u.results[g]?.returnValues[0]?.[0],b=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(d)),p=u.results[g]?.returnValues[1]?.[0],f=h.bcs.vector(h.bcs.u64()).parse(new Uint8Array(p));b.forEach((y,C)=>{let _=c(y).div(Math.pow(10,9+o.decimals-i.decimals)).toString(),k=c(f[C]).div(Math.pow(10,i.decimals)).toString();m.push({price:_,quantity:k})})}return{bid:l,ask:m}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((s,i)=>[(0,S.normalizeStructTag)(s.coinType),s]))}async getAccount(e,t){let n=new w.Transaction;for(let a=0;a<t.length;a++){let u=t[a];n.moveCall({target:"0xade998d24db74df75d96646e1ce7bb996587ce28747b4db600b5ccd82e00cb5a::order_trader::get_account_id",arguments:[n.object(u.address),n.object(e)],typeArguments:[u.baseCoin.coinType,u.quoteCoin.coinType]})}let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:n});console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1808 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ devInspectRes:",JSON.stringify(s,null,2));let i;if(s?.events.length===0)return null;let o=[];return s?.events?.forEach((a,u)=>{i=a?.parsedJson,console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1816 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ eventData:",JSON.stringify(i,null,2));let l=i.account.open_orders.contents,m=i.account.owed_balances,g=i.account.settled_balances,d=i.account.unclaimed_rebates,b=i.account.taker_volume;o.push({balance_manager_id:e,open_orders:l,owed_balances:m,settled_balances:g,unclaimed_rebates:d,taker_volume:b,poolInfo:t[u]})}),o}async getSuiTransactionResponse(e,t=!1){let n=`${e}_getSuiTransactionResponse`,s=this.getCache(n,t);if(s!==void 0)return s;let i;try{i=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{i=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(n,i,I),i}transformExtensions(e,t,n=!0){let s=[];for(let i of t){let{key:o}=i.fields,{value:a}=i.fields;if(o==="labels")try{a=JSON.parse(decodeURIComponent(Be.Base64.decode(a)))}catch{}n&&(e[o]=a),s.push({key:o,value:a})}delete e.extension_fields,n||(e.extensions=s)}async getCoinConfigs(e=!1,t=!0){let n=this.sdk.sdkOptions.coinlist.handle,s=`${n}_getCoinConfigs`,i=this.getCache(s,e);if(i)return i;let a=(await this._sdk.fullClient.getDynamicFieldsByPage(n)).data.map(m=>m.objectId),u=await this._sdk.fullClient.batchGetObjects(a,{showContent:!0}),l=[];return u.forEach(m=>{let g=this.buildCoinConfig(m,t);this.updateCache(`${n}_${g.address}_getCoinConfig`,g,I),l.push({...g})}),this.updateCache(s,l,I),l}buildCoinConfig(e,t=!0){let n=ue(e);n=n.value.fields;let s={...n};return s.id=ce(e),s.address=D(n.coin_type.fields.name).full_address,n.pyth_id&&(s.pyth_id=(0,S.normalizeSuiObjectId)(n.pyth_id)),this.transformExtensions(s,n.extension_fields.fields.contents,t),delete s.coin_type,s}updateCache(e,t,n=se){let s=this._cache[e];s?(s.overdueTime=U(n),s.value=t):s=new q(t,U(n)),this._cache[e]=s}getCache(e,t=!1){let n=this._cache[e],s=n?.isValid();if(!t&&s)return n.value;s||delete this._cache[e]}};var Z=class{_cache={};_rpcModule;_deepbookUtils;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new K({url:e.fullRpcUrl}),this._deepbookUtils=new H(this),W(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get fullClient(){return this._rpcModule}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,n=!0){let s=[],i=null,o=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,a=this.getCache(o,n);if(a)return a;for(;;){let u=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:i}):this.fullClient.getAllCoins({owner:e,cursor:i}));if(u.data.forEach(l=>{BigInt(l.balance)>0&&s.push({coinAddress:D(l.coinType).source_address,coinObjectId:l.coinObjectId,balance:BigInt(l.balance)})}),i=u.nextCursor,!u.hasNextPage)break}return this.updateCache(o,s,30*1e3),s}async getOwnerCoinBalances(e,t){let n=[];return t?n=[await this.fullClient.getBalance({owner:e,coinType:t})]:n=[...await this.fullClient.getAllBalances({owner:e})],n}updateCache(e,t,n=I){let s=this._cache[e];s?(s.overdueTime=U(n),s.value=t):s=new q(t,U(n)),this._cache[e]=s}getCache(e,t=!1){let n=this._cache[e],s=n?.isValid();if(!t&&s)return n.value;s||delete this._cache[e]}};var Ot="0x0000000000000000000000000000000000000000000000000000000000000006",wt="pool_script",Tt="pool_script_v2",xt="router",jt="router_with_partner",Bt="fetcher_script",vt="expect_swap",Dt="utils",Et="0x1::coin::CoinInfo",Mt="0x1::coin::CoinStore",Pt="custodian_v2",Rt="clob_v2",qt="endpoints_v2",It=r=>{if(typeof r=="string"&&r.startsWith("0x"))return"object";if(typeof r=="number"||typeof r=="bigint")return"u64";if(typeof r=="boolean")return"bool";throw new Error(`Unknown type for value: ${r}`)};var Ut=Z;0&&(module.exports={CLOCK_ADDRESS,CachedContent,CetusClmmSDK,ClmmExpectSwapModule,ClmmFetcherModule,ClmmIntegratePoolModule,ClmmIntegratePoolV2Module,ClmmIntegrateRouterModule,ClmmIntegrateRouterWithPartnerModule,ClmmIntegrateUtilsModule,CoinAssist,CoinInfoAddress,CoinStoreAddress,DEEP_SCALAR,DEFAULT_GAS_BUDGET_FOR_MERGE,DEFAULT_GAS_BUDGET_FOR_SPLIT,DEFAULT_GAS_BUDGET_FOR_STAKE,DEFAULT_GAS_BUDGET_FOR_TRANSFER,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,DEFAULT_NFT_TRANSFER_GAS_FEE,DeepbookClobV2Moudle,DeepbookCustodianV2Moudle,DeepbookEndpointsV2Moudle,DeepbookUtilsModule,FLOAT_SCALAR,GAS_SYMBOL,GAS_TYPE_ARG,GAS_TYPE_ARG_LONG,NORMALIZED_SUI_COIN_TYPE,RpcModule,SUI_SYSTEM_STATE_OBJECT_ID,TransactionUtil,addHexPrefix,asIntN,asUintN,bufferToHex,cacheTime24h,cacheTime5min,checkAddress,composeType,d,decimalsMultiplier,extractAddressFromType,extractStructTagFromType,fixCoinType,fixDown,fixSuiObjectId,fromDecimalsAmount,getDefaultSuiInputType,getFutureTime,getMoveObject,getMoveObjectType,getMovePackageContent,getObjectDeletedResponse,getObjectDisplay,getObjectFields,getObjectId,getObjectNotExistsResponse,getObjectOwner,getObjectPreviousTransactionDigest,getObjectReference,getObjectType,getObjectVersion,getSuiObjectData,hasPublicTransfer,hexToNumber,hexToString,isSortedSymbols,isSuiObjectResponse,maxDecimal,normalizeCoinType,patchFixSuiObjectId,printTransaction,removeHexPrefix,secretKeyToEd25519Keypair,secretKeyToSecp256k1Keypair,shortAddress,shortString,toBuffer,toDecimalsAmount,utf8to16});
|
|
1
|
+
"use strict";var Ee=Object.create;var G=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Ie=Object.getPrototypeOf,qe=Object.prototype.hasOwnProperty;var Ue=(r,e,t)=>e in r?G(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Fe=(r,e)=>{for(var t in e)G(r,t,{get:e[t],enumerable:!0})},be=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Re(e))!qe.call(r,n)&&n!==t&&G(r,n,{get:()=>e[n],enumerable:!(s=Pe(e,n))||s.enumerable});return r};var _e=(r,e,t)=>(t=r!=null?Ee(Ie(r)):{},be(e||!r||!r.__esModule?G(t,"default",{value:r,enumerable:!0}):t,r)),Ne=r=>be(G({},"__esModule",{value:!0}),r);var he=(r,e,t)=>(Ue(r,typeof e!="symbol"?e+"":e,t),t);var $t={};Fe($t,{CLOCK_ADDRESS:()=>Tt,CachedContent:()=>N,CetusClmmSDK:()=>Q,ClmmExpectSwapModule:()=>Mt,ClmmFetcherModule:()=>Dt,ClmmIntegratePoolModule:()=>xt,ClmmIntegratePoolV2Module:()=>jt,ClmmIntegrateRouterModule:()=>Bt,ClmmIntegrateRouterWithPartnerModule:()=>vt,ClmmIntegrateUtilsModule:()=>Et,CoinAssist:()=>T,CoinInfoAddress:()=>Pt,CoinStoreAddress:()=>Rt,DEEP_SCALAR:()=>se,DEFAULT_GAS_BUDGET_FOR_MERGE:()=>Ge,DEFAULT_GAS_BUDGET_FOR_SPLIT:()=>Ve,DEFAULT_GAS_BUDGET_FOR_STAKE:()=>Ze,DEFAULT_GAS_BUDGET_FOR_TRANSFER:()=>Ke,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI:()=>He,DEFAULT_NFT_TRANSFER_GAS_FEE:()=>ze,DeepbookClobV2Moudle:()=>qt,DeepbookCustodianV2Moudle:()=>It,DeepbookEndpointsV2Moudle:()=>Ut,DeepbookUtilsModule:()=>Z,FLOAT_SCALAR:()=>D,GAS_SYMBOL:()=>Qe,GAS_TYPE_ARG:()=>W,GAS_TYPE_ARG_LONG:()=>ie,NORMALIZED_SUI_COIN_TYPE:()=>ut,OrderType:()=>Me,RpcModule:()=>H,SUI_SYSTEM_STATE_OBJECT_ID:()=>Je,TransactionUtil:()=>E,addHexPrefix:()=>oe,asIntN:()=>kt,asUintN:()=>yt,bufferToHex:()=>et,cacheTime24h:()=>q,cacheTime5min:()=>re,checkAddress:()=>Xe,composeType:()=>ae,d:()=>a,decimalsMultiplier:()=>ee,default:()=>Nt,extractAddressFromType:()=>at,extractStructTagFromType:()=>M,fixCoinType:()=>ct,fixDown:()=>R,fixSuiObjectId:()=>Ae,fromDecimalsAmount:()=>F,getDefaultSuiInputType:()=>Ft,getFutureTime:()=>$,getMoveObject:()=>ne,getMoveObjectType:()=>je,getMovePackageContent:()=>gt,getObjectDeletedResponse:()=>we,getObjectDisplay:()=>ht,getObjectFields:()=>de,getObjectId:()=>le,getObjectNotExistsResponse:()=>Te,getObjectOwner:()=>_t,getObjectPreviousTransactionDigest:()=>bt,getObjectReference:()=>ue,getObjectType:()=>mt,getObjectVersion:()=>dt,getSuiObjectData:()=>L,hasPublicTransfer:()=>ft,hexToNumber:()=>tt,hexToString:()=>nt,isSortedSymbols:()=>ot,isSuiObjectResponse:()=>xe,maxDecimal:()=>te,normalizeCoinType:()=>J,patchFixSuiObjectId:()=>X,printTransaction:()=>lt,removeHexPrefix:()=>Y,secretKeyToEd25519Keypair:()=>St,secretKeyToSecp256k1Keypair:()=>At,shortAddress:()=>Ye,shortString:()=>fe,toBuffer:()=>Ce,toDecimalsAmount:()=>Ct,utf8to16:()=>ye});module.exports=Ne($t);var re=5*60*1e3,q=24*60*60*1e3;function $(r){return Date.parse(new Date().toString())+r}var N=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};var U=require("@mysten/sui/utils");var $e="0x2::coin::Coin",Le=/^0x2::coin::Coin<(.+)>$/,Ve=1e3,Ge=500,Ke=100,He=100,Ze=1e3,W="0x2::sui::SUI",ie="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Qe="SUI",ze=450,Je="0x0000000000000000000000000000000000000005",T=class{static getCoinTypeArg(e){let t=e.type.match(Le);return t?t[1]:null}static isSUI(e){let t=T.getCoinTypeArg(e);return t?T.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let s=BigInt(0);return e.forEach(n=>{t===n.coinAddress&&(s+=BigInt(n.balance))}),s}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${$e}<${e}>`}static getCoinAssets(e,t){let s=[];return t.forEach(n=>{J(n.coinAddress)===J(e)&&s.push(n)}),s}static isSuiCoin(e){return M(e).full_address===W}static selectCoinObjectIdGreaterThanOrEqual(e,t,s=[]){let n=T.selectCoinAssetGreaterThanOrEqual(e,t,s),i=n.selectedCoins.map(u=>u.coinObjectId),o=n.remainingCoins,c=n.selectedCoins.map(u=>u.balance.toString());return{objectArray:i,remainCoins:o,amountArray:c}}static selectCoinAssetGreaterThanOrEqual(e,t,s=[]){let n=T.sortByBalance(e.filter(l=>!s.includes(l.coinObjectId))),i=T.calculateTotalBalance(n);if(i<t)return{selectedCoins:[],remainingCoins:n};if(i===t)return{selectedCoins:n,remainingCoins:[]};let o=BigInt(0),c=[],u=[...n];for(;o<i;){let l=t-o,m=u.findIndex(d=>d.balance>=l);if(m!==-1){c.push(u[m]),u.splice(m,1);break}let g=u.pop();g.balance>0&&(c.push(g),o+=g.balance)}return{selectedCoins:T.sortByBalance(c),remainingCoins:T.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,s)=>t.balance<s.balance?-1:t.balance>s.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,s)=>t.balance>s.balance?-1:t.balance<s.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,s)=>t+s.balance,BigInt(0))}};var We=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function oe(r){return r.startsWith("0x")?r:`0x${r}`}function Y(r){return r.startsWith("0x")?`${r.slice(2)}`:r}function fe(r,e=4,t=4){let s=Math.max(e,1),n=Math.max(t,1);return`${r.slice(0,s+2)} ... ${r.slice(-n)}`}function Ye(r,e=4,t=4){return fe(oe(r),e,t)}function Xe(r,e={leadingZero:!0}){if(typeof r!="string")return!1;let t=r;if(e.leadingZero){if(!r.startsWith("0x"))return!1;t=t.substring(2)}return We.test(t)}function Ce(r){if(!Buffer.isBuffer(r))if(Array.isArray(r))r=Buffer.from(r);else if(typeof r=="string")exports.isHexString(r)?r=Buffer.from(exports.padToEven(exports.stripHexPrefix(r)),"hex"):r=Buffer.from(r);else if(typeof r=="number")r=exports.intToBuffer(r);else if(r==null)r=Buffer.allocUnsafe(0);else if(r.toArray)r=Buffer.from(r.toArray());else throw new Error("invalid type");return r}function et(r){return oe(Ce(r).toString("hex"))}function tt(r){let e=new ArrayBuffer(4),t=new DataView(e);for(let n=0;n<r.length;n++)t.setUint8(n,r.charCodeAt(n));return t.getUint32(0,!0)}function ye(r){let e,t,s,n,i;e="";let o=r.length;for(t=0;t<o;)switch(s=r.charCodeAt(t++),s>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=r.charAt(t-1);break;case 12:case 13:n=r.charCodeAt(t++),e+=String.fromCharCode((s&31)<<6|n&63);break;case 14:n=r.charCodeAt(t++),i=r.charCodeAt(t++),e+=String.fromCharCode((s&15)<<12|(n&63)<<6|(i&63)<<0);break}return e}function nt(r){let e="",t=Y(r),s=t.length/2;for(let n=0;n<s;n++)e+=String.fromCharCode(parseInt(t.substr(n*2,2),16));return ye(e)}var st=0,Se=1,rt=2;function ke(r,e){return r===e?st:r<e?Se:rt}function it(r,e){let t=0,s=r.length<=e.length?r.length:e.length,n=ke(r.length,e.length);for(;t<s;){let i=ke(r.charCodeAt(t),e.charCodeAt(t));if(t+=1,i!==0)return i}return n}function ot(r,e){return it(r,e)===Se}function ae(r,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],n=[r,...e].filter(Boolean).join("::");return t&&t.length&&(n+=`<${t.join(", ")}>`),n}function at(r){return r.split("::")[0]}function M(r){try{let e=r.replace(/\s/g,""),s=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(s){e=e.slice(0,e.indexOf("<"));let u={...M(e),type_arguments:s.map(l=>M(l).source_address)};return u.type_arguments=u.type_arguments.map(l=>T.isSuiCoin(l)?l:M(l).source_address),u.source_address=ae(u.full_address,u.type_arguments),u}let n=e.split("::"),o={full_address:e,address:e===W||e===ie?"0x2":(0,U.normalizeSuiObjectId)(n[0]),module:n[1],name:n[2],type_arguments:[],source_address:""};return o.full_address=`${o.address}::${o.module}::${o.name}`,o.source_address=ae(o.full_address,o.type_arguments),o}catch{return{full_address:r,address:"",module:"",name:"",type_arguments:[],source_address:r}}}function J(r){return M(r).source_address}function Ae(r){return r.toLowerCase().startsWith("0x")?(0,U.normalizeSuiObjectId)(r):r}var ct=(r,e=!0)=>{let t=r.split("::"),s=t.shift(),n=(0,U.normalizeSuiObjectId)(s);return e&&(n=Y(n)),`${n}::${t.join("::")}`};function X(r){for(let e in r){let t=typeof r[e];if(t==="object")X(r[e]);else if(t==="string"){let s=r[e];r[e]=Ae(s)}}}var ut=(0,U.normalizeStructTag)(U.SUI_TYPE_ARG);var ce=_e(require("decimal.js"));ce.default.config({precision:64,rounding:ce.default.ROUND_DOWN,toExpNeg:-64,toExpPos:64});var K=_e(require("decimal.js"));function a(r){return K.default.isDecimal(r)?r:new K.default(r===void 0?0:r)}function ee(r){return a(10).pow(a(r).abs())}var R=(r,e)=>{try{return a(r).toDP(e,K.default.ROUND_DOWN).toString()}catch{return r}},te=(r,e)=>K.default.max(a(r),a(e));var Oe=require("@mysten/sui/transactions");async function lt(r,e=!0){r.blockData.transactions.forEach((t,s)=>{})}var I=class{static async adjustTransactionForGas(e,t,s,n){n.setSender(e.senderAddress);let i=T.selectCoinAssetGreaterThanOrEqual(t,s).selectedCoins;if(i.length===0)throw new Error("Insufficient balance");let o=T.calculateTotalBalance(t);if(o-s>1e9)return{fixAmount:s};let c=await e.fullClient.calculationTxGas(n);if(T.selectCoinAssetGreaterThanOrEqual(t,BigInt(c),i.map(l=>l.coinObjectId)).selectedCoins.length===0){let l=BigInt(c)+BigInt(500);if(o-s<l){if(s-=l,s<0)throw new Error("gas Insufficient balance");let m=new Oe.Transaction;return{fixAmount:s,newTx:m}}}return{fixAmount:s}}static buildCoinForAmount(e,t,s,n,i=!0,o=!1){let c=T.getCoinAssets(n,t);if(s===BigInt(0)&&c.length===0)return I.buildZeroValueCoin(t,e,n,i);let u=T.calculateTotalBalance(c);if(u<s)throw new Error(`The amount(${u}) is Insufficient balance for ${n} , expect ${s} `);return I.buildCoin(e,t,c,s,n,i,o)}static buildCoin(e,t,s,n,i,o=!0,c=!1){if(T.isSuiCoin(i)){if(o){let b=e.splitCoins(e.gas,[e.pure.u64(n)]);return{targetCoin:e.makeMoveVec({elements:[b]}),remainCoins:t,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(n===0n&&s.length>1){let b=T.selectCoinObjectIdGreaterThanOrEqual(s,n);return{targetCoin:e.object(b.objectArray[0]),remainCoins:b.remainCoins,tragetCoinAmount:b.amountArray[0],isMintZeroCoin:!1}}let C=T.selectCoinObjectIdGreaterThanOrEqual(s,n);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(n)]),remainCoins:C.remainCoins,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let u=T.selectCoinObjectIdGreaterThanOrEqual(s,n),l=u.amountArray.reduce((C,y)=>Number(C)+Number(y),0).toString(),m=u.objectArray;if(o)return{targetCoin:e.makeMoveVec({elements:m.map(C=>e.object(C))}),remainCoins:u.remainCoins,tragetCoinAmount:u.amountArray.reduce((C,y)=>Number(C)+Number(y),0).toString(),isMintZeroCoin:!1};let[g,...d]=m,p=e.object(g),h=p,_=u.amountArray.reduce((C,y)=>Number(C)+Number(y),0).toString(),S;return d.length>0&&e.mergeCoins(p,d.map(C=>e.object(C))),c&&Number(l)>Number(n)&&(h=e.splitCoins(p,[e.pure.u64(n)]),_=n.toString(),S=p),{targetCoin:h,remainCoins:u.remainCoins,originalSplitedCoin:S,tragetCoinAmount:_,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,s,n=!0){let i=I.callMintZeroValueCoin(t,s),o;return n?o=t.makeMoveVec({elements:[i]}):o=i,{targetCoin:o,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,s,n,i=!0){let o=T.getCoinAssets(n,t);if(s.amountFirst===BigInt(0))return o.length>0?I.buildCoin(e,[...t],[...o],s.amountFirst,n,i):I.buildZeroValueCoin(t,e,n,i);let c=T.calculateTotalBalance(o);if(c>=s.amountFirst)return I.buildCoin(e,[...t],[...o],s.amountFirst,n,i);if(c<s.amountSecond)throw new Error(`The amount(${c}) is Insufficient balance for ${n} , expect ${s.amountSecond} `);return I.buildCoin(e,[...t],[...o],s.amountSecond,n,i)}static buildCoinTypePair(e,t){let s=[];if(e.length===2){let n=[];n.push(e[0],e[1]),s.push(n)}else{let n=[];n.push(e[0],e[e.length-1]),s.push(n);for(let i=1;i<e.length-1;i+=1){if(t[i-1]===0)continue;let o=[];o.push(e[0],e[i],e[e.length-1]),s.push(o)}}return s}},E=I;he(E,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));function L(r){return r.data}function we(r){if(r.error&&"object_id"in r.error&&"version"in r.error&&"digest"in r.error){let{error:e}=r;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Te(r){if(r.error&&"object_id"in r.error&&!("version"in r.error)&&!("digest"in r.error))return r.error.object_id}function ue(r){if("reference"in r)return r.reference;let e=L(r);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:we(r)}function le(r){return"objectId"in r?r.objectId:ue(r)?.objectId??Te(r)}function dt(r){return"version"in r?r.version:ue(r)?.version}function xe(r){return r.data!==void 0}function pt(r){return r.content!==void 0}function gt(r){let e=L(r);if(e?.content?.dataType==="package")return e.content.disassembled}function ne(r){let e="data"in r?L(r):r;if(!(!e||!pt(e)||e.content.dataType!=="moveObject"))return e.content}function je(r){return ne(r)?.type}function mt(r){let e=xe(r)?r.data:r;return!e?.type&&"data"in r?e?.content?.dataType==="package"?"package":je(r):e?.type}function bt(r){return L(r)?.previousTransaction}function _t(r){return L(r)?.owner}function ht(r){let e=L(r)?.display;return e||{data:null,error:null}}function de(r){let e=ne(r)?.fields;if(e)return"fields"in e?e.fields:e}function ft(r){return ne(r)?.hasPublicTransfer??!1}var V=require("@mysten/bcs"),pe=require("@mysten/sui/keypairs/ed25519"),ge=require("@mysten/sui/keypairs/secp256k1");function Ct(r,e){let t=ee(a(e));return Number(a(r).mul(t))}function yt(r,e=32){return BigInt.asUintN(e,BigInt(r)).toString()}function kt(r,e=32){return Number(BigInt.asIntN(e,BigInt(r)))}function F(r,e){let t=ee(a(e));return Number(a(r).div(t))}function St(r,e="hex"){if(r instanceof Uint8Array){let s=Buffer.from(r);return pe.Ed25519Keypair.fromSecretKey(s)}let t=e==="hex"?(0,V.fromHEX)(r):(0,V.fromB64)(r);return pe.Ed25519Keypair.fromSecretKey(t)}function At(r,e="hex"){if(r instanceof Uint8Array){let s=Buffer.from(r);return ge.Secp256k1Keypair.fromSecretKey(s)}let t=e==="hex"?(0,V.fromHEX)(r):(0,V.fromB64)(r);return ge.Secp256k1Keypair.fromSecretKey(t)}var Be=require("@mysten/sui/client"),H=class extends Be.SuiClient{async queryEventsByPage(e,t="all"){let s=[],n=!0,i=t==="all",o=i?null:t.cursor;do{let c=await this.queryEvents({query:e,cursor:o,limit:i?null:t.limit});c.data?(s=[...s,...c.data],n=c.hasNextPage,o=c.nextCursor):n=!1}while(i&&n);return{data:s,nextCursor:o,hasNextPage:n}}async getOwnedObjectsByPage(e,t,s="all"){let n=[],i=!0,o=s==="all",c=o?null:s.cursor;do{let u=await this.getOwnedObjects({owner:e,...t,cursor:c,limit:o?null:s.limit});u.data?(n=[...n,...u.data],i=u.hasNextPage,c=u.nextCursor):i=!1}while(o&&i);return{data:n,nextCursor:c,hasNextPage:i}}async getDynamicFieldsByPage(e,t="all"){let s=[],n=!0,i=t==="all",o=i?null:t.cursor;do{let c=await this.getDynamicFields({parentId:e,cursor:o,limit:i?null:t.limit});c.data?(s=[...s,...c.data],n=c.hasNextPage,o=c.nextCursor):n=!1}while(i&&n);return{data:s,nextCursor:o,hasNextPage:n}}async batchGetObjects(e,t,s=50){let n=[];try{for(let i=0;i<Math.ceil(e.length/s);i++){let o=await this.multiGetObjects({ids:e.slice(i*s,s*(i+1)),options:t});n=[...n,...o]}}catch{}return n}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let s=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:n}=s.effects;return Number(n.computationCost)+Number(n.storageCost)-Number(n.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};var me=require("@mysten/deepbook-v3"),f=require("@mysten/sui/bcs"),De=require("js-base64"),O=require("@mysten/sui/transactions"),w=require("@mysten/sui/utils");function v(...r){let e="DeepbookV3_Utils_Sdk###"}var se=1e6,D=1e9,Ot={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},wt={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},ve=1e3*60*60*24*365*100,Z=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?wt:Ot}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new O.Transaction,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}async getBalanceManager(e,t=!0){let s=`getBalanceManager_${e}`,n=this.getCache(s,t);if(!t&&n!==void 0)return n;let i=new O.Transaction;i.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[i.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),i.pure.address(e)],typeArguments:[]});let u=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i}))?.events?.filter(m=>m.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],l=[];return u.forEach(m=>{l.push({balanceManager:m,cetusBalanceManager:""})}),this.updateCache(s,l,q),l||[]}createAndDepsit({account:e,coin:t,amountToDeposit:s}){let n=new O.Transaction;n.setSenderIfNotSet(e);let i=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),o=(0,O.coinWithBalance)({type:t.coinType,balance:BigInt(s)});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[i,o],typeArguments:[t.coinType]}),n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),i],typeArguments:[]}),n.moveCall({target:"0x2::transfer::public_share_object",arguments:[i],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),n}depositIntoManager({account:e,balanceManager:t,coin:s,amountToDeposit:n,tx:i}){let o=i||new O.Transaction;if(t){o.setSenderIfNotSet(e);let c=(0,O.coinWithBalance)({type:s.coinType,balance:BigInt(n)});return o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[o.object(t),c],typeArguments:[s.coinType]}),o}return null}withdrawFromManager({account:e,balanceManager:t,coin:s,amountToWithdraw:n,returnAssets:i,txb:o}){let c=o||new O.Transaction,u=c.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[c.object(t),c.pure.u64(n)],typeArguments:[s.coinType]});return i?u:(c.transferObjects([u],e),c)}withdrawManagersFreeBalance({account:e,balanceManagers:t,tx:s=new O.Transaction}){for(let n in t)t[n].forEach(o=>{let c=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::withdraw`,arguments:[s.object(n),s.pure.u64(o.amount)],typeArguments:[o.coinType]});s.transferObjects([c],e)});return s}withdrawSettledAmounts({poolInfo:e,balanceManager:t}){let s=new O.Transaction,n=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[s.object(t)]});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[s.object(e.address),s.object(t),n],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),s}async getManagerBalance({account:e,balanceManager:t,coins:s}){let n=new O.Transaction;s.forEach(c=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[n.object(t)],typeArguments:[c.coinType]})});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n}),o={};return i.results?.forEach((c,u)=>{let l=s[u],m=c.returnValues[0][0],g=f.bcs.U64.parse(new Uint8Array(m)),d=a(g),p=d.eq(0)?"0":d.div(Math.pow(10,l.decimals)).toString();o[l.coinType]={adjusted_balance:p,balance:d.toString()}}),o}async getAccountAllManagerBalance({account:e,coins:t}){let s=new O.Transaction,n=await this.getBalanceManager(e,!0);n.forEach(c=>{t.forEach(u=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[s.object(c.balanceManager)],typeArguments:[u.coinType]})})});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}),o={};return n.forEach((c,u)=>{let l={},m=u*t.length;t.forEach((g,d)=>{let p=m+d,h=i.results?.[p];if(h){let _=h.returnValues[0][0],S=f.bcs.U64.parse(new Uint8Array(_)),C=a(S),y=C.eq(0)?"0":C.div(Math.pow(10,g.decimals)).toString();l[g.coinType]={adjusted_balance:y,balance:C.toString()}}}),o[c.balanceManager]=l}),o}async getMarketPrice(e){try{let t=new O.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],i=Number(f.bcs.U64.parse(new Uint8Array(n))),o=Math.pow(10,e.baseCoin.decimals).toString(),c=Math.pow(10,e.quoteCoin.decimals).toString();return a(i).mul(o).div(c).div(D).toString()}catch(t){return v("getMarketPrice ~ error:",t),"0"}}async getPools(){let e=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),t=/<([^>]+)>/,s=[];return e?.data?.forEach(n=>{let i=n?.parsedJson,o=n.type.match(t);if(o){let u=o[1].split(", ");s.push({...i,baseCoinType:u[0],quoteCoinType:u[1]})}}),s}async getQuoteQuantityOut(e,t,s){let n=new O.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=String(f.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),c=String(f.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),u=String(f.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{baseQuantityDisplay:a(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:a(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(c).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(u).div(se).toString(),baseQuantity:t,baseOut:o,quoteOut:c,deepRequired:u}}async getBaseQuantityOut(e,t,s){let n=new O.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=String(f.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),c=String(f.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),u=String(f.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{quoteQuantityDisplay:a(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:a(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(c).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(u).div(se).toString(),quoteQuantity:t,baseOut:o,quoteOut:c,deepRequired:u}}async getQuantityOut(e,t,s,n){let i=new O.Transaction;i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[i.object(e.address),i.pure.u64(t),i.pure.u64(s),i.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:i}),c=Number(f.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[0][0]))),u=Number(f.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[1][0]))),l=Number(f.bcs.U64.parse(new Uint8Array(o.results[0].returnValues[2][0])));return{baseQuantityDisplay:a(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:a(s).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:a(c).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(u).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(l).div(se).toString(),baseQuantity:t,quoteQuantity:s,baseOut:c,quoteOut:u,deepRequired:l}}async estimatedMaxFee(e,t,s,n,i,o,c){let u=this.deepCoin,{taker_fee:l,maker_fee:m}=e,g=a(l).div(D).toString(),d=a(m).div(D).toString(),p=await this.getMarketPrice(e),h=o?s:p!=="0"?p:c;if(h==="0")throw new Error("Cannot get market price");let _=Math.pow(10,e.baseCoin.decimals).toString(),S=Math.pow(10,e.quoteCoin.decimals).toString(),C=a(h).div(_).mul(S).mul(D).toString();if(n){let y=await this.getMarketPrice(e),A=a(o?s:y!=="0"?y:c).div(_).mul(S).mul(D).toString(),B=await this.getOrderDeepPrice(e);if(!B)throw new Error("Cannot get deep price");let k=te(A,s),x=a(t).mul(a(g)).mul(a(B.deep_per_asset)).div(a(D)),j=a(t).mul(a(d)).mul(a(B.deep_per_asset)).div(a(D));B.asset_is_base||(x=x.mul(k).div(a(D)),j=j.mul(k).div(a(D)));let z=x.ceil().toString(),P=j.ceil().toString();return{takerFee:z,makerFee:P,takerFeeDisplay:F(z,u.decimals).toString(),makerFeeDisplay:F(P,u.decimals).toString(),feeType:u.coinType}}else if(i){let y=te(C,s),b=a(t).mul(y).mul(g).div(a(D)).ceil().toFixed(0),A=a(t).mul(y).mul(d).div(a(D)).ceil().toFixed(0);return{takerFee:b,makerFee:A,takerFeeDisplay:F(b,e.quoteCoin.decimals).toString(),makerFeeDisplay:F(A,e.quoteCoin.decimals).toString(),feeType:e.quoteCoin.coinType}}else{let y=a(t).mul(a(g).mul(1.25)).ceil().toFixed(0),b=a(t).mul(a(d).mul(1.25)).ceil().toFixed(0);return{takerFee:y,makerFee:b,takerFeeDisplay:F(y,e.baseCoin.decimals).toString(),makerFeeDisplay:F(b,e.baseCoin.decimals).toString(),feeType:e.baseCoin.coinType}}}async getOrderDeepPrice(e){try{let t=new O.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[t.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0];return this.parseOrderDeepPrice(new Uint8Array(n))}catch(t){return v("getMarketPrice ~ error:",t),null}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),s=t.getUint8(0)!==0,n=Number(t.getBigUint64(1,!0));return{asset_is_base:s,deep_per_asset:n}}getCoinAssets(e,t,s,n){return E.buildCoinForAmount(n,s,BigInt(a(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,s,n,i,o,c){let u=this.deepCoin;if(!c)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};let l=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];n&&l.push(u);let m=await this.getManagerBalance({account:i,balanceManager:c,coins:l}),g=m?.[t]?.balance||"0",d=m?.[s]?.balance||"0",p=o&&m?.[u.coinType]?.balance||"0";return{baseManagerBlance:g,quoteManagerBlance:d,feeManaerBalance:p}}getFeeAsset(e,t,s,n,i,o,c,u,l,m){let g=a(e).gt(0)&&l,d="0";if(!g)return{feeAsset:this.getEmptyCoin(m,t),haveDepositFee:"0"};if(o||c){let p=a(i).sub(o?n:s);d=p.lte(0)?e:p.sub(e).lt(0)?p.sub(e).toString():"0"}else d=a(i).sub(e).lt("0")?a(i).sub(e).abs().toString():"0";return{feeAsset:a(d).gt("0")?this.getCoinAssets(t,d,u,m):this.getEmptyCoin(m,t),haveDepositFee:d}}async getTransactionRelatedAssets(e,t,s,n,i,o,c,u,l){let m=this.deepCoin,g=(0,w.normalizeStructTag)(e.baseCoin.coinType),d=(0,w.normalizeStructTag)(e.quoteCoin.coinType),p=g===m.coinType,h=d===m.coinType,_=!p&&!h,{baseManagerBlance:S,quoteManagerBlance:C,feeManaerBalance:y}=await this.getTransactionRelatedBalance(e,g,d,_,o,c,u),b,A,B=!1,k=await this._sdk.getOwnerCoinAssets(o);if(i){c||(s=a(s).add(a(n)).toString());let j=a(C).sub(s).toString();a(j).lt(0)?(B=!0,A=this.getCoinAssets(d,j,k,l)):A=this.getEmptyCoin(l,d),b=this.getEmptyCoin(l,g)}else{c||(t=a(t).add(a(n)).toString());let j=a(S).sub(t).toString();a(j).lt(0)?(B=!0,b=this.getCoinAssets(g,j,k,l)):b=this.getEmptyCoin(l,g),A=this.getEmptyCoin(l,d)}let x=this.getFeeAsset(n,m.coinType,t,s,y,h,p,k,c,l);return{baseAsset:b,quoteAsset:A,feeAsset:x,haveDeposit:B}}async getMarketTransactionRelatedAssets(e,t,s,n,i,o,c,u,l){let m=this.deepCoin,g=(0,w.normalizeStructTag)(e.baseCoin.coinType),d=(0,w.normalizeStructTag)(e.quoteCoin.coinType),p=g===m.coinType,h=d===m.coinType,_=!p&&!h,{baseManagerBlance:S,quoteManagerBlance:C}=await this.getTransactionRelatedBalance(e,g,d,_,o,c,u),y,b,A=await this._sdk.getOwnerCoinAssets(o);if(i){c||(s=a(s).add(a(n)).toString());let k=a(C).sub(s).toString();if(a(k).lt(0)){let x;a(C).gt(0)&&(x=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:C,returnAssets:!0,txb:l}));let j=this.getCoinAssets(d,k,A,l);x&&l.mergeCoins(j,[x]),b=j}else b=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:s,returnAssets:!0,txb:l});y=this.getEmptyCoin(l,g)}else{c||(t=a(t).add(a(n)).toString());let k=a(S).sub(t).toString();if(a(k).lt(0)){let x;a(S).gt(0)&&(x=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:S,returnAssets:!0,txb:l}));let j=this.getCoinAssets(g,k,A,l);x&&l.mergeCoins(j,[x]),y=j}else y=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:l});b=this.getEmptyCoin(l,d)}let B=this.getEmptyCoin(l,m.coinType);return{baseAsset:y,quoteAsset:b,feeAsset:B}}async createDepositThenPlaceLimitOrder({poolInfo:e,priceInput:t,quantity:s,orderType:n,isBid:i,maxFee:o,account:c,payWithDeep:u,expirationTimestamp:l=Date.now()+ve}){let m=this.deepCoin,g=e.address,d=e.baseCoin.decimals,p=e.quoteCoin.decimals,h=e.baseCoin.coinType,_=e.quoteCoin.coinType,S=a(t).mul(10**(p-d+9)).toString(),C=(0,w.normalizeStructTag)(h),y=(0,w.normalizeStructTag)(_),b=new O.Transaction,A,B,k=await this._sdk.getOwnerCoinAssets(c);if(i){let P=a(t).mul(a(s).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();u||(P=a(P).add(a(o)).toString()),B=E.buildCoinForAmount(b,k,BigInt(P),y,!1,!0)?.targetCoin}else{let P=s;u||(P=a(s).abs().add(a(o)).toString()),A=E.buildCoinForAmount(b,k,BigInt(a(P).abs().toString()),C,!1,!0)?.targetCoin}let x=u?a(o).gt(0)?E.buildCoinForAmount(b,k,BigInt(a(o).abs().ceil().toString()),m.coinType,!1,!0).targetCoin:this.getEmptyCoin(b,m.coinType):this.getEmptyCoin(b,m.coinType),j=b.moveCall({typeArguments:[i?h:_],target:"0x2::coin::zero",arguments:[]}),z=[b.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),b.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),b.object(g),i?j:A,i?B:j,x,b.pure.u8(n),b.pure.u8(0),b.pure.u64(S),b.pure.u64(s),b.pure.bool(i),b.pure.bool(!1),b.pure.u64(l),b.object(w.SUI_CLOCK_OBJECT_ID)];return b.moveCall({typeArguments:[C,y],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:z}),b}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder({poolInfo:e,quantity:t,isBid:s,maxFee:n,account:i,payWithDeep:o,slippage:c=.01}){let u=e.address,l=e.baseCoin.coinType,m=e.quoteCoin.coinType,g=(0,w.normalizeStructTag)(l),d=(0,w.normalizeStructTag)(m),p=new O.Transaction,h,_,S=t,C,y=await this.getOrderBook(e,"all",6);if(s){let k=y?.ask?.[0]?.price||"0",x=a(k).mul(a(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();C=a(x).plus(a(x).mul(c)).ceil().toString()}else{let k=await y?.bid?.[0]?.price||"0",x=a(k).mul(a(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();C=a(x).minus(a(x).mul(c)).floor().toString()}let b=await this._sdk.getOwnerCoinAssets(i);s?(o||(C=a(C).add(a(n)).toString()),_=this.getCoinAssets(d,C,b,p),h=this.getEmptyCoin(p,g)):(o||(S=a(S).add(a(n)).toString()),_=this.getEmptyCoin(p,d),h=this.getCoinAssets(g,S,b,p));let A=o?a(n).gt(0)?E.buildCoinForAmount(p,b,BigInt(a(n).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(p,this.deepCoin.coinType):this.getEmptyCoin(p,this.deepCoin.coinType),B=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(u),h,_,A,p.pure.u8(0),p.pure.u64(t),p.pure.bool(s),p.pure.bool(o),p.pure.u64(C),p.object(w.SUI_CLOCK_OBJECT_ID)];return p.moveCall({typeArguments:[g,d],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:B}),p}async placeLimitOrder({balanceManager:e,poolInfo:t,priceInput:s,quantity:n,isBid:i,orderType:o,maxFee:c,account:u,payWithDeep:l,expirationTimestamp:m=Date.now()+ve}){let g=this.deepCoin,d=a(s).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),p=t.baseCoin.coinType,h=t.quoteCoin.coinType,_=new O.Transaction,S=i?a(s).mul(a(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",C=i?"0":n,{baseAsset:y,quoteAsset:b,feeAsset:A,haveDeposit:B}=await this.getTransactionRelatedAssets(t,C,S,c,i,u,l,e,_);if(B){v("placeLimitOrder~ deposit_then_place_limit_order_by_owner have deposit"),v("placeLimitOrder ~ deposit_then_place_limit_order_by_owner args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,baseAsset:y,quoteAsset:b,feeAsset:A.feeAsset,order_type:0,self_matching_option:0,price:d,quantity:n,is_bid:i,expirationTimestamp:m,SUI_CLOCK_OBJECT_ID:w.SUI_CLOCK_OBJECT_ID});let k=[_.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),_.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),_.object(t.address),_.object(e),y,b,A.feeAsset,_.pure.u8(o),_.pure.u8(0),_.pure.u64(d),_.pure.u64(n),_.pure.bool(i),_.pure.bool(l),_.pure.u64(m),_.object(w.SUI_CLOCK_OBJECT_ID)];return _.moveCall({typeArguments:[p,h],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:k}),_}else{let k=new O.Transaction;a(A.haveDepositFee).gt(0)&&this.depositIntoManager({account:u,balanceManager:e,coin:g,amountToDeposit:A.haveDepositFee,tx:k}),v("placeLimitOrder~ not have deposit"),v("placeLimitOrder ~ args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,order_type:0,self_matching_option:0,price:d,quantity:n,is_bid:i,pay_with_deep:!0,expirationTimestamp:m,SUI_CLOCK_OBJECT_ID:w.SUI_CLOCK_OBJECT_ID});let x=[k.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),k.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),k.object(t.address),k.object(e),k.pure.u8(o),k.pure.u8(0),k.pure.u64(d),k.pure.u64(n),k.pure.bool(i),k.pure.bool(l),k.pure.u64(m),k.object(w.SUI_CLOCK_OBJECT_ID)];return k.moveCall({typeArguments:[p,h],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:x}),k}}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:s}=e,n=new O.Transaction,i=await this.getMarketPrice(e),o=a(i).gt(0)?i:Math.pow(10,-1),c=Math.pow(10,6),u=a(o).mul(Math.pow(10,9+s.decimals-t.decimals)).toString(),l=a(c).mul(Math.pow(10,9+s.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(u),n.pure.u64(l),n.pure.bool(!1),n.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,s.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:n}),d=[],p=g.results[0].returnValues[0][0],h=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(p)),_=g.results[0].returnValues[1][0],S=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(_));return h.forEach((C,y)=>{let b=a(C).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),A=a(S[y]).div(Math.pow(10,t.decimals)).toString();d.push({price:b,quantity:A})}),d?.[0]?.price||0}catch(t){return v("getBestAskprice ~ error:",t),0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:s}=e,n=new O.Transaction,i=await this.getMarketPrice(e),o=a(i).gt(0)?a(i).div(3).toNumber():Math.pow(10,-6),c=a(i).gt(0)?i:Math.pow(10,6),u=a(o).mul(Math.pow(10,9+s.decimals-t.decimals)).toString(),l=a(c).mul(Math.pow(10,9+s.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(R(u,0)),n.pure.u64(R(l,0)),n.pure.bool(!0),n.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,s.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:n}),d=[],p=g.results[0].returnValues[0][0],h=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(p)),_=g.results[0].returnValues[1][0],S=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(_));return h.forEach((C,y)=>{let b=a(C).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),A=a(S[y]).div(Math.pow(10,t.decimals)).toString();d.push({price:b,quantity:A})}),d?.[0]?.price||0}catch(t){return v("getBestBidprice ~ error:",t),0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:s,quoteCoin:n}=e,i=new O.Transaction,o=await this.getMarketPrice(e),c,u;t?(c=a(o).gt(0)?a(o).div(3).toNumber():Math.pow(10,-6),u=a(o).gt(0)?o:Math.pow(10,6)):(c=a(o).gt(0)?o:Math.pow(10,-1),u=a(o).gt(0)?a(o).mul(3).toNumber():Math.pow(10,6));let l=a(c).mul(Math.pow(10,9+n.decimals-s.decimals)).toString(),m=a(u).mul(Math.pow(10,9+n.decimals-s.decimals)).toString();i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(R(l,0)),i.pure.u64(R(m,0)),i.pure.bool(t),i.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.coinType,n.coinType]});let g=this._sdk.sdkOptions.simulationAccount.address,d=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:i}),p=[],h=d.results[0].returnValues[0][0],_=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(h)),S=d.results[0].returnValues[1][0],C=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(S));return _.forEach((y,b)=>{let A=a(y).div(Math.pow(10,9+n.decimals-s.decimals)).toString(),B=a(C[b]).div(Math.pow(10,s.decimals)).toString();p.push({price:A,quantity:B})}),p?.[0]?.price||0}catch(s){return v("getBestBidprice ~ error:",s),0}}async placeMarketOrder({balanceManager:e,poolInfo:t,baseQuantity:s,quoteQuantity:n,isBid:i,maxFee:o,account:c,payWithDeep:u,slippage:l=.01}){let m=(0,w.normalizeStructTag)(t.baseCoin.coinType),g=(0,w.normalizeStructTag)(t.quoteCoin.coinType),d=new O.Transaction,{baseAsset:p,quoteAsset:h,feeAsset:_}=await this.getMarketTransactionRelatedAssets(t,s,n,o,i,c,u,e,d),S=await this.getOrderBook(t,"all",6);if(i){let b=S?.ask?.[0]?.price||"0",A=a(b).mul(a(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=a(A).plus(a(A).mul(l)).ceil().toString()}else{let b=await S?.bid?.[0]?.price||"0",A=a(b).mul(a(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=a(A).minus(a(A).mul(l)).floor().toString()}let C=n;console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:1450 ~ DeepbookUtilsModule ~ placeMarketOrder ~ amountLimit:",{amountLimit:C,quoteQuantity:n});let y=[d.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),d.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),d.object(t.address),d.object(e),p,h,_,d.pure.u8(0),d.pure.u64(s),d.pure.bool(i),d.pure.bool(u),d.pure.u64(C),d.object(w.SUI_CLOCK_OBJECT_ID)];return d.setSenderIfNotSet(c),d.moveCall({typeArguments:[m,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:y}),d}async getOpenOrderFromDeepbook(e,t){let s=this._sdk.fullClient,n=new me.DeepBookClient({client:s,address:e,env:"testnet",balanceManagers:{test1:{address:t,tradeCap:""}}}),i=await n.accountOpenOrders("DEEP_SUI","test1"),o=await n.getOrder("DEEP_SUI","1844674407389401905673709551611")}async getOrderInfoList(e,t,s){try{let n=new O.Transaction;t.forEach(m=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[n.object(e.address),n.pure.u128(m)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]})});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=f.bcs.struct("ID",{bytes:f.bcs.Address}),c=f.bcs.struct("OrderDeepPrice",{asset_is_base:f.bcs.bool(),deep_per_asset:f.bcs.u64()}),u=f.bcs.struct("Order",{balance_manager_id:o,order_id:f.bcs.u128(),client_order_id:f.bcs.u64(),quantity:f.bcs.u64(),filled_quantity:f.bcs.u64(),fee_is_deep:f.bcs.bool(),order_deep_price:c,epoch:f.bcs.u64(),status:f.bcs.u8(),expire_timestamp:f.bcs.u64()}),l=[];return i?.results?.forEach(m=>{let g=m.returnValues[0][0],d=u.parse(new Uint8Array(g));l.push(d)}),l}catch(n){return v("getOrderInfoList ~ error:",n),[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),s=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),n=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:s,orderId:n}}async getOpenOrder(e,t,s,n){let i;if(n)i=n;else{let u=new O.Transaction;u.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[u.object(e.address),u.object(s)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let m=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:u})).results[0].returnValues[0][0];i=f.bcs.struct("VecSet",{constants:f.bcs.vector(f.bcs.U128)}).parse(new Uint8Array(m)).constants,v("getOpenOrder ~ orderIds:",i)}let o=await this.getOrderInfoList(e,i,t)||[];v("getOpenOrder ~ orderInfoList:",o);let c=[];return o.forEach(u=>{let l=this.decodeOrderId(BigInt(u.order_id));c.push({...u,price:l.price,isBid:l.isBid})}),c}cancelOrders(e,t){let s=new O.Transaction;return e.forEach(n=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),s.object(t),s.object(n.poolInfo.address),s.pure.u128(n.orderId),s.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.poolInfo.baseCoin.coinType,n.poolInfo.quoteCoin.coinType]})}),s}async getDeepbookOrderBook(e,t,s,n,i,o){let c=this._sdk.fullClient,l=await new me.DeepBookClient({client:c,address:i,env:"testnet",balanceManagers:{test1:{address:o,tradeCap:""}}}).getLevel2Range(e,t,s,n)}processOrderBookData(e,t,s,n){let i=e.returnValues[0][0],o=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(i)),c=e.returnValues[1][0],u=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(c)),l={};return o.forEach((g,d)=>{let p=R(a(g).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),n),h=a(u[d]).div(Math.pow(10,t.decimals)).toString();l[p]?l[p]={price:p,quantity:a(l[p].quantity).add(h).toString()}:l[p]={price:p,quantity:h}}),Object.values(l)}getLevel2RangeTx(e,t,s,n,i=new O.Transaction){let{baseCoin:o,quoteCoin:c}=e,u=R(a(s).mul(Math.pow(10,9+c.decimals-o.decimals)).toString(),0),l=R(a(n).mul(Math.pow(10,9+c.decimals-o.decimals)).toString(),0);return i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(u),i.pure.u64(l),i.pure.bool(t),i.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[o.coinType,c.coinType]}),i}async fetchOrderBook(e,t,s,n,i,o){let c=new O.Transaction,{baseCoin:u,quoteCoin:l}=e;try{if(t==="bid"||t==="all"){let h=n,_=s==="0"?i:s;c=this.getLevel2RangeTx(e,!0,h,_,c)}if(t==="ask"||t==="all"){let h=s==="0"?n:s,_=i;c=this.getLevel2RangeTx(e,!1,h,_,c)}let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:c}),d=[];(t==="bid"||t==="all")&&(d=g.results?.[0]?this.processOrderBookData(g.results[0],u,l,o):[]);let p=[];if(t==="ask"||t==="all"){let h=t==="ask"?0:1;p=g.results?.[h]?this.processOrderBookData(g.results[h],u,l,o):[]}return{bid:d.sort((h,_)=>_.price-h.price),ask:p.sort((h,_)=>h.price-_.price)}}catch{let g=this._sdk.sdkOptions.simulationAccount.address,d=[],p=[];try{let h=this.getLevel2RangeTx(e,!0,n,s),_=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:h});d=_.results?.[0]?this.processOrderBookData(_.results[0],u,l,o):[]}catch{d=[]}try{let h=this.getLevel2RangeTx(e,!1,n,s),_=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:h});p=_.results?.[0]?this.processOrderBookData(_.results[0],u,l,o):[]}catch{p=[]}return{bid:d,ask:p}}}async getOrderBook(e,t,s){let n={bid:[],ask:[]};try{let i=await this.getMarketPrice(e),o=t,c=Math.pow(10,-s),u=Math.pow(10,s),l=await this.fetchOrderBook(e,o,i,c,u,s);return{bid:l?.bid,ask:l?.ask}}catch{return n}}async getOrderBookOrigin(e,t){try{let s=new O.Transaction,n=await this.getMarketPrice(e),{baseCoin:i,quoteCoin:o}=e;if(t==="bid"||t==="all"){let g=Math.pow(10,-6),d=n,p=a(g).mul(Math.pow(10,9+o.decimals-i.decimals)).toString(),h=a(d).mul(Math.pow(10,9+o.decimals-i.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(p),s.pure.u64(h),s.pure.bool(!0),s.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,o.coinType]})}if(t==="ask"||t==="all"){let g=n,d=Math.pow(10,6),p=a(g).mul(Math.pow(10,9+o.decimals-i.decimals)).toString(),h=a(d).mul(Math.pow(10,9+o.decimals-i.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(p),s.pure.u64(h),s.pure.bool(!1),s.object(w.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,o.coinType]})}let c=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:c,transactionBlock:s}),l=[];if(t==="bid"||t==="all"){let g=u.results[0]?.returnValues[0]?.[0],d=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(g)),p=u.results[0]?.returnValues[1]?.[0],h=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(p));d.forEach((_,S)=>{let C=a(_).div(Math.pow(10,9+o.decimals-i.decimals)).toString(),y=a(h[S]).div(Math.pow(10,i.decimals)).toString();l.push({price:C,quantity:y})})}let m=[];if(t==="ask"||t==="all"){let g=t==="ask"?0:1,d=u.results[g]?.returnValues[0]?.[0],p=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(d)),h=u.results[g]?.returnValues[1]?.[0],_=f.bcs.vector(f.bcs.u64()).parse(new Uint8Array(h));p.forEach((S,C)=>{let y=a(S).div(Math.pow(10,9+o.decimals-i.decimals)).toString(),b=a(_[C]).div(Math.pow(10,i.decimals)).toString();m.push({price:y,quantity:b})})}return{bid:l,ask:m}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((n,i)=>[(0,w.normalizeStructTag)(n.coinType),n]))}async getAccount(e,t){let s=new O.Transaction;for(let c=0;c<t.length;c++){let u=t[c];s.moveCall({target:"0xade998d24db74df75d96646e1ce7bb996587ce28747b4db600b5ccd82e00cb5a::order_trader::get_account_id",arguments:[s.object(u.address),s.object(e)],typeArguments:[u.baseCoin.coinType,u.quoteCoin.coinType]})}let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:s});console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1808 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ devInspectRes:",JSON.stringify(n,null,2));let i;if(n?.events.length===0)return null;let o=[];return n?.events?.forEach((c,u)=>{i=c?.parsedJson,console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1816 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ eventData:",JSON.stringify(i,null,2));let l=i.account.open_orders.contents,m=i.account.owed_balances,g=i.account.settled_balances,d=i.account.unclaimed_rebates,p=i.account.taker_volume;o.push({balance_manager_id:e,open_orders:l,owed_balances:m,settled_balances:g,unclaimed_rebates:d,taker_volume:p,poolInfo:t[u]})}),o}async getSuiTransactionResponse(e,t=!1){let s=`${e}_getSuiTransactionResponse`,n=this.getCache(s,t);if(n!==void 0)return n;let i;try{i=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{i=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(s,i,q),i}transformExtensions(e,t,s=!0){let n=[];for(let i of t){let{key:o}=i.fields,{value:c}=i.fields;if(o==="labels")try{c=JSON.parse(decodeURIComponent(De.Base64.decode(c)))}catch{}s&&(e[o]=c),n.push({key:o,value:c})}delete e.extension_fields,s||(e.extensions=n)}async getCoinConfigs(e=!1,t=!0){let s=this.sdk.sdkOptions.coinlist.handle,n=`${s}_getCoinConfigs`,i=this.getCache(n,e);if(i)return i;let c=(await this._sdk.fullClient.getDynamicFieldsByPage(s)).data.map(m=>m.objectId),u=await this._sdk.fullClient.batchGetObjects(c,{showContent:!0}),l=[];return u.forEach(m=>{let g=this.buildCoinConfig(m,t);this.updateCache(`${s}_${g.address}_getCoinConfig`,g,q),l.push({...g})}),this.updateCache(n,l,q),l}buildCoinConfig(e,t=!0){let s=de(e);s=s.value.fields;let n={...s};return n.id=le(e),n.address=M(s.coin_type.fields.name).full_address,s.pyth_id&&(n.pyth_id=(0,w.normalizeSuiObjectId)(s.pyth_id)),this.transformExtensions(n,s.extension_fields.fields.contents,t),delete n.coin_type,n}updateCache(e,t,s=re){let n=this._cache[e];n?(n.overdueTime=$(s),n.value=t):n=new N(t,$(s)),this._cache[e]=n}getCache(e,t=!1){let s=this._cache[e],n=s?.isValid();if(!t&&n)return s.value;n||delete this._cache[e]}};var Q=class{_cache={};_rpcModule;_deepbookUtils;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new H({url:e.fullRpcUrl}),this._deepbookUtils=new Z(this),X(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get fullClient(){return this._rpcModule}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,s=!0){let n=[],i=null,o=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,c=this.getCache(o,s);if(c)return c;for(;;){let u=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:i}):this.fullClient.getAllCoins({owner:e,cursor:i}));if(u.data.forEach(l=>{BigInt(l.balance)>0&&n.push({coinAddress:M(l.coinType).source_address,coinObjectId:l.coinObjectId,balance:BigInt(l.balance)})}),i=u.nextCursor,!u.hasNextPage)break}return this.updateCache(o,n,30*1e3),n}async getOwnerCoinBalances(e,t){let s=[];return t?s=[await this.fullClient.getBalance({owner:e,coinType:t})]:s=[...await this.fullClient.getAllBalances({owner:e})],s}updateCache(e,t,s=q){let n=this._cache[e];n?(n.overdueTime=$(s),n.value=t):n=new N(t,$(s)),this._cache[e]=n}getCache(e,t=!1){let s=this._cache[e],n=s?.isValid();if(!t&&n)return s.value;n||delete this._cache[e]}};var Tt="0x0000000000000000000000000000000000000000000000000000000000000006",xt="pool_script",jt="pool_script_v2",Bt="router",vt="router_with_partner",Dt="fetcher_script",Mt="expect_swap",Et="utils",Pt="0x1::coin::CoinInfo",Rt="0x1::coin::CoinStore",It="custodian_v2",qt="clob_v2",Ut="endpoints_v2",Ft=r=>{if(typeof r=="string"&&r.startsWith("0x"))return"object";if(typeof r=="number"||typeof r=="bigint")return"u64";if(typeof r=="boolean")return"bool";throw new Error(`Unknown type for value: ${r}`)};var Me=(n=>(n[n.NO_RESTRICTION=0]="NO_RESTRICTION",n[n.IMMEDIATE_OR_CANCEL=1]="IMMEDIATE_OR_CANCEL",n[n.FILL_OR_KILL=2]="FILL_OR_KILL",n[n.POST_ONLY=3]="POST_ONLY",n))(Me||{});var Nt=Q;0&&(module.exports={CLOCK_ADDRESS,CachedContent,CetusClmmSDK,ClmmExpectSwapModule,ClmmFetcherModule,ClmmIntegratePoolModule,ClmmIntegratePoolV2Module,ClmmIntegrateRouterModule,ClmmIntegrateRouterWithPartnerModule,ClmmIntegrateUtilsModule,CoinAssist,CoinInfoAddress,CoinStoreAddress,DEEP_SCALAR,DEFAULT_GAS_BUDGET_FOR_MERGE,DEFAULT_GAS_BUDGET_FOR_SPLIT,DEFAULT_GAS_BUDGET_FOR_STAKE,DEFAULT_GAS_BUDGET_FOR_TRANSFER,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,DEFAULT_NFT_TRANSFER_GAS_FEE,DeepbookClobV2Moudle,DeepbookCustodianV2Moudle,DeepbookEndpointsV2Moudle,DeepbookUtilsModule,FLOAT_SCALAR,GAS_SYMBOL,GAS_TYPE_ARG,GAS_TYPE_ARG_LONG,NORMALIZED_SUI_COIN_TYPE,OrderType,RpcModule,SUI_SYSTEM_STATE_OBJECT_ID,TransactionUtil,addHexPrefix,asIntN,asUintN,bufferToHex,cacheTime24h,cacheTime5min,checkAddress,composeType,d,decimalsMultiplier,extractAddressFromType,extractStructTagFromType,fixCoinType,fixDown,fixSuiObjectId,fromDecimalsAmount,getDefaultSuiInputType,getFutureTime,getMoveObject,getMoveObjectType,getMovePackageContent,getObjectDeletedResponse,getObjectDisplay,getObjectFields,getObjectId,getObjectNotExistsResponse,getObjectOwner,getObjectPreviousTransactionDigest,getObjectReference,getObjectType,getObjectVersion,getSuiObjectData,hasPublicTransfer,hexToNumber,hexToString,isSortedSymbols,isSuiObjectResponse,maxDecimal,normalizeCoinType,patchFixSuiObjectId,printTransaction,removeHexPrefix,secretKeyToEd25519Keypair,secretKeyToSecp256k1Keypair,shortAddress,shortString,toBuffer,toDecimalsAmount,utf8to16});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Ce=Object.defineProperty;var ye=(i,e,t)=>e in i?Ce(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var te=(i,e,t)=>(ye(i,typeof e!="symbol"?e+"":e,t),t);var se=5*60*1e3,U=24*60*60*1e3;function N(i){return Date.parse(new Date().toString())+i}var I=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};import{normalizeSuiObjectId as z,normalizeStructTag as xe,SUI_TYPE_ARG as je}from"@mysten/sui/utils";var ke="0x2::coin::Coin",Se=/^0x2::coin::Coin<(.+)>$/,Ze=1e3,Qe=500,ze=100,Je=100,We=1e3,Z="0x2::sui::SUI",ne="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Ye="SUI",Xe=450,et="0x0000000000000000000000000000000000000005",w=class{static getCoinTypeArg(e){let t=e.type.match(Se);return t?t[1]:null}static isSUI(e){let t=w.getCoinTypeArg(e);return t?w.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let n=BigInt(0);return e.forEach(s=>{t===s.coinAddress&&(n+=BigInt(s.balance))}),n}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${ke}<${e}>`}static getCoinAssets(e,t){let n=[];return t.forEach(s=>{H(s.coinAddress)===H(e)&&n.push(s)}),n}static isSuiCoin(e){return E(e).full_address===Z}static selectCoinObjectIdGreaterThanOrEqual(e,t,n=[]){let s=w.selectCoinAssetGreaterThanOrEqual(e,t,n),r=s.selectedCoins.map(u=>u.coinObjectId),o=s.remainingCoins,a=s.selectedCoins.map(u=>u.balance.toString());return{objectArray:r,remainCoins:o,amountArray:a}}static selectCoinAssetGreaterThanOrEqual(e,t,n=[]){let s=w.sortByBalance(e.filter(l=>!n.includes(l.coinObjectId))),r=w.calculateTotalBalance(s);if(r<t)return{selectedCoins:[],remainingCoins:s};if(r===t)return{selectedCoins:s,remainingCoins:[]};let o=BigInt(0),a=[],u=[...s];for(;o<r;){let l=t-o,m=u.findIndex(d=>d.balance>=l);if(m!==-1){a.push(u[m]),u.splice(m,1);break}let g=u.pop();g.balance>0&&(a.push(g),o+=g.balance)}return{selectedCoins:w.sortByBalance(a),remainingCoins:w.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,n)=>t.balance<n.balance?-1:t.balance>n.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,n)=>t.balance>n.balance?-1:t.balance<n.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,n)=>t+n.balance,BigInt(0))}};var Ae=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function re(i){return i.startsWith("0x")?i:`0x${i}`}function Q(i){return i.startsWith("0x")?`${i.slice(2)}`:i}function Oe(i,e=4,t=4){let n=Math.max(e,1),s=Math.max(t,1);return`${i.slice(0,n+2)} ... ${i.slice(-s)}`}function st(i,e=4,t=4){return Oe(re(i),e,t)}function nt(i,e={leadingZero:!0}){if(typeof i!="string")return!1;let t=i;if(e.leadingZero){if(!i.startsWith("0x"))return!1;t=t.substring(2)}return Ae.test(t)}function we(i){if(!Buffer.isBuffer(i))if(Array.isArray(i))i=Buffer.from(i);else if(typeof i=="string")exports.isHexString(i)?i=Buffer.from(exports.padToEven(exports.stripHexPrefix(i)),"hex"):i=Buffer.from(i);else if(typeof i=="number")i=exports.intToBuffer(i);else if(i==null)i=Buffer.allocUnsafe(0);else if(i.toArray)i=Buffer.from(i.toArray());else throw new Error("invalid type");return i}function rt(i){return re(we(i).toString("hex"))}function it(i){let e=new ArrayBuffer(4),t=new DataView(e);for(let s=0;s<i.length;s++)t.setUint8(s,i.charCodeAt(s));return t.getUint32(0,!0)}function Te(i){let e,t,n,s,r;e="";let o=i.length;for(t=0;t<o;)switch(n=i.charCodeAt(t++),n>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=i.charAt(t-1);break;case 12:case 13:s=i.charCodeAt(t++),e+=String.fromCharCode((n&31)<<6|s&63);break;case 14:s=i.charCodeAt(t++),r=i.charCodeAt(t++),e+=String.fromCharCode((n&15)<<12|(s&63)<<6|(r&63)<<0);break}return e}function ot(i){let e="",t=Q(i),n=t.length/2;for(let s=0;s<n;s++)e+=String.fromCharCode(parseInt(t.substr(s*2,2),16));return Te(e)}var Be=0,ae=1,ve=2;function ie(i,e){return i===e?Be:i<e?ae:ve}function De(i,e){let t=0,n=i.length<=e.length?i.length:e.length,s=ie(i.length,e.length);for(;t<n;){let r=ie(i.charCodeAt(t),e.charCodeAt(t));if(t+=1,r!==0)return r}return s}function dt(i,e){return De(i,e)===ae}function oe(i,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],s=[i,...e].filter(Boolean).join("::");return t&&t.length&&(s+=`<${t.join(", ")}>`),s}function pt(i){return i.split("::")[0]}function E(i){try{let e=i.replace(/\s/g,""),n=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(n){e=e.slice(0,e.indexOf("<"));let u={...E(e),type_arguments:n.map(l=>E(l).source_address)};return u.type_arguments=u.type_arguments.map(l=>w.isSuiCoin(l)?l:E(l).source_address),u.source_address=oe(u.full_address,u.type_arguments),u}let s=e.split("::"),o={full_address:e,address:e===Z||e===ne?"0x2":z(s[0]),module:s[1],name:s[2],type_arguments:[],source_address:""};return o.full_address=`${o.address}::${o.module}::${o.name}`,o.source_address=oe(o.full_address,o.type_arguments),o}catch{return{full_address:i,address:"",module:"",name:"",type_arguments:[],source_address:i}}}function H(i){return E(i).source_address}function Ee(i){return i.toLowerCase().startsWith("0x")?z(i):i}var gt=(i,e=!0)=>{let t=i.split("::"),n=t.shift(),s=z(n);return e&&(s=Q(s)),`${s}::${t.join("::")}`};function J(i){for(let e in i){let t=typeof i[e];if(t==="object")J(i[e]);else if(t==="string"){let n=i[e];i[e]=Ee(n)}}}var mt=xe(je);import ce from"decimal.js";ce.config({precision:64,rounding:ce.ROUND_DOWN,toExpNeg:-64,toExpPos:64});import L from"decimal.js";function c(i){return L.isDecimal(i)?i:new L(i===void 0?0:i)}function W(i){return c(10).pow(c(i).abs())}var R=(i,e)=>{try{return c(i).toDP(e,L.ROUND_DOWN).toString()}catch{return i}},Y=(i,e)=>L.max(c(i),c(e));import{Transaction as Me}from"@mysten/sui/transactions";async function At(i,e=!0){i.blockData.transactions.forEach((t,n)=>{})}var M=class{static async adjustTransactionForGas(e,t,n,s){s.setSender(e.senderAddress);let r=w.selectCoinAssetGreaterThanOrEqual(t,n).selectedCoins;if(r.length===0)throw new Error("Insufficient balance");let o=w.calculateTotalBalance(t);if(o-n>1e9)return{fixAmount:n};let a=await e.fullClient.calculationTxGas(s);if(w.selectCoinAssetGreaterThanOrEqual(t,BigInt(a),r.map(l=>l.coinObjectId)).selectedCoins.length===0){let l=BigInt(a)+BigInt(500);if(o-n<l){if(n-=l,n<0)throw new Error("gas Insufficient balance");let m=new Me;return{fixAmount:n,newTx:m}}}return{fixAmount:n}}static buildCoinForAmount(e,t,n,s,r=!0,o=!1){let a=w.getCoinAssets(s,t);if(n===BigInt(0)&&a.length===0)return M.buildZeroValueCoin(t,e,s,r);let u=w.calculateTotalBalance(a);if(u<n)throw new Error(`The amount(${u}) is Insufficient balance for ${s} , expect ${n} `);return M.buildCoin(e,t,a,n,s,r,o)}static buildCoin(e,t,n,s,r,o=!0,a=!1){if(w.isSuiCoin(r)){if(o){let k=e.splitCoins(e.gas,[e.pure.u64(s)]);return{targetCoin:e.makeMoveVec({elements:[k]}),remainCoins:t,tragetCoinAmount:s.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(s===0n&&n.length>1){let k=w.selectCoinObjectIdGreaterThanOrEqual(n,s);return{targetCoin:e.object(k.objectArray[0]),remainCoins:k.remainCoins,tragetCoinAmount:k.amountArray[0],isMintZeroCoin:!1}}let C=w.selectCoinObjectIdGreaterThanOrEqual(n,s);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(s)]),remainCoins:C.remainCoins,tragetCoinAmount:s.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let u=w.selectCoinObjectIdGreaterThanOrEqual(n,s),l=u.amountArray.reduce((C,_)=>Number(C)+Number(_),0).toString(),m=u.objectArray;if(o)return{targetCoin:e.makeMoveVec({elements:m.map(C=>e.object(C))}),remainCoins:u.remainCoins,tragetCoinAmount:u.amountArray.reduce((C,_)=>Number(C)+Number(_),0).toString(),isMintZeroCoin:!1};let[g,...d]=m,b=e.object(g),p=b,f=u.amountArray.reduce((C,_)=>Number(C)+Number(_),0).toString(),y;return d.length>0&&e.mergeCoins(b,d.map(C=>e.object(C))),a&&Number(l)>Number(s)&&(p=e.splitCoins(b,[e.pure.u64(s)]),f=s.toString(),y=b),{targetCoin:p,remainCoins:u.remainCoins,originalSplitedCoin:y,tragetCoinAmount:f,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,n,s=!0){let r=M.callMintZeroValueCoin(t,n),o;return s?o=t.makeMoveVec({elements:[r]}):o=r,{targetCoin:o,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,n,s,r=!0){let o=w.getCoinAssets(s,t);if(n.amountFirst===BigInt(0))return o.length>0?M.buildCoin(e,[...t],[...o],n.amountFirst,s,r):M.buildZeroValueCoin(t,e,s,r);let a=w.calculateTotalBalance(o);if(a>=n.amountFirst)return M.buildCoin(e,[...t],[...o],n.amountFirst,s,r);if(a<n.amountSecond)throw new Error(`The amount(${a}) is Insufficient balance for ${s} , expect ${n.amountSecond} `);return M.buildCoin(e,[...t],[...o],n.amountSecond,s,r)}static buildCoinTypePair(e,t){let n=[];if(e.length===2){let s=[];s.push(e[0],e[1]),n.push(s)}else{let s=[];s.push(e[0],e[e.length-1]),n.push(s);for(let r=1;r<e.length-1;r+=1){if(t[r-1]===0)continue;let o=[];o.push(e[0],e[r],e[e.length-1]),n.push(o)}}return n}},P=M;te(P,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));function F(i){return i.data}function Pe(i){if(i.error&&"object_id"in i.error&&"version"in i.error&&"digest"in i.error){let{error:e}=i;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Re(i){if(i.error&&"object_id"in i.error&&!("version"in i.error)&&!("digest"in i.error))return i.error.object_id}function ue(i){if("reference"in i)return i.reference;let e=F(i);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:Pe(i)}function le(i){return"objectId"in i?i.objectId:ue(i)?.objectId??Re(i)}function Tt(i){return"version"in i?i.version:ue(i)?.version}function qe(i){return i.data!==void 0}function Ie(i){return i.content!==void 0}function xt(i){let e=F(i);if(e?.content?.dataType==="package")return e.content.disassembled}function X(i){let e="data"in i?F(i):i;if(!(!e||!Ie(e)||e.content.dataType!=="moveObject"))return e.content}function Ue(i){return X(i)?.type}function jt(i){let e=qe(i)?i.data:i;return!e?.type&&"data"in i?e?.content?.dataType==="package"?"package":Ue(i):e?.type}function Bt(i){return F(i)?.previousTransaction}function vt(i){return F(i)?.owner}function Dt(i){let e=F(i)?.display;return e||{data:null,error:null}}function de(i){let e=X(i)?.fields;if(e)return"fields"in e?e.fields:e}function Et(i){return X(i)?.hasPublicTransfer??!1}import{fromB64 as me,fromHEX as be}from"@mysten/bcs";import{Ed25519Keypair as pe}from"@mysten/sui/keypairs/ed25519";import{Secp256k1Keypair as ge}from"@mysten/sui/keypairs/secp256k1";function Ut(i,e){let t=W(c(e));return Number(c(i).mul(t))}function Nt(i,e=32){return BigInt.asUintN(e,BigInt(i)).toString()}function Ft(i,e=32){return Number(BigInt.asIntN(e,BigInt(i)))}function $t(i,e){let t=W(c(e));return Number(c(i).div(t))}function Lt(i,e="hex"){if(i instanceof Uint8Array){let n=Buffer.from(i);return pe.fromSecretKey(n)}let t=e==="hex"?be(i):me(i);return pe.fromSecretKey(t)}function Vt(i,e="hex"){if(i instanceof Uint8Array){let n=Buffer.from(i);return ge.fromSecretKey(n)}let t=e==="hex"?be(i):me(i);return ge.fromSecretKey(t)}import{SuiClient as Ne}from"@mysten/sui/client";var V=class extends Ne{async queryEventsByPage(e,t="all"){let n=[],s=!0,r=t==="all",o=r?null:t.cursor;do{let a=await this.queryEvents({query:e,cursor:o,limit:r?null:t.limit});a.data?(n=[...n,...a.data],s=a.hasNextPage,o=a.nextCursor):s=!1}while(r&&s);return{data:n,nextCursor:o,hasNextPage:s}}async getOwnedObjectsByPage(e,t,n="all"){let s=[],r=!0,o=n==="all",a=o?null:n.cursor;do{let u=await this.getOwnedObjects({owner:e,...t,cursor:a,limit:o?null:n.limit});u.data?(s=[...s,...u.data],r=u.hasNextPage,a=u.nextCursor):r=!1}while(o&&r);return{data:s,nextCursor:a,hasNextPage:r}}async getDynamicFieldsByPage(e,t="all"){let n=[],s=!0,r=t==="all",o=r?null:t.cursor;do{let a=await this.getDynamicFields({parentId:e,cursor:o,limit:r?null:t.limit});a.data?(n=[...n,...a.data],s=a.hasNextPage,o=a.nextCursor):s=!1}while(r&&s);return{data:n,nextCursor:o,hasNextPage:s}}async batchGetObjects(e,t,n=50){let s=[];try{for(let r=0;r<Math.ceil(e.length/n);r++){let o=await this.multiGetObjects({ids:e.slice(r*n,n*(r+1)),options:t});s=[...s,...o]}}catch{}return s}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let n=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:s}=n.effects;return Number(s.computationCost)+Number(s.storageCost)-Number(s.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};import{DeepBookClient as _e}from"@mysten/deepbook-v3";import{bcs as h}from"@mysten/sui/bcs";import{Base64 as Fe}from"js-base64";import{Transaction as O,coinWithBalance as he}from"@mysten/sui/transactions";import{normalizeStructTag as D,SUI_CLOCK_OBJECT_ID as j,normalizeSuiObjectId as $e}from"@mysten/sui/utils";function v(...i){let e="DeepbookV3_Utils_Sdk###"}var ee=1e6,$=1e9,Le={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},Ve={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},fe=1e3*60*60*24*365*100,G=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?Ve:Le}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new O,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}async getBalanceManager(e){let t=new O;t.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[t.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t.pure.address(e)],typeArguments:[]});let r=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:t}))?.events?.filter(a=>a.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],o=[];return r.forEach(a=>{o.push({balanceManager:a,cetusBalanceManager:""})}),o||[]}createAndDepsit({account:e,coin:t,amountToDeposit:n}){let s=new O;s.setSenderIfNotSet(e);let r=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),o=he({type:t.coinType,balance:BigInt(n)});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[r,o],typeArguments:[t.coinType]}),s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),r],typeArguments:[]}),s.moveCall({target:"0x2::transfer::public_share_object",arguments:[r],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),s}depositIntoManager({account:e,balanceManager:t,coin:n,amountToDeposit:s,tx:r}){let o=r||new O;if(t){o.setSenderIfNotSet(e);let a=he({type:n.coinType,balance:BigInt(s)});return o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[o.object(t),a],typeArguments:[n.coinType]}),o}return null}withdrawFromManager({account:e,balanceManager:t,coin:n,amountToWithdraw:s,returnAssets:r,txb:o}){let a=o||new O,u=a.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[a.object(t),a.pure.u64(s)],typeArguments:[n.coinType]});return r?u:(a.transferObjects([u],e),a)}withdrawSettledAmounts({poolInfo:e,balanceManager:t}){let n=new O,s=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[n.object(t)]});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[n.object(e.address),n.object(t),s],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),n}async getManagerBalance({account:e,balanceManager:t,coins:n}){let s=new O;n.forEach(a=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[s.object(t)],typeArguments:[a.coinType]})});let r=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}),o={};return r.results?.forEach((a,u)=>{let l=n[u],m=a.returnValues[0][0],g=h.U64.parse(new Uint8Array(m)),d=c(g),b=d.div(Math.pow(10,l.decimals)).toString();o[l.coinType]={adjusted_balance:b,balance:d.toString()}}),o}async getMarketPrice(e){try{let t=new O;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(j)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],r=Number(h.U64.parse(new Uint8Array(s))),o=Math.pow(10,e.baseCoin.decimals).toString(),a=Math.pow(10,e.quoteCoin.decimals).toString();return c(r).mul(o).div(a).div($).toString()}catch(t){return v("getMarketPrice ~ error:",t),"0"}}async getPools(){let e=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),t=/<([^>]+)>/,n=[];return e?.data?.forEach(s=>{let r=s?.parsedJson,o=s.type.match(t);if(o){let u=o[1].split(", ");n.push({...r,baseCoinType:u[0],quoteCoinType:u[1]})}}),n}async getQuoteQuantityOut(e,t,n){let s=new O;s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[s.object(e.address),s.pure.u64(t),s.object(j)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=String(h.U64.parse(new Uint8Array(r.results[0].returnValues[0][0]))),a=String(h.U64.parse(new Uint8Array(r.results[0].returnValues[1][0]))),u=String(h.U64.parse(new Uint8Array(r.results[0].returnValues[2][0])));return{baseQuantityDisplay:c(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:c(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:c(a).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:c(u).div(ee).toString(),baseQuantity:t,baseOut:o,quoteOut:a,deepRequired:u}}async getBaseQuantityOut(e,t,n){let s=new O;s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[s.object(e.address),s.pure.u64(t),s.object(j)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=String(h.U64.parse(new Uint8Array(r.results[0].returnValues[0][0]))),a=String(h.U64.parse(new Uint8Array(r.results[0].returnValues[1][0]))),u=String(h.U64.parse(new Uint8Array(r.results[0].returnValues[2][0])));return{quoteQuantityDisplay:c(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:c(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:c(a).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:c(u).div(ee).toString(),quoteQuantity:t,baseOut:o,quoteOut:a,deepRequired:u}}async getQuantityOut(e,t,n,s){let r=new O;r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[r.object(e.address),r.pure.u64(t),r.pure.u64(n),r.object(j)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:r}),a=Number(h.U64.parse(new Uint8Array(o.results[0].returnValues[0][0]))),u=Number(h.U64.parse(new Uint8Array(o.results[0].returnValues[1][0]))),l=Number(h.U64.parse(new Uint8Array(o.results[0].returnValues[2][0])));return{baseQuantityDisplay:c(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:c(n).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:c(a).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:c(u).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:c(l).div(ee).toString(),baseQuantity:t,quoteQuantity:n,baseOut:a,quoteOut:u,deepRequired:l}}async estimatedMaxFee(e,t,n,s,r,o,a){let u=this.deepCoin,l=await this.getMarketPrice(e),m=o?n:l!=="0"?l:a;if(m==="0")throw new Error("Cannot get market price");let g=Math.pow(10,e.baseCoin.decimals).toString(),d=Math.pow(10,e.quoteCoin.decimals).toString(),b=c(m).div(g).mul(d).mul($).toString(),p=c(m),{taker_fee:f}=e;if(s){let y=await this.getOrderDeepPrice(e);if(!y)throw new Error("Cannot get deep price");let C=Y(b,n),_=c(t).mul(c(f)).div(c($)).mul(c(y.deep_per_asset)).div(c($));return y.asset_is_base||(_=_.mul(C).div(c($))),{quantity:_.ceil().toString(),feeType:u.coinType}}else if(r){let y=Y(b,n);return{quantity:c(t).mul(y).mul(c(125)).div(c(1e5)).div(c($)).ceil().toFixed(0),feeType:e.quoteCoin.coinType}}else return{quantity:c(t).mul(c(125)).div(c(1e5)).ceil().toFixed(0),feeType:e.baseCoin.coinType}}async getOrderDeepPrice(e){try{let t=new O;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[t.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0];return this.parseOrderDeepPrice(new Uint8Array(s))}catch(t){return v("getMarketPrice ~ error:",t),null}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),n=t.getUint8(0)!==0,s=Number(t.getBigUint64(1,!0));return{asset_is_base:n,deep_per_asset:s}}getCoinAssets(e,t,n,s){return P.buildCoinForAmount(s,n,BigInt(c(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,n,s,r,o,a){let u=this.deepCoin;if(!a)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};let l=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];s&&l.push(u);let m=await this.getManagerBalance({account:r,balanceManager:a,coins:l}),g=m?.[t]?.balance||"0",d=m?.[n]?.balance||"0",b=o&&m?.[u.coinType]?.balance||"0";return{baseManagerBlance:g,quoteManagerBlance:d,feeManaerBalance:b}}getFeeAsset(e,t,n,s,r,o,a,u,l,m){let g=c(e).gt(0)&&l,d="0";if(!g)return{feeAsset:this.getEmptyCoin(m,t),haveDepositFee:"0"};if(o||a){let b=c(r).sub(o?s:n);d=b.lte(0)?e:b.sub(e).lt(0)?b.sub(e).toString():"0"}else d=c(r).sub(e).lt("0")?c(r).sub(e).abs().toString():"0";return{feeAsset:c(d).gt("0")?this.getCoinAssets(t,d,u,m):this.getEmptyCoin(m,t),haveDepositFee:d}}async getTransactionRelatedAssets(e,t,n,s,r,o,a,u,l){let m=this.deepCoin,g=D(e.baseCoin.coinType),d=D(e.quoteCoin.coinType),b=g===m.coinType,p=d===m.coinType,f=!b&&!p,{baseManagerBlance:y,quoteManagerBlance:C,feeManaerBalance:_}=await this.getTransactionRelatedBalance(e,g,d,f,o,a,u),k,S,B=!1,A=await this._sdk.getOwnerCoinAssets(o);if(r){a||(n=c(n).add(c(s)).toString());let T=c(C).sub(n).toString();c(T).lt(0)?(B=!0,S=this.getCoinAssets(d,T,A,l)):S=this.getEmptyCoin(l,d),k=this.getEmptyCoin(l,g)}else{a||(t=c(t).add(c(s)).toString());let T=c(y).sub(t).toString();c(T).lt(0)?(B=!0,k=this.getCoinAssets(g,T,A,l)):k=this.getEmptyCoin(l,g),S=this.getEmptyCoin(l,d)}let x=this.getFeeAsset(s,m.coinType,t,n,_,p,b,A,a,l);return{baseAsset:k,quoteAsset:S,feeAsset:x,haveDeposit:B}}async getMarketTransactionRelatedAssets(e,t,n,s,r,o,a,u,l){let m=this.deepCoin,g=D(e.baseCoin.coinType),d=D(e.quoteCoin.coinType),b=g===m.coinType,p=d===m.coinType,f=!b&&!p,{baseManagerBlance:y,quoteManagerBlance:C}=await this.getTransactionRelatedBalance(e,g,d,f,o,a,u),_,k,S=await this._sdk.getOwnerCoinAssets(o);if(r){a||(n=c(n).add(c(s)).toString());let A=c(C).sub(n).toString();if(c(A).lt(0)){let x;c(C).gt(0)&&(x=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:C,returnAssets:!0,txb:l}));let T=this.getCoinAssets(d,A,S,l);x&&l.mergeCoins(T,[x]),k=T}else k=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:n,returnAssets:!0,txb:l});_=this.getEmptyCoin(l,g)}else{a||(t=c(t).add(c(s)).toString());let A=c(y).sub(t).toString();if(c(A).lt(0)){let x;c(y).gt(0)&&(x=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:y,returnAssets:!0,txb:l}));let T=this.getCoinAssets(g,A,S,l);x&&l.mergeCoins(T,[x]),_=T}else _=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:l});k=this.getEmptyCoin(l,d)}let B=this.getEmptyCoin(l,m.coinType);return{baseAsset:_,quoteAsset:k,feeAsset:B}}async createDepositThenPlaceLimitOrder(e,t,n,s,r,o,a,u=Date.now()+fe){let l=this.deepCoin,m=e.address,g=e.baseCoin.decimals,d=e.quoteCoin.decimals,b=e.baseCoin.coinType,p=e.quoteCoin.coinType,f=c(t).mul(10**(d-g+9)).toString(),y=D(b),C=D(p),_=new O,k,S,B=await this._sdk.getOwnerCoinAssets(o);if(s==="bid"){let q=c(t).mul(c(n).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();a||(q=c(q).add(c(r)).toString()),S=P.buildCoinForAmount(_,B,BigInt(q),C,!1,!0)?.targetCoin}else{let q=n;a||(q=c(n).abs().add(c(r)).toString()),k=P.buildCoinForAmount(_,B,BigInt(c(q).abs().toString()),y,!1,!0)?.targetCoin}let A=a?c(r).gt(0)?P.buildCoinForAmount(_,B,BigInt(c(r).abs().ceil().toString()),l.coinType,!1,!0).targetCoin:this.getEmptyCoin(_,l.coinType):this.getEmptyCoin(_,l.coinType),x=_.moveCall({typeArguments:[s==="bid"?b:p],target:"0x2::coin::zero",arguments:[]}),T=[_.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),_.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),_.object(m),s==="bid"?x:k,s==="bid"?S:x,A,_.pure.u8(0),_.pure.u8(0),_.pure.u64(f),_.pure.u64(n),_.pure.bool(s==="bid"),_.pure.bool(!1),_.pure.u64(u),_.object(j)];return _.moveCall({typeArguments:[y,C],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:T}),_}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder(e,t,n,s,r,o,a=.01){let u=e.address,l=e.baseCoin.coinType,m=e.quoteCoin.coinType,g=n==="bid",d=D(l),b=D(m),p=new O,f,y,C=t,_,k=await this.getOrderBook(e,"all",6);if(g){let x=k?.ask?.[0]?.price||"0",T=c(x).mul(c(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();_=c(T).plus(c(T).mul(a)).ceil().toString()}else{let x=await k?.bid?.[0]?.price||"0",T=c(x).mul(c(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();_=c(T).minus(c(T).mul(a)).floor().toString()}let S=await this._sdk.getOwnerCoinAssets(r);g?(o||(_=c(_).add(c(s)).toString()),y=this.getCoinAssets(b,_,S,p),f=this.getEmptyCoin(p,d)):(o||(C=c(C).add(c(s)).toString()),y=this.getEmptyCoin(p,b),f=this.getCoinAssets(d,C,S,p));let B=o?c(s).gt(0)?P.buildCoinForAmount(p,S,BigInt(c(s).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(p,this.deepCoin.coinType):this.getEmptyCoin(p,this.deepCoin.coinType),A=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(u),f,y,B,p.pure.u8(0),p.pure.u64(t),p.pure.bool(g),p.pure.bool(o),p.pure.u64(_),p.object(j)];return p.moveCall({typeArguments:[d,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:A}),p}async placeLimitOrder(e,t,n,s,r,o,a,u,l=Date.now()+fe){let m=this.deepCoin,g=c(n).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),d=t.baseCoin.coinType,b=t.quoteCoin.coinType,p=new O,f=r==="bid",y=f?c(n).mul(c(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",C=f?"0":s,{baseAsset:_,quoteAsset:k,feeAsset:S,haveDeposit:B}=await this.getTransactionRelatedAssets(t,C,y,o,f,a,u,e,p);if(B){v("placeLimitOrder~ deposit_then_place_limit_order_by_owner have deposit"),v("placeLimitOrder ~ deposit_then_place_limit_order_by_owner args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,baseAsset:_,quoteAsset:k,feeAsset:S.feeAsset,order_type:0,self_matching_option:0,price:g,quantity:s,is_bid:r==="bid",expirationTimestamp:l,SUI_CLOCK_OBJECT_ID:j});let A=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(t.address),p.object(e),_,k,S.feeAsset,p.pure.u8(0),p.pure.u8(0),p.pure.u64(g),p.pure.u64(s),p.pure.bool(r==="bid"),p.pure.bool(u),p.pure.u64(l),p.object(j)];return p.moveCall({typeArguments:[d,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:A}),p}else{let A=new O;c(S.haveDepositFee).gt(0)&&this.depositIntoManager({account:a,balanceManager:e,coin:m,amountToDeposit:S.haveDepositFee,tx:A}),v("placeLimitOrder~ not have deposit"),v("placeLimitOrder ~ args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,order_type:0,self_matching_option:0,price:g,quantity:s,is_bid:r==="bid",pay_with_deep:!0,expirationTimestamp:l,SUI_CLOCK_OBJECT_ID:j});let x=[A.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),A.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),A.object(t.address),A.object(e),A.pure.u8(0),A.pure.u8(0),A.pure.u64(g),A.pure.u64(s),A.pure.bool(r==="bid"),A.pure.bool(u),A.pure.u64(l),A.object(j)];return A.moveCall({typeArguments:[d,b],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:x}),A}}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:n}=e,s=new O,r=await this.getMarketPrice(e),o=c(r).gt(0)?r:Math.pow(10,-1),a=Math.pow(10,6),u=c(o).mul(Math.pow(10,9+n.decimals-t.decimals)).toString(),l=c(a).mul(Math.pow(10,9+n.decimals-t.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(u),s.pure.u64(l),s.pure.bool(!1),s.object(j)],typeArguments:[t.coinType,n.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:s}),d=[],b=g.results[0].returnValues[0][0],p=h.vector(h.u64()).parse(new Uint8Array(b)),f=g.results[0].returnValues[1][0],y=h.vector(h.u64()).parse(new Uint8Array(f));return p.forEach((C,_)=>{let k=c(C).div(Math.pow(10,9+n.decimals-t.decimals)).toString(),S=c(y[_]).div(Math.pow(10,t.decimals)).toString();d.push({price:k,quantity:S})}),d?.[0]?.price||0}catch(t){return v("getBestAskprice ~ error:",t),0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:n}=e,s=new O,r=await this.getMarketPrice(e),o=c(r).gt(0)?c(r).div(3).toNumber():Math.pow(10,-6),a=c(r).gt(0)?r:Math.pow(10,6),u=c(o).mul(Math.pow(10,9+n.decimals-t.decimals)).toString(),l=c(a).mul(Math.pow(10,9+n.decimals-t.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(R(u,0)),s.pure.u64(R(l,0)),s.pure.bool(!0),s.object(j)],typeArguments:[t.coinType,n.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:s}),d=[],b=g.results[0].returnValues[0][0],p=h.vector(h.u64()).parse(new Uint8Array(b)),f=g.results[0].returnValues[1][0],y=h.vector(h.u64()).parse(new Uint8Array(f));return p.forEach((C,_)=>{let k=c(C).div(Math.pow(10,9+n.decimals-t.decimals)).toString(),S=c(y[_]).div(Math.pow(10,t.decimals)).toString();d.push({price:k,quantity:S})}),d?.[0]?.price||0}catch(t){return v("getBestBidprice ~ error:",t),0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:n,quoteCoin:s}=e,r=new O,o=await this.getMarketPrice(e),a,u;t?(a=c(o).gt(0)?c(o).div(3).toNumber():Math.pow(10,-6),u=c(o).gt(0)?o:Math.pow(10,6)):(a=c(o).gt(0)?o:Math.pow(10,-1),u=c(o).gt(0)?c(o).mul(3).toNumber():Math.pow(10,6));let l=c(a).mul(Math.pow(10,9+s.decimals-n.decimals)).toString(),m=c(u).mul(Math.pow(10,9+s.decimals-n.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(R(l,0)),r.pure.u64(R(m,0)),r.pure.bool(t),r.object(j)],typeArguments:[n.coinType,s.coinType]});let g=this._sdk.sdkOptions.simulationAccount.address,d=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:r}),b=[],p=d.results[0].returnValues[0][0],f=h.vector(h.u64()).parse(new Uint8Array(p)),y=d.results[0].returnValues[1][0],C=h.vector(h.u64()).parse(new Uint8Array(y));return f.forEach((_,k)=>{let S=c(_).div(Math.pow(10,9+s.decimals-n.decimals)).toString(),B=c(C[k]).div(Math.pow(10,n.decimals)).toString();b.push({price:S,quantity:B})}),b?.[0]?.price||0}catch(n){return v("getBestBidprice ~ error:",n),0}}async placeMarketOrder(e,t,n,s,r,o,a,u,l=.01){let m=D(t.baseCoin.coinType),g=D(t.quoteCoin.coinType),d=new O,{baseAsset:b,quoteAsset:p,feeAsset:f}=await this.getMarketTransactionRelatedAssets(t,n,s,o,r,a,u,e,d),y=await this.getOrderBook(t,"all",6);if(r){let k=y?.ask?.[0]?.price||"0",S=c(k).mul(c(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();s=c(S).plus(c(S).mul(l)).ceil().toString()}else{let k=await y?.bid?.[0]?.price||"0",S=c(k).mul(c(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();s=c(S).minus(c(S).mul(l)).floor().toString()}let C=s;console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:1450 ~ DeepbookUtilsModule ~ placeMarketOrder ~ amountLimit:",{amountLimit:C,quoteQuantity:s});let _=[d.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),d.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),d.object(t.address),d.object(e),b,p,f,d.pure.u8(0),d.pure.u64(n),d.pure.bool(r),d.pure.bool(u),d.pure.u64(C),d.object(j)];return d.setSenderIfNotSet(a),d.moveCall({typeArguments:[m,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:_}),d}async getOpenOrderFromDeepbook(e,t){let n=this._sdk.fullClient,s=new _e({client:n,address:e,env:"testnet",balanceManagers:{test1:{address:t,tradeCap:""}}}),r=await s.accountOpenOrders("DEEP_SUI","test1"),o=await s.getOrder("DEEP_SUI","1844674407389401905673709551611")}async getOrderInfoList(e,t,n){try{let s=new O;t.forEach(m=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[s.object(e.address),s.pure.u128(m)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]})});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=h.struct("ID",{bytes:h.Address}),a=h.struct("OrderDeepPrice",{asset_is_base:h.bool(),deep_per_asset:h.u64()}),u=h.struct("Order",{balance_manager_id:o,order_id:h.u128(),client_order_id:h.u64(),quantity:h.u64(),filled_quantity:h.u64(),fee_is_deep:h.bool(),order_deep_price:a,epoch:h.u64(),status:h.u8(),expire_timestamp:h.u64()}),l=[];return r?.results?.forEach(m=>{let g=m.returnValues[0][0],d=u.parse(new Uint8Array(g));l.push(d)}),l}catch(s){return v("getOrderInfoList ~ error:",s),[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),n=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),s=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:n,orderId:s}}async getOpenOrder(e,t,n,s){let r;if(s)r=s;else{let u=new O;u.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[u.object(e.address),u.object(n)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let m=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:u})).results[0].returnValues[0][0];r=h.struct("VecSet",{constants:h.vector(h.U128)}).parse(new Uint8Array(m)).constants,v("getOpenOrder ~ orderIds:",r)}let o=await this.getOrderInfoList(e,r,t)||[];v("getOpenOrder ~ orderInfoList:",o);let a=[];return o.forEach(u=>{let l=this.decodeOrderId(BigInt(u.order_id));a.push({...u,price:l.price,isBid:l.isBid})}),a}cancelOrders(e,t){let n=new O;return e.forEach(s=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),n.object(t),n.object(s.poolInfo.address),n.pure.u128(s.orderId),n.object(j)],typeArguments:[s.poolInfo.baseCoin.coinType,s.poolInfo.quoteCoin.coinType]})}),n}async getDeepbookOrderBook(e,t,n,s,r,o){let a=this._sdk.fullClient,l=await new _e({client:a,address:r,env:"testnet",balanceManagers:{test1:{address:o,tradeCap:""}}}).getLevel2Range(e,t,n,s)}processOrderBookData(e,t,n,s){let r=e.returnValues[0][0],o=h.vector(h.u64()).parse(new Uint8Array(r)),a=e.returnValues[1][0],u=h.vector(h.u64()).parse(new Uint8Array(a)),l={};return o.forEach((g,d)=>{let b=R(c(g).div(Math.pow(10,9+n.decimals-t.decimals)).toString(),s),p=c(u[d]).div(Math.pow(10,t.decimals)).toString();l[b]?l[b]={price:b,quantity:c(l[b].quantity).add(p).toString()}:l[b]={price:b,quantity:p}}),Object.values(l)}getLevel2RangeTx(e,t,n,s,r=new O){let{baseCoin:o,quoteCoin:a}=e,u=R(c(n).mul(Math.pow(10,9+a.decimals-o.decimals)).toString(),0),l=R(c(s).mul(Math.pow(10,9+a.decimals-o.decimals)).toString(),0);return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(u),r.pure.u64(l),r.pure.bool(t),r.object(j)],typeArguments:[o.coinType,a.coinType]}),r}async fetchOrderBook(e,t,n,s,r,o){let a=new O,{baseCoin:u,quoteCoin:l}=e;try{if(t==="bid"||t==="all"){let p=s,f=n==="0"?r:n;a=this.getLevel2RangeTx(e,!0,p,f,a)}if(t==="ask"||t==="all"){let p=n==="0"?s:n,f=r;a=this.getLevel2RangeTx(e,!1,p,f,a)}let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:a}),d=[];(t==="bid"||t==="all")&&(d=g.results?.[0]?this.processOrderBookData(g.results[0],u,l,o):[]);let b=[];if(t==="ask"||t==="all"){let p=t==="ask"?0:1;b=g.results?.[p]?this.processOrderBookData(g.results[p],u,l,o):[]}return{bid:d.sort((p,f)=>f.price-p.price),ask:b.sort((p,f)=>p.price-f.price)}}catch{let g=this._sdk.sdkOptions.simulationAccount.address,d=[],b=[];try{let p=this.getLevel2RangeTx(e,!0,s,n),f=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:p});d=f.results?.[0]?this.processOrderBookData(f.results[0],u,l,o):[]}catch{d=[]}try{let p=this.getLevel2RangeTx(e,!1,s,n),f=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:p});b=f.results?.[0]?this.processOrderBookData(f.results[0],u,l,o):[]}catch{b=[]}return{bid:d,ask:b}}}async getOrderBook(e,t,n){let s={bid:[],ask:[]};try{let r=await this.getMarketPrice(e),o=t,a=Math.pow(10,-n),u=Math.pow(10,n),l=await this.fetchOrderBook(e,o,r,a,u,n);return{bid:l?.bid,ask:l?.ask}}catch{return s}}async getOrderBookOrigin(e,t){try{let n=new O,s=await this.getMarketPrice(e),{baseCoin:r,quoteCoin:o}=e;if(t==="bid"||t==="all"){let g=Math.pow(10,-6),d=s,b=c(g).mul(Math.pow(10,9+o.decimals-r.decimals)).toString(),p=c(d).mul(Math.pow(10,9+o.decimals-r.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(b),n.pure.u64(p),n.pure.bool(!0),n.object(j)],typeArguments:[r.coinType,o.coinType]})}if(t==="ask"||t==="all"){let g=s,d=Math.pow(10,6),b=c(g).mul(Math.pow(10,9+o.decimals-r.decimals)).toString(),p=c(d).mul(Math.pow(10,9+o.decimals-r.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(b),n.pure.u64(p),n.pure.bool(!1),n.object(j)],typeArguments:[r.coinType,o.coinType]})}let a=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:a,transactionBlock:n}),l=[];if(t==="bid"||t==="all"){let g=u.results[0]?.returnValues[0]?.[0],d=h.vector(h.u64()).parse(new Uint8Array(g)),b=u.results[0]?.returnValues[1]?.[0],p=h.vector(h.u64()).parse(new Uint8Array(b));d.forEach((f,y)=>{let C=c(f).div(Math.pow(10,9+o.decimals-r.decimals)).toString(),_=c(p[y]).div(Math.pow(10,r.decimals)).toString();l.push({price:C,quantity:_})})}let m=[];if(t==="ask"||t==="all"){let g=t==="ask"?0:1,d=u.results[g]?.returnValues[0]?.[0],b=h.vector(h.u64()).parse(new Uint8Array(d)),p=u.results[g]?.returnValues[1]?.[0],f=h.vector(h.u64()).parse(new Uint8Array(p));b.forEach((y,C)=>{let _=c(y).div(Math.pow(10,9+o.decimals-r.decimals)).toString(),k=c(f[C]).div(Math.pow(10,r.decimals)).toString();m.push({price:_,quantity:k})})}return{bid:l,ask:m}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((s,r)=>[D(s.coinType),s]))}async getAccount(e,t){let n=new O;for(let a=0;a<t.length;a++){let u=t[a];n.moveCall({target:"0xade998d24db74df75d96646e1ce7bb996587ce28747b4db600b5ccd82e00cb5a::order_trader::get_account_id",arguments:[n.object(u.address),n.object(e)],typeArguments:[u.baseCoin.coinType,u.quoteCoin.coinType]})}let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:n});console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1808 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ devInspectRes:",JSON.stringify(s,null,2));let r;if(s?.events.length===0)return null;let o=[];return s?.events?.forEach((a,u)=>{r=a?.parsedJson,console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1816 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ eventData:",JSON.stringify(r,null,2));let l=r.account.open_orders.contents,m=r.account.owed_balances,g=r.account.settled_balances,d=r.account.unclaimed_rebates,b=r.account.taker_volume;o.push({balance_manager_id:e,open_orders:l,owed_balances:m,settled_balances:g,unclaimed_rebates:d,taker_volume:b,poolInfo:t[u]})}),o}async getSuiTransactionResponse(e,t=!1){let n=`${e}_getSuiTransactionResponse`,s=this.getCache(n,t);if(s!==void 0)return s;let r;try{r=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{r=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(n,r,U),r}transformExtensions(e,t,n=!0){let s=[];for(let r of t){let{key:o}=r.fields,{value:a}=r.fields;if(o==="labels")try{a=JSON.parse(decodeURIComponent(Fe.decode(a)))}catch{}n&&(e[o]=a),s.push({key:o,value:a})}delete e.extension_fields,n||(e.extensions=s)}async getCoinConfigs(e=!1,t=!0){let n=this.sdk.sdkOptions.coinlist.handle,s=`${n}_getCoinConfigs`,r=this.getCache(s,e);if(r)return r;let a=(await this._sdk.fullClient.getDynamicFieldsByPage(n)).data.map(m=>m.objectId),u=await this._sdk.fullClient.batchGetObjects(a,{showContent:!0}),l=[];return u.forEach(m=>{let g=this.buildCoinConfig(m,t);this.updateCache(`${n}_${g.address}_getCoinConfig`,g,U),l.push({...g})}),this.updateCache(s,l,U),l}buildCoinConfig(e,t=!0){let n=de(e);n=n.value.fields;let s={...n};return s.id=le(e),s.address=E(n.coin_type.fields.name).full_address,n.pyth_id&&(s.pyth_id=$e(n.pyth_id)),this.transformExtensions(s,n.extension_fields.fields.contents,t),delete s.coin_type,s}updateCache(e,t,n=se){let s=this._cache[e];s?(s.overdueTime=N(n),s.value=t):s=new I(t,N(n)),this._cache[e]=s}getCache(e,t=!1){let n=this._cache[e],s=n?.isValid();if(!t&&s)return n.value;s||delete this._cache[e]}};var K=class{_cache={};_rpcModule;_deepbookUtils;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new V({url:e.fullRpcUrl}),this._deepbookUtils=new G(this),J(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get fullClient(){return this._rpcModule}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,n=!0){let s=[],r=null,o=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,a=this.getCache(o,n);if(a)return a;for(;;){let u=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:r}):this.fullClient.getAllCoins({owner:e,cursor:r}));if(u.data.forEach(l=>{BigInt(l.balance)>0&&s.push({coinAddress:E(l.coinType).source_address,coinObjectId:l.coinObjectId,balance:BigInt(l.balance)})}),r=u.nextCursor,!u.hasNextPage)break}return this.updateCache(o,s,30*1e3),s}async getOwnerCoinBalances(e,t){let n=[];return t?n=[await this.fullClient.getBalance({owner:e,coinType:t})]:n=[...await this.fullClient.getAllBalances({owner:e})],n}updateCache(e,t,n=U){let s=this._cache[e];s?(s.overdueTime=N(n),s.value=t):s=new I(t,N(n)),this._cache[e]=s}getCache(e,t=!1){let n=this._cache[e],s=n?.isValid();if(!t&&s)return n.value;s||delete this._cache[e]}};var vs="0x0000000000000000000000000000000000000000000000000000000000000006",Ds="pool_script",Es="pool_script_v2",Ms="router",Ps="router_with_partner",Rs="fetcher_script",qs="expect_swap",Is="utils",Us="0x1::coin::CoinInfo",Ns="0x1::coin::CoinStore",Fs="custodian_v2",$s="clob_v2",Ls="endpoints_v2",Vs=i=>{if(typeof i=="string"&&i.startsWith("0x"))return"object";if(typeof i=="number"||typeof i=="bigint")return"u64";if(typeof i=="boolean")return"bool";throw new Error(`Unknown type for value: ${i}`)};var en=K;export{vs as CLOCK_ADDRESS,I as CachedContent,K as CetusClmmSDK,qs as ClmmExpectSwapModule,Rs as ClmmFetcherModule,Ds as ClmmIntegratePoolModule,Es as ClmmIntegratePoolV2Module,Ms as ClmmIntegrateRouterModule,Ps as ClmmIntegrateRouterWithPartnerModule,Is as ClmmIntegrateUtilsModule,w as CoinAssist,Us as CoinInfoAddress,Ns as CoinStoreAddress,ee as DEEP_SCALAR,Qe as DEFAULT_GAS_BUDGET_FOR_MERGE,Ze as DEFAULT_GAS_BUDGET_FOR_SPLIT,We as DEFAULT_GAS_BUDGET_FOR_STAKE,ze as DEFAULT_GAS_BUDGET_FOR_TRANSFER,Je as DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,Xe as DEFAULT_NFT_TRANSFER_GAS_FEE,$s as DeepbookClobV2Moudle,Fs as DeepbookCustodianV2Moudle,Ls as DeepbookEndpointsV2Moudle,G as DeepbookUtilsModule,$ as FLOAT_SCALAR,Ye as GAS_SYMBOL,Z as GAS_TYPE_ARG,ne as GAS_TYPE_ARG_LONG,mt as NORMALIZED_SUI_COIN_TYPE,V as RpcModule,et as SUI_SYSTEM_STATE_OBJECT_ID,P as TransactionUtil,re as addHexPrefix,Ft as asIntN,Nt as asUintN,rt as bufferToHex,U as cacheTime24h,se as cacheTime5min,nt as checkAddress,oe as composeType,c as d,W as decimalsMultiplier,en as default,pt as extractAddressFromType,E as extractStructTagFromType,gt as fixCoinType,R as fixDown,Ee as fixSuiObjectId,$t as fromDecimalsAmount,Vs as getDefaultSuiInputType,N as getFutureTime,X as getMoveObject,Ue as getMoveObjectType,xt as getMovePackageContent,Pe as getObjectDeletedResponse,Dt as getObjectDisplay,de as getObjectFields,le as getObjectId,Re as getObjectNotExistsResponse,vt as getObjectOwner,Bt as getObjectPreviousTransactionDigest,ue as getObjectReference,jt as getObjectType,Tt as getObjectVersion,F as getSuiObjectData,Et as hasPublicTransfer,it as hexToNumber,ot as hexToString,dt as isSortedSymbols,qe as isSuiObjectResponse,Y as maxDecimal,H as normalizeCoinType,J as patchFixSuiObjectId,At as printTransaction,Q as removeHexPrefix,Lt as secretKeyToEd25519Keypair,Vt as secretKeyToSecp256k1Keypair,st as shortAddress,Oe as shortString,we as toBuffer,Ut as toDecimalsAmount,Te as utf8to16};
|
|
1
|
+
var ke=Object.defineProperty;var Se=(i,e,t)=>e in i?ke(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var se=(i,e,t)=>(Se(i,typeof e!="symbol"?e+"":e,t),t);var re=5*60*1e3,U=24*60*60*1e3;function $(i){return Date.parse(new Date().toString())+i}var N=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};import{normalizeSuiObjectId as W,normalizeStructTag as Be,SUI_TYPE_ARG as ve}from"@mysten/sui/utils";var Ae="0x2::coin::Coin",Oe=/^0x2::coin::Coin<(.+)>$/,Je=1e3,We=500,Ye=100,Xe=100,et=1e3,z="0x2::sui::SUI",ie="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",tt="SUI",nt=450,st="0x0000000000000000000000000000000000000005",w=class{static getCoinTypeArg(e){let t=e.type.match(Oe);return t?t[1]:null}static isSUI(e){let t=w.getCoinTypeArg(e);return t?w.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let s=BigInt(0);return e.forEach(n=>{t===n.coinAddress&&(s+=BigInt(n.balance))}),s}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${Ae}<${e}>`}static getCoinAssets(e,t){let s=[];return t.forEach(n=>{Q(n.coinAddress)===Q(e)&&s.push(n)}),s}static isSuiCoin(e){return E(e).full_address===z}static selectCoinObjectIdGreaterThanOrEqual(e,t,s=[]){let n=w.selectCoinAssetGreaterThanOrEqual(e,t,s),r=n.selectedCoins.map(u=>u.coinObjectId),o=n.remainingCoins,c=n.selectedCoins.map(u=>u.balance.toString());return{objectArray:r,remainCoins:o,amountArray:c}}static selectCoinAssetGreaterThanOrEqual(e,t,s=[]){let n=w.sortByBalance(e.filter(l=>!s.includes(l.coinObjectId))),r=w.calculateTotalBalance(n);if(r<t)return{selectedCoins:[],remainingCoins:n};if(r===t)return{selectedCoins:n,remainingCoins:[]};let o=BigInt(0),c=[],u=[...n];for(;o<r;){let l=t-o,m=u.findIndex(d=>d.balance>=l);if(m!==-1){c.push(u[m]),u.splice(m,1);break}let g=u.pop();g.balance>0&&(c.push(g),o+=g.balance)}return{selectedCoins:w.sortByBalance(c),remainingCoins:w.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,s)=>t.balance<s.balance?-1:t.balance>s.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,s)=>t.balance>s.balance?-1:t.balance<s.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,s)=>t+s.balance,BigInt(0))}};var we=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function oe(i){return i.startsWith("0x")?i:`0x${i}`}function J(i){return i.startsWith("0x")?`${i.slice(2)}`:i}function Te(i,e=4,t=4){let s=Math.max(e,1),n=Math.max(t,1);return`${i.slice(0,s+2)} ... ${i.slice(-n)}`}function it(i,e=4,t=4){return Te(oe(i),e,t)}function ot(i,e={leadingZero:!0}){if(typeof i!="string")return!1;let t=i;if(e.leadingZero){if(!i.startsWith("0x"))return!1;t=t.substring(2)}return we.test(t)}function xe(i){if(!Buffer.isBuffer(i))if(Array.isArray(i))i=Buffer.from(i);else if(typeof i=="string")exports.isHexString(i)?i=Buffer.from(exports.padToEven(exports.stripHexPrefix(i)),"hex"):i=Buffer.from(i);else if(typeof i=="number")i=exports.intToBuffer(i);else if(i==null)i=Buffer.allocUnsafe(0);else if(i.toArray)i=Buffer.from(i.toArray());else throw new Error("invalid type");return i}function at(i){return oe(xe(i).toString("hex"))}function ct(i){let e=new ArrayBuffer(4),t=new DataView(e);for(let n=0;n<i.length;n++)t.setUint8(n,i.charCodeAt(n));return t.getUint32(0,!0)}function je(i){let e,t,s,n,r;e="";let o=i.length;for(t=0;t<o;)switch(s=i.charCodeAt(t++),s>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=i.charAt(t-1);break;case 12:case 13:n=i.charCodeAt(t++),e+=String.fromCharCode((s&31)<<6|n&63);break;case 14:n=i.charCodeAt(t++),r=i.charCodeAt(t++),e+=String.fromCharCode((s&15)<<12|(n&63)<<6|(r&63)<<0);break}return e}function ut(i){let e="",t=J(i),s=t.length/2;for(let n=0;n<s;n++)e+=String.fromCharCode(parseInt(t.substr(n*2,2),16));return je(e)}var De=0,ue=1,Me=2;function ae(i,e){return i===e?De:i<e?ue:Me}function Ee(i,e){let t=0,s=i.length<=e.length?i.length:e.length,n=ae(i.length,e.length);for(;t<s;){let r=ae(i.charCodeAt(t),e.charCodeAt(t));if(t+=1,r!==0)return r}return n}function mt(i,e){return Ee(i,e)===ue}function ce(i,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],n=[i,...e].filter(Boolean).join("::");return t&&t.length&&(n+=`<${t.join(", ")}>`),n}function bt(i){return i.split("::")[0]}function E(i){try{let e=i.replace(/\s/g,""),s=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(s){e=e.slice(0,e.indexOf("<"));let u={...E(e),type_arguments:s.map(l=>E(l).source_address)};return u.type_arguments=u.type_arguments.map(l=>w.isSuiCoin(l)?l:E(l).source_address),u.source_address=ce(u.full_address,u.type_arguments),u}let n=e.split("::"),o={full_address:e,address:e===z||e===ie?"0x2":W(n[0]),module:n[1],name:n[2],type_arguments:[],source_address:""};return o.full_address=`${o.address}::${o.module}::${o.name}`,o.source_address=ce(o.full_address,o.type_arguments),o}catch{return{full_address:i,address:"",module:"",name:"",type_arguments:[],source_address:i}}}function Q(i){return E(i).source_address}function Pe(i){return i.toLowerCase().startsWith("0x")?W(i):i}var _t=(i,e=!0)=>{let t=i.split("::"),s=t.shift(),n=W(s);return e&&(n=J(n)),`${n}::${t.join("::")}`};function Y(i){for(let e in i){let t=typeof i[e];if(t==="object")Y(i[e]);else if(t==="string"){let s=i[e];i[e]=Pe(s)}}}var ht=Be(ve);import le from"decimal.js";le.config({precision:64,rounding:le.ROUND_DOWN,toExpNeg:-64,toExpPos:64});import G from"decimal.js";function a(i){return G.isDecimal(i)?i:new G(i===void 0?0:i)}function X(i){return a(10).pow(a(i).abs())}var q=(i,e)=>{try{return a(i).toDP(e,G.ROUND_DOWN).toString()}catch{return i}},ee=(i,e)=>G.max(a(i),a(e));import{Transaction as Re}from"@mysten/sui/transactions";async function Tt(i,e=!0){i.blockData.transactions.forEach((t,s)=>{})}var R=class{static async adjustTransactionForGas(e,t,s,n){n.setSender(e.senderAddress);let r=w.selectCoinAssetGreaterThanOrEqual(t,s).selectedCoins;if(r.length===0)throw new Error("Insufficient balance");let o=w.calculateTotalBalance(t);if(o-s>1e9)return{fixAmount:s};let c=await e.fullClient.calculationTxGas(n);if(w.selectCoinAssetGreaterThanOrEqual(t,BigInt(c),r.map(l=>l.coinObjectId)).selectedCoins.length===0){let l=BigInt(c)+BigInt(500);if(o-s<l){if(s-=l,s<0)throw new Error("gas Insufficient balance");let m=new Re;return{fixAmount:s,newTx:m}}}return{fixAmount:s}}static buildCoinForAmount(e,t,s,n,r=!0,o=!1){let c=w.getCoinAssets(n,t);if(s===BigInt(0)&&c.length===0)return R.buildZeroValueCoin(t,e,n,r);let u=w.calculateTotalBalance(c);if(u<s)throw new Error(`The amount(${u}) is Insufficient balance for ${n} , expect ${s} `);return R.buildCoin(e,t,c,s,n,r,o)}static buildCoin(e,t,s,n,r,o=!0,c=!1){if(w.isSuiCoin(r)){if(o){let b=e.splitCoins(e.gas,[e.pure.u64(n)]);return{targetCoin:e.makeMoveVec({elements:[b]}),remainCoins:t,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(n===0n&&s.length>1){let b=w.selectCoinObjectIdGreaterThanOrEqual(s,n);return{targetCoin:e.object(b.objectArray[0]),remainCoins:b.remainCoins,tragetCoinAmount:b.amountArray[0],isMintZeroCoin:!1}}let C=w.selectCoinObjectIdGreaterThanOrEqual(s,n);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(n)]),remainCoins:C.remainCoins,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let u=w.selectCoinObjectIdGreaterThanOrEqual(s,n),l=u.amountArray.reduce((C,y)=>Number(C)+Number(y),0).toString(),m=u.objectArray;if(o)return{targetCoin:e.makeMoveVec({elements:m.map(C=>e.object(C))}),remainCoins:u.remainCoins,tragetCoinAmount:u.amountArray.reduce((C,y)=>Number(C)+Number(y),0).toString(),isMintZeroCoin:!1};let[g,...d]=m,p=e.object(g),h=p,_=u.amountArray.reduce((C,y)=>Number(C)+Number(y),0).toString(),S;return d.length>0&&e.mergeCoins(p,d.map(C=>e.object(C))),c&&Number(l)>Number(n)&&(h=e.splitCoins(p,[e.pure.u64(n)]),_=n.toString(),S=p),{targetCoin:h,remainCoins:u.remainCoins,originalSplitedCoin:S,tragetCoinAmount:_,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,s,n=!0){let r=R.callMintZeroValueCoin(t,s),o;return n?o=t.makeMoveVec({elements:[r]}):o=r,{targetCoin:o,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,s,n,r=!0){let o=w.getCoinAssets(n,t);if(s.amountFirst===BigInt(0))return o.length>0?R.buildCoin(e,[...t],[...o],s.amountFirst,n,r):R.buildZeroValueCoin(t,e,n,r);let c=w.calculateTotalBalance(o);if(c>=s.amountFirst)return R.buildCoin(e,[...t],[...o],s.amountFirst,n,r);if(c<s.amountSecond)throw new Error(`The amount(${c}) is Insufficient balance for ${n} , expect ${s.amountSecond} `);return R.buildCoin(e,[...t],[...o],s.amountSecond,n,r)}static buildCoinTypePair(e,t){let s=[];if(e.length===2){let n=[];n.push(e[0],e[1]),s.push(n)}else{let n=[];n.push(e[0],e[e.length-1]),s.push(n);for(let r=1;r<e.length-1;r+=1){if(t[r-1]===0)continue;let o=[];o.push(e[0],e[r],e[e.length-1]),s.push(o)}}return s}},I=R;se(I,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));function L(i){return i.data}function Ie(i){if(i.error&&"object_id"in i.error&&"version"in i.error&&"digest"in i.error){let{error:e}=i;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function qe(i){if(i.error&&"object_id"in i.error&&!("version"in i.error)&&!("digest"in i.error))return i.error.object_id}function de(i){if("reference"in i)return i.reference;let e=L(i);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:Ie(i)}function pe(i){return"objectId"in i?i.objectId:de(i)?.objectId??qe(i)}function Bt(i){return"version"in i?i.version:de(i)?.version}function Ue(i){return i.data!==void 0}function Fe(i){return i.content!==void 0}function vt(i){let e=L(i);if(e?.content?.dataType==="package")return e.content.disassembled}function te(i){let e="data"in i?L(i):i;if(!(!e||!Fe(e)||e.content.dataType!=="moveObject"))return e.content}function Ne(i){return te(i)?.type}function Dt(i){let e=Ue(i)?i.data:i;return!e?.type&&"data"in i?e?.content?.dataType==="package"?"package":Ne(i):e?.type}function Mt(i){return L(i)?.previousTransaction}function Et(i){return L(i)?.owner}function Pt(i){let e=L(i)?.display;return e||{data:null,error:null}}function ge(i){let e=te(i)?.fields;if(e)return"fields"in e?e.fields:e}function Rt(i){return te(i)?.hasPublicTransfer??!1}import{fromB64 as _e,fromHEX as he}from"@mysten/bcs";import{Ed25519Keypair as me}from"@mysten/sui/keypairs/ed25519";import{Secp256k1Keypair as be}from"@mysten/sui/keypairs/secp256k1";function $t(i,e){let t=X(a(e));return Number(a(i).mul(t))}function Lt(i,e=32){return BigInt.asUintN(e,BigInt(i)).toString()}function Vt(i,e=32){return Number(BigInt.asIntN(e,BigInt(i)))}function F(i,e){let t=X(a(e));return Number(a(i).div(t))}function Gt(i,e="hex"){if(i instanceof Uint8Array){let s=Buffer.from(i);return me.fromSecretKey(s)}let t=e==="hex"?he(i):_e(i);return me.fromSecretKey(t)}function Kt(i,e="hex"){if(i instanceof Uint8Array){let s=Buffer.from(i);return be.fromSecretKey(s)}let t=e==="hex"?he(i):_e(i);return be.fromSecretKey(t)}import{SuiClient as $e}from"@mysten/sui/client";var K=class extends $e{async queryEventsByPage(e,t="all"){let s=[],n=!0,r=t==="all",o=r?null:t.cursor;do{let c=await this.queryEvents({query:e,cursor:o,limit:r?null:t.limit});c.data?(s=[...s,...c.data],n=c.hasNextPage,o=c.nextCursor):n=!1}while(r&&n);return{data:s,nextCursor:o,hasNextPage:n}}async getOwnedObjectsByPage(e,t,s="all"){let n=[],r=!0,o=s==="all",c=o?null:s.cursor;do{let u=await this.getOwnedObjects({owner:e,...t,cursor:c,limit:o?null:s.limit});u.data?(n=[...n,...u.data],r=u.hasNextPage,c=u.nextCursor):r=!1}while(o&&r);return{data:n,nextCursor:c,hasNextPage:r}}async getDynamicFieldsByPage(e,t="all"){let s=[],n=!0,r=t==="all",o=r?null:t.cursor;do{let c=await this.getDynamicFields({parentId:e,cursor:o,limit:r?null:t.limit});c.data?(s=[...s,...c.data],n=c.hasNextPage,o=c.nextCursor):n=!1}while(r&&n);return{data:s,nextCursor:o,hasNextPage:n}}async batchGetObjects(e,t,s=50){let n=[];try{for(let r=0;r<Math.ceil(e.length/s);r++){let o=await this.multiGetObjects({ids:e.slice(r*s,s*(r+1)),options:t});n=[...n,...o]}}catch{}return n}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let s=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:n}=s.effects;return Number(n.computationCost)+Number(n.storageCost)-Number(n.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};import{DeepBookClient as fe}from"@mysten/deepbook-v3";import{bcs as f}from"@mysten/sui/bcs";import{Base64 as Le}from"js-base64";import{Transaction as O,coinWithBalance as Ce}from"@mysten/sui/transactions";import{normalizeStructTag as D,SUI_CLOCK_OBJECT_ID as B,normalizeSuiObjectId as Ve}from"@mysten/sui/utils";function v(...i){let e="DeepbookV3_Utils_Sdk###"}var ne=1e6,M=1e9,Ge={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},Ke={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},ye=1e3*60*60*24*365*100,H=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?Ke:Ge}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new O,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}async getBalanceManager(e,t=!0){let s=`getBalanceManager_${e}`,n=this.getCache(s,t);if(!t&&n!==void 0)return n;let r=new O;r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[r.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),r.pure.address(e)],typeArguments:[]});let u=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}))?.events?.filter(m=>m.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],l=[];return u.forEach(m=>{l.push({balanceManager:m,cetusBalanceManager:""})}),this.updateCache(s,l,U),l||[]}createAndDepsit({account:e,coin:t,amountToDeposit:s}){let n=new O;n.setSenderIfNotSet(e);let r=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),o=Ce({type:t.coinType,balance:BigInt(s)});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[r,o],typeArguments:[t.coinType]}),n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),r],typeArguments:[]}),n.moveCall({target:"0x2::transfer::public_share_object",arguments:[r],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),n}depositIntoManager({account:e,balanceManager:t,coin:s,amountToDeposit:n,tx:r}){let o=r||new O;if(t){o.setSenderIfNotSet(e);let c=Ce({type:s.coinType,balance:BigInt(n)});return o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[o.object(t),c],typeArguments:[s.coinType]}),o}return null}withdrawFromManager({account:e,balanceManager:t,coin:s,amountToWithdraw:n,returnAssets:r,txb:o}){let c=o||new O,u=c.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[c.object(t),c.pure.u64(n)],typeArguments:[s.coinType]});return r?u:(c.transferObjects([u],e),c)}withdrawManagersFreeBalance({account:e,balanceManagers:t,tx:s=new O}){for(let n in t)t[n].forEach(o=>{let c=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::withdraw`,arguments:[s.object(n),s.pure.u64(o.amount)],typeArguments:[o.coinType]});s.transferObjects([c],e)});return s}withdrawSettledAmounts({poolInfo:e,balanceManager:t}){let s=new O,n=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[s.object(t)]});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[s.object(e.address),s.object(t),n],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),s}async getManagerBalance({account:e,balanceManager:t,coins:s}){let n=new O;s.forEach(c=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[n.object(t)],typeArguments:[c.coinType]})});let r=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n}),o={};return r.results?.forEach((c,u)=>{let l=s[u],m=c.returnValues[0][0],g=f.U64.parse(new Uint8Array(m)),d=a(g),p=d.eq(0)?"0":d.div(Math.pow(10,l.decimals)).toString();o[l.coinType]={adjusted_balance:p,balance:d.toString()}}),o}async getAccountAllManagerBalance({account:e,coins:t}){let s=new O,n=await this.getBalanceManager(e,!0);n.forEach(c=>{t.forEach(u=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[s.object(c.balanceManager)],typeArguments:[u.coinType]})})});let r=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}),o={};return n.forEach((c,u)=>{let l={},m=u*t.length;t.forEach((g,d)=>{let p=m+d,h=r.results?.[p];if(h){let _=h.returnValues[0][0],S=f.U64.parse(new Uint8Array(_)),C=a(S),y=C.eq(0)?"0":C.div(Math.pow(10,g.decimals)).toString();l[g.coinType]={adjusted_balance:y,balance:C.toString()}}}),o[c.balanceManager]=l}),o}async getMarketPrice(e){try{let t=new O;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(B)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],r=Number(f.U64.parse(new Uint8Array(n))),o=Math.pow(10,e.baseCoin.decimals).toString(),c=Math.pow(10,e.quoteCoin.decimals).toString();return a(r).mul(o).div(c).div(M).toString()}catch(t){return v("getMarketPrice ~ error:",t),"0"}}async getPools(){let e=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),t=/<([^>]+)>/,s=[];return e?.data?.forEach(n=>{let r=n?.parsedJson,o=n.type.match(t);if(o){let u=o[1].split(", ");s.push({...r,baseCoinType:u[0],quoteCoinType:u[1]})}}),s}async getQuoteQuantityOut(e,t,s){let n=new O;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(B)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=String(f.U64.parse(new Uint8Array(r.results[0].returnValues[0][0]))),c=String(f.U64.parse(new Uint8Array(r.results[0].returnValues[1][0]))),u=String(f.U64.parse(new Uint8Array(r.results[0].returnValues[2][0])));return{baseQuantityDisplay:a(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:a(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(c).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(u).div(ne).toString(),baseQuantity:t,baseOut:o,quoteOut:c,deepRequired:u}}async getBaseQuantityOut(e,t,s){let n=new O;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(B)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=String(f.U64.parse(new Uint8Array(r.results[0].returnValues[0][0]))),c=String(f.U64.parse(new Uint8Array(r.results[0].returnValues[1][0]))),u=String(f.U64.parse(new Uint8Array(r.results[0].returnValues[2][0])));return{quoteQuantityDisplay:a(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:a(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(c).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(u).div(ne).toString(),quoteQuantity:t,baseOut:o,quoteOut:c,deepRequired:u}}async getQuantityOut(e,t,s,n){let r=new O;r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[r.object(e.address),r.pure.u64(t),r.pure.u64(s),r.object(B)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:r}),c=Number(f.U64.parse(new Uint8Array(o.results[0].returnValues[0][0]))),u=Number(f.U64.parse(new Uint8Array(o.results[0].returnValues[1][0]))),l=Number(f.U64.parse(new Uint8Array(o.results[0].returnValues[2][0])));return{baseQuantityDisplay:a(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:a(s).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:a(c).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:a(u).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:a(l).div(ne).toString(),baseQuantity:t,quoteQuantity:s,baseOut:c,quoteOut:u,deepRequired:l}}async estimatedMaxFee(e,t,s,n,r,o,c){let u=this.deepCoin,{taker_fee:l,maker_fee:m}=e,g=a(l).div(M).toString(),d=a(m).div(M).toString(),p=await this.getMarketPrice(e),h=o?s:p!=="0"?p:c;if(h==="0")throw new Error("Cannot get market price");let _=Math.pow(10,e.baseCoin.decimals).toString(),S=Math.pow(10,e.quoteCoin.decimals).toString(),C=a(h).div(_).mul(S).mul(M).toString();if(n){let y=await this.getMarketPrice(e),A=a(o?s:y!=="0"?y:c).div(_).mul(S).mul(M).toString(),j=await this.getOrderDeepPrice(e);if(!j)throw new Error("Cannot get deep price");let k=ee(A,s),T=a(t).mul(a(g)).mul(a(j.deep_per_asset)).div(a(M)),x=a(t).mul(a(d)).mul(a(j.deep_per_asset)).div(a(M));j.asset_is_base||(T=T.mul(k).div(a(M)),x=x.mul(k).div(a(M)));let V=T.ceil().toString(),P=x.ceil().toString();return{takerFee:V,makerFee:P,takerFeeDisplay:F(V,u.decimals).toString(),makerFeeDisplay:F(P,u.decimals).toString(),feeType:u.coinType}}else if(r){let y=ee(C,s),b=a(t).mul(y).mul(g).div(a(M)).ceil().toFixed(0),A=a(t).mul(y).mul(d).div(a(M)).ceil().toFixed(0);return{takerFee:b,makerFee:A,takerFeeDisplay:F(b,e.quoteCoin.decimals).toString(),makerFeeDisplay:F(A,e.quoteCoin.decimals).toString(),feeType:e.quoteCoin.coinType}}else{let y=a(t).mul(a(g).mul(1.25)).ceil().toFixed(0),b=a(t).mul(a(d).mul(1.25)).ceil().toFixed(0);return{takerFee:y,makerFee:b,takerFeeDisplay:F(y,e.baseCoin.decimals).toString(),makerFeeDisplay:F(b,e.baseCoin.decimals).toString(),feeType:e.baseCoin.coinType}}}async getOrderDeepPrice(e){try{let t=new O;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[t.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0];return this.parseOrderDeepPrice(new Uint8Array(n))}catch(t){return v("getMarketPrice ~ error:",t),null}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),s=t.getUint8(0)!==0,n=Number(t.getBigUint64(1,!0));return{asset_is_base:s,deep_per_asset:n}}getCoinAssets(e,t,s,n){return I.buildCoinForAmount(n,s,BigInt(a(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,s,n,r,o,c){let u=this.deepCoin;if(!c)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};let l=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];n&&l.push(u);let m=await this.getManagerBalance({account:r,balanceManager:c,coins:l}),g=m?.[t]?.balance||"0",d=m?.[s]?.balance||"0",p=o&&m?.[u.coinType]?.balance||"0";return{baseManagerBlance:g,quoteManagerBlance:d,feeManaerBalance:p}}getFeeAsset(e,t,s,n,r,o,c,u,l,m){let g=a(e).gt(0)&&l,d="0";if(!g)return{feeAsset:this.getEmptyCoin(m,t),haveDepositFee:"0"};if(o||c){let p=a(r).sub(o?n:s);d=p.lte(0)?e:p.sub(e).lt(0)?p.sub(e).toString():"0"}else d=a(r).sub(e).lt("0")?a(r).sub(e).abs().toString():"0";return{feeAsset:a(d).gt("0")?this.getCoinAssets(t,d,u,m):this.getEmptyCoin(m,t),haveDepositFee:d}}async getTransactionRelatedAssets(e,t,s,n,r,o,c,u,l){let m=this.deepCoin,g=D(e.baseCoin.coinType),d=D(e.quoteCoin.coinType),p=g===m.coinType,h=d===m.coinType,_=!p&&!h,{baseManagerBlance:S,quoteManagerBlance:C,feeManaerBalance:y}=await this.getTransactionRelatedBalance(e,g,d,_,o,c,u),b,A,j=!1,k=await this._sdk.getOwnerCoinAssets(o);if(r){c||(s=a(s).add(a(n)).toString());let x=a(C).sub(s).toString();a(x).lt(0)?(j=!0,A=this.getCoinAssets(d,x,k,l)):A=this.getEmptyCoin(l,d),b=this.getEmptyCoin(l,g)}else{c||(t=a(t).add(a(n)).toString());let x=a(S).sub(t).toString();a(x).lt(0)?(j=!0,b=this.getCoinAssets(g,x,k,l)):b=this.getEmptyCoin(l,g),A=this.getEmptyCoin(l,d)}let T=this.getFeeAsset(n,m.coinType,t,s,y,h,p,k,c,l);return{baseAsset:b,quoteAsset:A,feeAsset:T,haveDeposit:j}}async getMarketTransactionRelatedAssets(e,t,s,n,r,o,c,u,l){let m=this.deepCoin,g=D(e.baseCoin.coinType),d=D(e.quoteCoin.coinType),p=g===m.coinType,h=d===m.coinType,_=!p&&!h,{baseManagerBlance:S,quoteManagerBlance:C}=await this.getTransactionRelatedBalance(e,g,d,_,o,c,u),y,b,A=await this._sdk.getOwnerCoinAssets(o);if(r){c||(s=a(s).add(a(n)).toString());let k=a(C).sub(s).toString();if(a(k).lt(0)){let T;a(C).gt(0)&&(T=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:C,returnAssets:!0,txb:l}));let x=this.getCoinAssets(d,k,A,l);T&&l.mergeCoins(x,[T]),b=x}else b=this.withdrawFromManager({account:o,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:s,returnAssets:!0,txb:l});y=this.getEmptyCoin(l,g)}else{c||(t=a(t).add(a(n)).toString());let k=a(S).sub(t).toString();if(a(k).lt(0)){let T;a(S).gt(0)&&(T=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:S,returnAssets:!0,txb:l}));let x=this.getCoinAssets(g,k,A,l);T&&l.mergeCoins(x,[T]),y=x}else y=this.withdrawFromManager({account:o,balanceManager:u,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:l});b=this.getEmptyCoin(l,d)}let j=this.getEmptyCoin(l,m.coinType);return{baseAsset:y,quoteAsset:b,feeAsset:j}}async createDepositThenPlaceLimitOrder({poolInfo:e,priceInput:t,quantity:s,orderType:n,isBid:r,maxFee:o,account:c,payWithDeep:u,expirationTimestamp:l=Date.now()+ye}){let m=this.deepCoin,g=e.address,d=e.baseCoin.decimals,p=e.quoteCoin.decimals,h=e.baseCoin.coinType,_=e.quoteCoin.coinType,S=a(t).mul(10**(p-d+9)).toString(),C=D(h),y=D(_),b=new O,A,j,k=await this._sdk.getOwnerCoinAssets(c);if(r){let P=a(t).mul(a(s).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();u||(P=a(P).add(a(o)).toString()),j=I.buildCoinForAmount(b,k,BigInt(P),y,!1,!0)?.targetCoin}else{let P=s;u||(P=a(s).abs().add(a(o)).toString()),A=I.buildCoinForAmount(b,k,BigInt(a(P).abs().toString()),C,!1,!0)?.targetCoin}let T=u?a(o).gt(0)?I.buildCoinForAmount(b,k,BigInt(a(o).abs().ceil().toString()),m.coinType,!1,!0).targetCoin:this.getEmptyCoin(b,m.coinType):this.getEmptyCoin(b,m.coinType),x=b.moveCall({typeArguments:[r?h:_],target:"0x2::coin::zero",arguments:[]}),V=[b.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),b.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),b.object(g),r?x:A,r?j:x,T,b.pure.u8(n),b.pure.u8(0),b.pure.u64(S),b.pure.u64(s),b.pure.bool(r),b.pure.bool(!1),b.pure.u64(l),b.object(B)];return b.moveCall({typeArguments:[C,y],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:V}),b}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder({poolInfo:e,quantity:t,isBid:s,maxFee:n,account:r,payWithDeep:o,slippage:c=.01}){let u=e.address,l=e.baseCoin.coinType,m=e.quoteCoin.coinType,g=D(l),d=D(m),p=new O,h,_,S=t,C,y=await this.getOrderBook(e,"all",6);if(s){let k=y?.ask?.[0]?.price||"0",T=a(k).mul(a(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();C=a(T).plus(a(T).mul(c)).ceil().toString()}else{let k=await y?.bid?.[0]?.price||"0",T=a(k).mul(a(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();C=a(T).minus(a(T).mul(c)).floor().toString()}let b=await this._sdk.getOwnerCoinAssets(r);s?(o||(C=a(C).add(a(n)).toString()),_=this.getCoinAssets(d,C,b,p),h=this.getEmptyCoin(p,g)):(o||(S=a(S).add(a(n)).toString()),_=this.getEmptyCoin(p,d),h=this.getCoinAssets(g,S,b,p));let A=o?a(n).gt(0)?I.buildCoinForAmount(p,b,BigInt(a(n).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(p,this.deepCoin.coinType):this.getEmptyCoin(p,this.deepCoin.coinType),j=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(u),h,_,A,p.pure.u8(0),p.pure.u64(t),p.pure.bool(s),p.pure.bool(o),p.pure.u64(C),p.object(B)];return p.moveCall({typeArguments:[g,d],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:j}),p}async placeLimitOrder({balanceManager:e,poolInfo:t,priceInput:s,quantity:n,isBid:r,orderType:o,maxFee:c,account:u,payWithDeep:l,expirationTimestamp:m=Date.now()+ye}){let g=this.deepCoin,d=a(s).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),p=t.baseCoin.coinType,h=t.quoteCoin.coinType,_=new O,S=r?a(s).mul(a(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",C=r?"0":n,{baseAsset:y,quoteAsset:b,feeAsset:A,haveDeposit:j}=await this.getTransactionRelatedAssets(t,C,S,c,r,u,l,e,_);if(j){v("placeLimitOrder~ deposit_then_place_limit_order_by_owner have deposit"),v("placeLimitOrder ~ deposit_then_place_limit_order_by_owner args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,baseAsset:y,quoteAsset:b,feeAsset:A.feeAsset,order_type:0,self_matching_option:0,price:d,quantity:n,is_bid:r,expirationTimestamp:m,SUI_CLOCK_OBJECT_ID:B});let k=[_.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),_.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),_.object(t.address),_.object(e),y,b,A.feeAsset,_.pure.u8(o),_.pure.u8(0),_.pure.u64(d),_.pure.u64(n),_.pure.bool(r),_.pure.bool(l),_.pure.u64(m),_.object(B)];return _.moveCall({typeArguments:[p,h],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:k}),_}else{let k=new O;a(A.haveDepositFee).gt(0)&&this.depositIntoManager({account:u,balanceManager:e,coin:g,amountToDeposit:A.haveDepositFee,tx:k}),v("placeLimitOrder~ not have deposit"),v("placeLimitOrder ~ args: ",{global_config_id:this._sdk.sdkOptions.deepbook_utils.global_config_id,cetus_balance_manager_indexer_id:this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id,poolId:t.address,balanceManager:e,order_type:0,self_matching_option:0,price:d,quantity:n,is_bid:r,pay_with_deep:!0,expirationTimestamp:m,SUI_CLOCK_OBJECT_ID:B});let T=[k.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),k.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),k.object(t.address),k.object(e),k.pure.u8(o),k.pure.u8(0),k.pure.u64(d),k.pure.u64(n),k.pure.bool(r),k.pure.bool(l),k.pure.u64(m),k.object(B)];return k.moveCall({typeArguments:[p,h],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:T}),k}}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:s}=e,n=new O,r=await this.getMarketPrice(e),o=a(r).gt(0)?r:Math.pow(10,-1),c=Math.pow(10,6),u=a(o).mul(Math.pow(10,9+s.decimals-t.decimals)).toString(),l=a(c).mul(Math.pow(10,9+s.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(u),n.pure.u64(l),n.pure.bool(!1),n.object(B)],typeArguments:[t.coinType,s.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:n}),d=[],p=g.results[0].returnValues[0][0],h=f.vector(f.u64()).parse(new Uint8Array(p)),_=g.results[0].returnValues[1][0],S=f.vector(f.u64()).parse(new Uint8Array(_));return h.forEach((C,y)=>{let b=a(C).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),A=a(S[y]).div(Math.pow(10,t.decimals)).toString();d.push({price:b,quantity:A})}),d?.[0]?.price||0}catch(t){return v("getBestAskprice ~ error:",t),0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:s}=e,n=new O,r=await this.getMarketPrice(e),o=a(r).gt(0)?a(r).div(3).toNumber():Math.pow(10,-6),c=a(r).gt(0)?r:Math.pow(10,6),u=a(o).mul(Math.pow(10,9+s.decimals-t.decimals)).toString(),l=a(c).mul(Math.pow(10,9+s.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(q(u,0)),n.pure.u64(q(l,0)),n.pure.bool(!0),n.object(B)],typeArguments:[t.coinType,s.coinType]});let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:n}),d=[],p=g.results[0].returnValues[0][0],h=f.vector(f.u64()).parse(new Uint8Array(p)),_=g.results[0].returnValues[1][0],S=f.vector(f.u64()).parse(new Uint8Array(_));return h.forEach((C,y)=>{let b=a(C).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),A=a(S[y]).div(Math.pow(10,t.decimals)).toString();d.push({price:b,quantity:A})}),d?.[0]?.price||0}catch(t){return v("getBestBidprice ~ error:",t),0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:s,quoteCoin:n}=e,r=new O,o=await this.getMarketPrice(e),c,u;t?(c=a(o).gt(0)?a(o).div(3).toNumber():Math.pow(10,-6),u=a(o).gt(0)?o:Math.pow(10,6)):(c=a(o).gt(0)?o:Math.pow(10,-1),u=a(o).gt(0)?a(o).mul(3).toNumber():Math.pow(10,6));let l=a(c).mul(Math.pow(10,9+n.decimals-s.decimals)).toString(),m=a(u).mul(Math.pow(10,9+n.decimals-s.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(q(l,0)),r.pure.u64(q(m,0)),r.pure.bool(t),r.object(B)],typeArguments:[s.coinType,n.coinType]});let g=this._sdk.sdkOptions.simulationAccount.address,d=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:r}),p=[],h=d.results[0].returnValues[0][0],_=f.vector(f.u64()).parse(new Uint8Array(h)),S=d.results[0].returnValues[1][0],C=f.vector(f.u64()).parse(new Uint8Array(S));return _.forEach((y,b)=>{let A=a(y).div(Math.pow(10,9+n.decimals-s.decimals)).toString(),j=a(C[b]).div(Math.pow(10,s.decimals)).toString();p.push({price:A,quantity:j})}),p?.[0]?.price||0}catch(s){return v("getBestBidprice ~ error:",s),0}}async placeMarketOrder({balanceManager:e,poolInfo:t,baseQuantity:s,quoteQuantity:n,isBid:r,maxFee:o,account:c,payWithDeep:u,slippage:l=.01}){let m=D(t.baseCoin.coinType),g=D(t.quoteCoin.coinType),d=new O,{baseAsset:p,quoteAsset:h,feeAsset:_}=await this.getMarketTransactionRelatedAssets(t,s,n,o,r,c,u,e,d),S=await this.getOrderBook(t,"all",6);if(r){let b=S?.ask?.[0]?.price||"0",A=a(b).mul(a(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=a(A).plus(a(A).mul(l)).ceil().toString()}else{let b=await S?.bid?.[0]?.price||"0",A=a(b).mul(a(s).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=a(A).minus(a(A).mul(l)).floor().toString()}let C=n;console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:1450 ~ DeepbookUtilsModule ~ placeMarketOrder ~ amountLimit:",{amountLimit:C,quoteQuantity:n});let y=[d.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),d.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),d.object(t.address),d.object(e),p,h,_,d.pure.u8(0),d.pure.u64(s),d.pure.bool(r),d.pure.bool(u),d.pure.u64(C),d.object(B)];return d.setSenderIfNotSet(c),d.moveCall({typeArguments:[m,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:y}),d}async getOpenOrderFromDeepbook(e,t){let s=this._sdk.fullClient,n=new fe({client:s,address:e,env:"testnet",balanceManagers:{test1:{address:t,tradeCap:""}}}),r=await n.accountOpenOrders("DEEP_SUI","test1"),o=await n.getOrder("DEEP_SUI","1844674407389401905673709551611")}async getOrderInfoList(e,t,s){try{let n=new O;t.forEach(m=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[n.object(e.address),n.pure.u128(m)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]})});let r=await this._sdk.fullClient.devInspectTransactionBlock({sender:s,transactionBlock:n}),o=f.struct("ID",{bytes:f.Address}),c=f.struct("OrderDeepPrice",{asset_is_base:f.bool(),deep_per_asset:f.u64()}),u=f.struct("Order",{balance_manager_id:o,order_id:f.u128(),client_order_id:f.u64(),quantity:f.u64(),filled_quantity:f.u64(),fee_is_deep:f.bool(),order_deep_price:c,epoch:f.u64(),status:f.u8(),expire_timestamp:f.u64()}),l=[];return r?.results?.forEach(m=>{let g=m.returnValues[0][0],d=u.parse(new Uint8Array(g));l.push(d)}),l}catch(n){return v("getOrderInfoList ~ error:",n),[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),s=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),n=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:s,orderId:n}}async getOpenOrder(e,t,s,n){let r;if(n)r=n;else{let u=new O;u.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[u.object(e.address),u.object(s)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let m=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:u})).results[0].returnValues[0][0];r=f.struct("VecSet",{constants:f.vector(f.U128)}).parse(new Uint8Array(m)).constants,v("getOpenOrder ~ orderIds:",r)}let o=await this.getOrderInfoList(e,r,t)||[];v("getOpenOrder ~ orderInfoList:",o);let c=[];return o.forEach(u=>{let l=this.decodeOrderId(BigInt(u.order_id));c.push({...u,price:l.price,isBid:l.isBid})}),c}cancelOrders(e,t){let s=new O;return e.forEach(n=>{s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),s.object(t),s.object(n.poolInfo.address),s.pure.u128(n.orderId),s.object(B)],typeArguments:[n.poolInfo.baseCoin.coinType,n.poolInfo.quoteCoin.coinType]})}),s}async getDeepbookOrderBook(e,t,s,n,r,o){let c=this._sdk.fullClient,l=await new fe({client:c,address:r,env:"testnet",balanceManagers:{test1:{address:o,tradeCap:""}}}).getLevel2Range(e,t,s,n)}processOrderBookData(e,t,s,n){let r=e.returnValues[0][0],o=f.vector(f.u64()).parse(new Uint8Array(r)),c=e.returnValues[1][0],u=f.vector(f.u64()).parse(new Uint8Array(c)),l={};return o.forEach((g,d)=>{let p=q(a(g).div(Math.pow(10,9+s.decimals-t.decimals)).toString(),n),h=a(u[d]).div(Math.pow(10,t.decimals)).toString();l[p]?l[p]={price:p,quantity:a(l[p].quantity).add(h).toString()}:l[p]={price:p,quantity:h}}),Object.values(l)}getLevel2RangeTx(e,t,s,n,r=new O){let{baseCoin:o,quoteCoin:c}=e,u=q(a(s).mul(Math.pow(10,9+c.decimals-o.decimals)).toString(),0),l=q(a(n).mul(Math.pow(10,9+c.decimals-o.decimals)).toString(),0);return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(u),r.pure.u64(l),r.pure.bool(t),r.object(B)],typeArguments:[o.coinType,c.coinType]}),r}async fetchOrderBook(e,t,s,n,r,o){let c=new O,{baseCoin:u,quoteCoin:l}=e;try{if(t==="bid"||t==="all"){let h=n,_=s==="0"?r:s;c=this.getLevel2RangeTx(e,!0,h,_,c)}if(t==="ask"||t==="all"){let h=s==="0"?n:s,_=r;c=this.getLevel2RangeTx(e,!1,h,_,c)}let m=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:m,transactionBlock:c}),d=[];(t==="bid"||t==="all")&&(d=g.results?.[0]?this.processOrderBookData(g.results[0],u,l,o):[]);let p=[];if(t==="ask"||t==="all"){let h=t==="ask"?0:1;p=g.results?.[h]?this.processOrderBookData(g.results[h],u,l,o):[]}return{bid:d.sort((h,_)=>_.price-h.price),ask:p.sort((h,_)=>h.price-_.price)}}catch{let g=this._sdk.sdkOptions.simulationAccount.address,d=[],p=[];try{let h=this.getLevel2RangeTx(e,!0,n,s),_=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:h});d=_.results?.[0]?this.processOrderBookData(_.results[0],u,l,o):[]}catch{d=[]}try{let h=this.getLevel2RangeTx(e,!1,n,s),_=await this._sdk.fullClient.devInspectTransactionBlock({sender:g,transactionBlock:h});p=_.results?.[0]?this.processOrderBookData(_.results[0],u,l,o):[]}catch{p=[]}return{bid:d,ask:p}}}async getOrderBook(e,t,s){let n={bid:[],ask:[]};try{let r=await this.getMarketPrice(e),o=t,c=Math.pow(10,-s),u=Math.pow(10,s),l=await this.fetchOrderBook(e,o,r,c,u,s);return{bid:l?.bid,ask:l?.ask}}catch{return n}}async getOrderBookOrigin(e,t){try{let s=new O,n=await this.getMarketPrice(e),{baseCoin:r,quoteCoin:o}=e;if(t==="bid"||t==="all"){let g=Math.pow(10,-6),d=n,p=a(g).mul(Math.pow(10,9+o.decimals-r.decimals)).toString(),h=a(d).mul(Math.pow(10,9+o.decimals-r.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(p),s.pure.u64(h),s.pure.bool(!0),s.object(B)],typeArguments:[r.coinType,o.coinType]})}if(t==="ask"||t==="all"){let g=n,d=Math.pow(10,6),p=a(g).mul(Math.pow(10,9+o.decimals-r.decimals)).toString(),h=a(d).mul(Math.pow(10,9+o.decimals-r.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(p),s.pure.u64(h),s.pure.bool(!1),s.object(B)],typeArguments:[r.coinType,o.coinType]})}let c=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:c,transactionBlock:s}),l=[];if(t==="bid"||t==="all"){let g=u.results[0]?.returnValues[0]?.[0],d=f.vector(f.u64()).parse(new Uint8Array(g)),p=u.results[0]?.returnValues[1]?.[0],h=f.vector(f.u64()).parse(new Uint8Array(p));d.forEach((_,S)=>{let C=a(_).div(Math.pow(10,9+o.decimals-r.decimals)).toString(),y=a(h[S]).div(Math.pow(10,r.decimals)).toString();l.push({price:C,quantity:y})})}let m=[];if(t==="ask"||t==="all"){let g=t==="ask"?0:1,d=u.results[g]?.returnValues[0]?.[0],p=f.vector(f.u64()).parse(new Uint8Array(d)),h=u.results[g]?.returnValues[1]?.[0],_=f.vector(f.u64()).parse(new Uint8Array(h));p.forEach((S,C)=>{let y=a(S).div(Math.pow(10,9+o.decimals-r.decimals)).toString(),b=a(_[C]).div(Math.pow(10,r.decimals)).toString();m.push({price:y,quantity:b})})}return{bid:l,ask:m}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((n,r)=>[D(n.coinType),n]))}async getAccount(e,t){let s=new O;for(let c=0;c<t.length;c++){let u=t[c];s.moveCall({target:"0xade998d24db74df75d96646e1ce7bb996587ce28747b4db600b5ccd82e00cb5a::order_trader::get_account_id",arguments:[s.object(u.address),s.object(e)],typeArguments:[u.baseCoin.coinType,u.quoteCoin.coinType]})}let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:s});console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1808 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ devInspectRes:",JSON.stringify(n,null,2));let r;if(n?.events.length===0)return null;let o=[];return n?.events?.forEach((c,u)=>{r=c?.parsedJson,console.log("\u{1F680} ~ file: deepbookUtilsModule.ts:1816 ~ DeepbookUtilsModule ~ getSettleBalancesAccount ~ eventData:",JSON.stringify(r,null,2));let l=r.account.open_orders.contents,m=r.account.owed_balances,g=r.account.settled_balances,d=r.account.unclaimed_rebates,p=r.account.taker_volume;o.push({balance_manager_id:e,open_orders:l,owed_balances:m,settled_balances:g,unclaimed_rebates:d,taker_volume:p,poolInfo:t[u]})}),o}async getSuiTransactionResponse(e,t=!1){let s=`${e}_getSuiTransactionResponse`,n=this.getCache(s,t);if(n!==void 0)return n;let r;try{r=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{r=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(s,r,U),r}transformExtensions(e,t,s=!0){let n=[];for(let r of t){let{key:o}=r.fields,{value:c}=r.fields;if(o==="labels")try{c=JSON.parse(decodeURIComponent(Le.decode(c)))}catch{}s&&(e[o]=c),n.push({key:o,value:c})}delete e.extension_fields,s||(e.extensions=n)}async getCoinConfigs(e=!1,t=!0){let s=this.sdk.sdkOptions.coinlist.handle,n=`${s}_getCoinConfigs`,r=this.getCache(n,e);if(r)return r;let c=(await this._sdk.fullClient.getDynamicFieldsByPage(s)).data.map(m=>m.objectId),u=await this._sdk.fullClient.batchGetObjects(c,{showContent:!0}),l=[];return u.forEach(m=>{let g=this.buildCoinConfig(m,t);this.updateCache(`${s}_${g.address}_getCoinConfig`,g,U),l.push({...g})}),this.updateCache(n,l,U),l}buildCoinConfig(e,t=!0){let s=ge(e);s=s.value.fields;let n={...s};return n.id=pe(e),n.address=E(s.coin_type.fields.name).full_address,s.pyth_id&&(n.pyth_id=Ve(s.pyth_id)),this.transformExtensions(n,s.extension_fields.fields.contents,t),delete n.coin_type,n}updateCache(e,t,s=re){let n=this._cache[e];n?(n.overdueTime=$(s),n.value=t):n=new N(t,$(s)),this._cache[e]=n}getCache(e,t=!1){let s=this._cache[e],n=s?.isValid();if(!t&&n)return s.value;n||delete this._cache[e]}};var Z=class{_cache={};_rpcModule;_deepbookUtils;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new K({url:e.fullRpcUrl}),this._deepbookUtils=new H(this),Y(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get fullClient(){return this._rpcModule}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,s=!0){let n=[],r=null,o=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,c=this.getCache(o,s);if(c)return c;for(;;){let u=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:r}):this.fullClient.getAllCoins({owner:e,cursor:r}));if(u.data.forEach(l=>{BigInt(l.balance)>0&&n.push({coinAddress:E(l.coinType).source_address,coinObjectId:l.coinObjectId,balance:BigInt(l.balance)})}),r=u.nextCursor,!u.hasNextPage)break}return this.updateCache(o,n,30*1e3),n}async getOwnerCoinBalances(e,t){let s=[];return t?s=[await this.fullClient.getBalance({owner:e,coinType:t})]:s=[...await this.fullClient.getAllBalances({owner:e})],s}updateCache(e,t,s=U){let n=this._cache[e];n?(n.overdueTime=$(s),n.value=t):n=new N(t,$(s)),this._cache[e]=n}getCache(e,t=!1){let s=this._cache[e],n=s?.isValid();if(!t&&n)return s.value;n||delete this._cache[e]}};var Rn="0x0000000000000000000000000000000000000000000000000000000000000006",In="pool_script",qn="pool_script_v2",Un="router",Fn="router_with_partner",Nn="fetcher_script",$n="expect_swap",Ln="utils",Vn="0x1::coin::CoinInfo",Gn="0x1::coin::CoinStore",Kn="custodian_v2",Hn="clob_v2",Zn="endpoints_v2",Qn=i=>{if(typeof i=="string"&&i.startsWith("0x"))return"object";if(typeof i=="number"||typeof i=="bigint")return"u64";if(typeof i=="boolean")return"bool";throw new Error(`Unknown type for value: ${i}`)};var He=(n=>(n[n.NO_RESTRICTION=0]="NO_RESTRICTION",n[n.IMMEDIATE_OR_CANCEL=1]="IMMEDIATE_OR_CANCEL",n[n.FILL_OR_KILL=2]="FILL_OR_KILL",n[n.POST_ONLY=3]="POST_ONLY",n))(He||{});var os=Z;export{Rn as CLOCK_ADDRESS,N as CachedContent,Z as CetusClmmSDK,$n as ClmmExpectSwapModule,Nn as ClmmFetcherModule,In as ClmmIntegratePoolModule,qn as ClmmIntegratePoolV2Module,Un as ClmmIntegrateRouterModule,Fn as ClmmIntegrateRouterWithPartnerModule,Ln as ClmmIntegrateUtilsModule,w as CoinAssist,Vn as CoinInfoAddress,Gn as CoinStoreAddress,ne as DEEP_SCALAR,We as DEFAULT_GAS_BUDGET_FOR_MERGE,Je as DEFAULT_GAS_BUDGET_FOR_SPLIT,et as DEFAULT_GAS_BUDGET_FOR_STAKE,Ye as DEFAULT_GAS_BUDGET_FOR_TRANSFER,Xe as DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,nt as DEFAULT_NFT_TRANSFER_GAS_FEE,Hn as DeepbookClobV2Moudle,Kn as DeepbookCustodianV2Moudle,Zn as DeepbookEndpointsV2Moudle,H as DeepbookUtilsModule,M as FLOAT_SCALAR,tt as GAS_SYMBOL,z as GAS_TYPE_ARG,ie as GAS_TYPE_ARG_LONG,ht as NORMALIZED_SUI_COIN_TYPE,He as OrderType,K as RpcModule,st as SUI_SYSTEM_STATE_OBJECT_ID,I as TransactionUtil,oe as addHexPrefix,Vt as asIntN,Lt as asUintN,at as bufferToHex,U as cacheTime24h,re as cacheTime5min,ot as checkAddress,ce as composeType,a as d,X as decimalsMultiplier,os as default,bt as extractAddressFromType,E as extractStructTagFromType,_t as fixCoinType,q as fixDown,Pe as fixSuiObjectId,F as fromDecimalsAmount,Qn as getDefaultSuiInputType,$ as getFutureTime,te as getMoveObject,Ne as getMoveObjectType,vt as getMovePackageContent,Ie as getObjectDeletedResponse,Pt as getObjectDisplay,ge as getObjectFields,pe as getObjectId,qe as getObjectNotExistsResponse,Et as getObjectOwner,Mt as getObjectPreviousTransactionDigest,de as getObjectReference,Dt as getObjectType,Bt as getObjectVersion,L as getSuiObjectData,Rt as hasPublicTransfer,ct as hexToNumber,ut as hexToString,mt as isSortedSymbols,Ue as isSuiObjectResponse,ee as maxDecimal,Q as normalizeCoinType,Y as patchFixSuiObjectId,Tt as printTransaction,J as removeHexPrefix,Gt as secretKeyToEd25519Keypair,Kt as secretKeyToSecp256k1Keypair,it as shortAddress,Te as shortString,xe as toBuffer,$t as toDecimalsAmount,je as utf8to16};
|