@typus/typus-sdk 1.2.87-tails-exp → 1.2.87
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/lib/config.json +6 -2
- package/lib/utils/api/sentio/reward-generated.js +4 -24
- package/lib/utils/nft-staking/user-entry.d.ts +1 -1
- package/lib/utils/nft-staking/user-entry.js +2 -2
- package/lib/utils/token.js +6 -0
- package/lib/utils/tools.d.ts +4 -0
- package/lib/utils/tools.js +26 -1
- package/lib/utils/typus-dov-single-v2/function/bidding.d.ts +151 -0
- package/lib/utils/typus-dov-single-v2/function/bidding.js +834 -0
- package/lib/utils/typus-dov-single-v2/function/token.d.ts +21 -0
- package/lib/utils/typus-dov-single-v2/function/token.js +38 -0
- package/lib/utils/typus-dov-single-v2/function/vault.d.ts +8 -0
- package/lib/utils/typus-dov-single-v2/function/vault.js +23 -0
- package/package.json +5 -2
package/lib/config.json
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"TGLD_COIN_METADATA": "0x3a070c729606334a2be7c51ab28da9a1101b0de01452dd62c10cda0f7a5795d2",
|
|
6
6
|
"TGLD_TOKEN_POLICY": "0xd9461bd329f1df24be9698131b6e2c2b9eaac7c9cf6d76689112f2e57be12009",
|
|
7
7
|
"NFT_TRANSFER_POLICY": "0x55475b9e16d9a0176dcef37f83a1921b15f2cbd2711a5f30b9d952c0c8f5f957",
|
|
8
|
+
"STRATEGY_POOL": "0x2c60ddd50d76beb00faa025962d566359a6ea05b1f7f19ac6bd050f4db8c885c",
|
|
8
9
|
"PACKAGE_ORIGIN": {
|
|
9
10
|
"DOV_SINGLE": "0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a",
|
|
10
11
|
"FRAMEWORK": "0xb4f25230ba74837d8299e92951306100c4a532e8c48cc3d8828abe9b91c8b274",
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
"TYPUS": "0x4b0f4ee1a40ce37ec81c987cc4e76a665419e74b863319492fc7d26f708b835a"
|
|
15
16
|
},
|
|
16
17
|
"PACKAGE": {
|
|
17
|
-
"DOV_SINGLE": "
|
|
18
|
+
"DOV_SINGLE": "0x8b65b817e7d819ab810bf50eaaa521ceea39d85cd46ab58180cfe287ce6f8ef0",
|
|
18
19
|
"FRAMEWORK": "0x946d188d91cabd4fe15ef763e463a6738db1965814d3fd790085b4720cf90e28",
|
|
19
20
|
"MFUD": "0xd8f04cd2a16c19c17428c3b4c22b01dd06740423b93fb7ee88fbe2676a82849d",
|
|
20
21
|
"NFT": "0xba06aae31d9b7c9f651e783272c7e4f776fb5ae17e89d525b75a17b099f58202",
|
|
@@ -45,7 +46,9 @@
|
|
|
45
46
|
"SUI": "0xeb6b3e3300ff884604ead6172b0aeadee3854980cab65a7feb57300b04b74cc1",
|
|
46
47
|
"TURBOS": "0x819ff07b5768d7b9b428b69b123140f6a74b04eaa978a4cbab9055025bd1536d",
|
|
47
48
|
"WBTC": "0x61813dc2e46dba41b14507857827f0ed7e99b0be242548828769728b81c8fab5",
|
|
48
|
-
"WETH": "0x253bbaaa35275240cf6df03258489707ea059762831e4102ebaabafd442bc935"
|
|
49
|
+
"WETH": "0x253bbaaa35275240cf6df03258489707ea059762831e4102ebaabafd442bc935",
|
|
50
|
+
"VSUI": "0x454a942594b52fbe08f7bab38c4ee3f677564a23ac1636dc21231f6fb5fc4538",
|
|
51
|
+
"HASUI": "0xae6f3bb346766afa6165190b78419316947b431d135e152a2f0324932caba33c"
|
|
49
52
|
}
|
|
50
53
|
},
|
|
51
54
|
"TESTNET": {
|
|
@@ -54,6 +57,7 @@
|
|
|
54
57
|
"TGLD_COIN_METADATA": "0xf77f8aabe64dccef0e568f2ef58a6ca74bdfb31786507cc35b7626a4df0d0ebc",
|
|
55
58
|
"TGLD_TOKEN_POLICY": "0x17875c2f772053cd148bd2b8b8a40160db3f841825d8963192f8394d5c18974c",
|
|
56
59
|
"NFT_TRANSFER_POLICY": "0x1c62271ecc443c3d92a8fe8f5662e877856d26b971d967f66937a65f55160831",
|
|
60
|
+
"STRATEGY_POOL": "0x50b01081469d032e04bfcbd057614b1359376920f55c7bebd076e0e2af07a57f",
|
|
57
61
|
"PACKAGE_ORIGIN": {
|
|
58
62
|
"DOV_SINGLE": "0x6c9a394a43844fc09d9617bc8a8e775a4521f0e28e83de1da780d043a498671f",
|
|
59
63
|
"FRAMEWORK": "0x908a10789a1a6953e0b73a997c10e3552f7ce4e2907afd00a334ed74bd973ded",
|
|
@@ -165,7 +165,7 @@ function getAccumulatedRewardGeneratedUSD() {
|
|
|
165
165
|
queries: [
|
|
166
166
|
{
|
|
167
167
|
metricsQuery: {
|
|
168
|
-
query: "
|
|
168
|
+
query: "AccumulatedPremiumUSD",
|
|
169
169
|
alias: "",
|
|
170
170
|
id: "a",
|
|
171
171
|
labelSelector: {},
|
|
@@ -173,34 +173,14 @@ function getAccumulatedRewardGeneratedUSD() {
|
|
|
173
173
|
op: "SUM",
|
|
174
174
|
grouping: [],
|
|
175
175
|
},
|
|
176
|
-
functions: [
|
|
177
|
-
|
|
178
|
-
name: "sum_over_time",
|
|
179
|
-
arguments: [
|
|
180
|
-
{
|
|
181
|
-
durationValue: {
|
|
182
|
-
value: 100,
|
|
183
|
-
unit: "w",
|
|
184
|
-
},
|
|
185
|
-
},
|
|
186
|
-
],
|
|
187
|
-
},
|
|
188
|
-
],
|
|
189
|
-
disabled: true,
|
|
176
|
+
functions: [],
|
|
177
|
+
disabled: false,
|
|
190
178
|
},
|
|
191
179
|
dataSource: "METRICS",
|
|
192
180
|
sourceName: "",
|
|
193
181
|
},
|
|
194
182
|
],
|
|
195
|
-
formulas: [
|
|
196
|
-
{
|
|
197
|
-
expression: "a/2",
|
|
198
|
-
alias: "",
|
|
199
|
-
id: "A",
|
|
200
|
-
disabled: false,
|
|
201
|
-
functions: [],
|
|
202
|
-
},
|
|
203
|
-
],
|
|
183
|
+
formulas: [],
|
|
204
184
|
};
|
|
205
185
|
jsonDataV1 = JSON.stringify(requestDataV1);
|
|
206
186
|
return [4 /*yield*/, fetch(apiUrlV1, {
|
|
@@ -51,7 +51,7 @@ export declare function getDailyAttendTx(gasBudget: number, nftPackageId: string
|
|
|
51
51
|
ctx: &mut TxContext
|
|
52
52
|
)
|
|
53
53
|
*/
|
|
54
|
-
export declare function getSnapshotTx(gasBudget: number, typusEcosystemVersion: string, typusUserRegistry: string,
|
|
54
|
+
export declare function getSnapshotTx(gasBudget: number, typusEcosystemVersion: string, typusUserRegistry: string, typusDovSinglePackageId: string, registry: string, amount: string): Promise<TransactionBlock>;
|
|
55
55
|
export declare function getNewBidTx(gasBudget: number, packageId: string, typeArguments: string[], registry: string, additional_config_registry: string, index: string, priceOracle: string, coins: string[], size: string, premium_required: string, // fe float * b_token_decimal
|
|
56
56
|
usingSponsoredGasCoin?: boolean): Promise<TransactionBlock>;
|
|
57
57
|
export declare function getDepositTx(gasBudget: number, packageId: string, typeArguments: string[], registry: string, additional_config_registry: string, index: string, coins: string[], amount: string, usingSponsoredGasCoin?: boolean): Promise<TransactionBlock>;
|
|
@@ -380,13 +380,13 @@ exports.getDailyAttendTx = getDailyAttendTx;
|
|
|
380
380
|
ctx: &mut TxContext
|
|
381
381
|
)
|
|
382
382
|
*/
|
|
383
|
-
function getSnapshotTx(gasBudget, typusEcosystemVersion, typusUserRegistry,
|
|
383
|
+
function getSnapshotTx(gasBudget, typusEcosystemVersion, typusUserRegistry, typusDovSinglePackageId, registry, amount) {
|
|
384
384
|
return __awaiter(this, void 0, void 0, function () {
|
|
385
385
|
var tx;
|
|
386
386
|
return __generator(this, function (_a) {
|
|
387
387
|
tx = new transactions_1.TransactionBlock();
|
|
388
388
|
tx.moveCall({
|
|
389
|
-
target: "".concat(
|
|
389
|
+
target: "".concat(typusDovSinglePackageId, "::tails_staking::snapshot"),
|
|
390
390
|
typeArguments: [],
|
|
391
391
|
arguments: [tx.object(typusEcosystemVersion), tx.object(typusUserRegistry), tx.object(registry), tx.pure(amount)],
|
|
392
392
|
});
|
package/lib/utils/token.js
CHANGED
|
@@ -10,6 +10,8 @@ exports.typeArgsToAssets = typeArgsToAssets;
|
|
|
10
10
|
function typeArgToAsset(typeArg) {
|
|
11
11
|
var typeArgs = typeArg.split("::");
|
|
12
12
|
switch ((0, utils_1.normalizeSuiAddress)(typeArgs[0])) {
|
|
13
|
+
case "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55":
|
|
14
|
+
return "VSUI";
|
|
13
15
|
case "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881":
|
|
14
16
|
return "WBTC";
|
|
15
17
|
case "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5":
|
|
@@ -90,6 +92,10 @@ function assetToDecimal(asset) {
|
|
|
90
92
|
return 9;
|
|
91
93
|
case "SCA":
|
|
92
94
|
return 9;
|
|
95
|
+
case "HASUI":
|
|
96
|
+
return 9;
|
|
97
|
+
case "VSUI":
|
|
98
|
+
return 9;
|
|
93
99
|
}
|
|
94
100
|
}
|
|
95
101
|
exports.assetToDecimal = assetToDecimal;
|
package/lib/utils/tools.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
1
2
|
export declare function U64FromBytes(x: any): bigint;
|
|
2
3
|
export declare function AddressFromBytes(x: any): string;
|
|
4
|
+
export declare const insertAt: (str: string, sub: string, pos: number) => string;
|
|
5
|
+
export declare const checkNumber: (str: any) => boolean;
|
|
6
|
+
export declare const countFloating: (value: number | BigNumber) => number;
|
package/lib/utils/tools.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AddressFromBytes = exports.U64FromBytes = void 0;
|
|
6
|
+
exports.countFloating = exports.checkNumber = exports.insertAt = exports.AddressFromBytes = exports.U64FromBytes = void 0;
|
|
7
|
+
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
4
8
|
function U64FromBytes(x) {
|
|
5
9
|
var u64 = BigInt(0);
|
|
6
10
|
for (var i = 0; i < x.length; i++) {
|
|
@@ -18,3 +22,24 @@ function AddressFromBytes(x) {
|
|
|
18
22
|
return address;
|
|
19
23
|
}
|
|
20
24
|
exports.AddressFromBytes = AddressFromBytes;
|
|
25
|
+
var insertAt = function (str, sub, pos) { return "".concat(str.slice(0, pos)).concat(sub).concat(str.slice(pos)); };
|
|
26
|
+
exports.insertAt = insertAt;
|
|
27
|
+
var checkNumber = function (str) {
|
|
28
|
+
if (typeof str != "string")
|
|
29
|
+
return false; // we only process strings!
|
|
30
|
+
return (
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
|
|
33
|
+
!isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail
|
|
34
|
+
};
|
|
35
|
+
exports.checkNumber = checkNumber;
|
|
36
|
+
var countFloating = function (value) {
|
|
37
|
+
var num = (0, bignumber_js_1.default)(value).toFixed().replace(/,/g, "");
|
|
38
|
+
if (value instanceof bignumber_js_1.default) {
|
|
39
|
+
num = value.toFixed().replace(/,/g, "");
|
|
40
|
+
}
|
|
41
|
+
if (!num.includes("."))
|
|
42
|
+
return 0;
|
|
43
|
+
return num.split(".")[1].length;
|
|
44
|
+
};
|
|
45
|
+
exports.countFloating = countFloating;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import { PublicKey } from "@solana/web3.js";
|
|
3
|
+
import { PriceData } from "@pythnetwork/client";
|
|
4
|
+
import { SuiClient } from "@mysten/sui.js/dist/cjs/client";
|
|
5
|
+
import { Auction, BidShare, Vault } from "../view-function";
|
|
6
|
+
export declare const ASSET_INFO: {
|
|
7
|
+
BTC: {
|
|
8
|
+
product: PublicKey;
|
|
9
|
+
price: PublicKey;
|
|
10
|
+
};
|
|
11
|
+
ETH: {
|
|
12
|
+
product: PublicKey;
|
|
13
|
+
price: PublicKey;
|
|
14
|
+
};
|
|
15
|
+
SUI: {
|
|
16
|
+
product: PublicKey;
|
|
17
|
+
price: PublicKey;
|
|
18
|
+
};
|
|
19
|
+
CETUS: {
|
|
20
|
+
product: PublicKey;
|
|
21
|
+
price: PublicKey;
|
|
22
|
+
};
|
|
23
|
+
SEI: {
|
|
24
|
+
product: PublicKey;
|
|
25
|
+
price: PublicKey;
|
|
26
|
+
};
|
|
27
|
+
USDC: {
|
|
28
|
+
product: PublicKey;
|
|
29
|
+
price: PublicKey;
|
|
30
|
+
};
|
|
31
|
+
USDT: {
|
|
32
|
+
product: PublicKey;
|
|
33
|
+
price: PublicKey;
|
|
34
|
+
};
|
|
35
|
+
TURBOS: {
|
|
36
|
+
product: PublicKey;
|
|
37
|
+
price: PublicKey;
|
|
38
|
+
};
|
|
39
|
+
APT: {
|
|
40
|
+
product: PublicKey;
|
|
41
|
+
price: PublicKey;
|
|
42
|
+
};
|
|
43
|
+
SOL: {
|
|
44
|
+
product: PublicKey;
|
|
45
|
+
price: PublicKey;
|
|
46
|
+
};
|
|
47
|
+
INJ: {
|
|
48
|
+
product: PublicKey;
|
|
49
|
+
price: PublicKey;
|
|
50
|
+
};
|
|
51
|
+
JUP: {
|
|
52
|
+
product: PublicKey;
|
|
53
|
+
price: PublicKey;
|
|
54
|
+
};
|
|
55
|
+
HASUI: {
|
|
56
|
+
product: PublicKey;
|
|
57
|
+
price: PublicKey;
|
|
58
|
+
};
|
|
59
|
+
VSUI: {
|
|
60
|
+
product: PublicKey;
|
|
61
|
+
price: PublicKey;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export declare const tokenOrder: {
|
|
65
|
+
[key: string]: number;
|
|
66
|
+
};
|
|
67
|
+
export declare const optionTypeOrder: {
|
|
68
|
+
[key: string]: number;
|
|
69
|
+
};
|
|
70
|
+
export declare const periodOrder: {
|
|
71
|
+
[key: string]: number;
|
|
72
|
+
};
|
|
73
|
+
export type Receipt = {
|
|
74
|
+
id: string;
|
|
75
|
+
index: string;
|
|
76
|
+
name: string;
|
|
77
|
+
description: string;
|
|
78
|
+
vid: string;
|
|
79
|
+
};
|
|
80
|
+
export type TokenAmount = {
|
|
81
|
+
value: string;
|
|
82
|
+
token: string;
|
|
83
|
+
};
|
|
84
|
+
export type BidVaultInfo = {
|
|
85
|
+
vaultInfo: Vault;
|
|
86
|
+
receipt: Receipt;
|
|
87
|
+
};
|
|
88
|
+
export interface Bid {
|
|
89
|
+
vaultIndex: string;
|
|
90
|
+
expiry: string;
|
|
91
|
+
auctionName: string;
|
|
92
|
+
strikes: string[];
|
|
93
|
+
bidSize: TokenAmount;
|
|
94
|
+
breakEvenPrice: string;
|
|
95
|
+
estPnls: TokenAmount[];
|
|
96
|
+
receiptsId: string[];
|
|
97
|
+
receiptsVid: string[];
|
|
98
|
+
settlePrice: string;
|
|
99
|
+
isAutoBid: boolean;
|
|
100
|
+
}
|
|
101
|
+
export interface OrderBy {
|
|
102
|
+
tokenOrder: number;
|
|
103
|
+
optionTypeOrder: number;
|
|
104
|
+
periodOrder: number;
|
|
105
|
+
}
|
|
106
|
+
export interface CoinInfo {
|
|
107
|
+
price: string;
|
|
108
|
+
decimal: string;
|
|
109
|
+
quote: string;
|
|
110
|
+
}
|
|
111
|
+
export declare const IncentiveRateBp = 4;
|
|
112
|
+
export declare const parsePythOracleData: (data: PriceData[], decimals: {
|
|
113
|
+
[key: string]: string;
|
|
114
|
+
}) => {
|
|
115
|
+
[key: string]: CoinInfo;
|
|
116
|
+
};
|
|
117
|
+
export declare const fetchPrices: (provider: SuiClient, network: string) => Promise<{
|
|
118
|
+
[key: string]: CoinInfo;
|
|
119
|
+
}>;
|
|
120
|
+
export declare const calcIncentiveRate: (incentiveBp: any) => number;
|
|
121
|
+
export declare const calcDeliveryPrice: (bidShare: BidShare, vaultInfo: Vault) => BigNumber;
|
|
122
|
+
export declare const calcBreakEvenPrice: (optionType: string, period: string, strikes: string[], bToken: string, price: string, incentive: number) => number;
|
|
123
|
+
export declare const calcEstPnl: (live: boolean, incentive: number, bidSize: string, optionType: string, assets: string[], strikes: string[], bidShare: BidShare, deliveryPrice: string, oTokenPrice: string) => TokenAmount[];
|
|
124
|
+
export declare const parseStrikes: (period: string, optionType: string, metadata: string) => string[];
|
|
125
|
+
export declare const parseBidReceipt: (vaults: Vault[], bidReceipts: {
|
|
126
|
+
[key: string]: Receipt[];
|
|
127
|
+
}) => {
|
|
128
|
+
sortedBidReceipts: string[];
|
|
129
|
+
bidVaultsInfo: BidVaultInfo[];
|
|
130
|
+
};
|
|
131
|
+
export declare const parseBid: (bidVaultInfo: BidVaultInfo, bidShare: BidShare, auction: Auction | null, oTokenPrice: string, isAutoBid: boolean) => Bid & OrderBy;
|
|
132
|
+
export declare const getUserBidReceipts: (provider: SuiClient, network: string, originFramworkAddress: string, userAddress: string) => Promise<{
|
|
133
|
+
[key: string]: Receipt[];
|
|
134
|
+
}>;
|
|
135
|
+
/**
|
|
136
|
+
* Fetch user's bids info
|
|
137
|
+
*
|
|
138
|
+
* @param provider - Sui Client instance.
|
|
139
|
+
* @param network - network type in lowercase.
|
|
140
|
+
* @param packageAddress - Typus main package address.
|
|
141
|
+
* @param framworkAddress - Typus framwork package address.
|
|
142
|
+
* @param originFramworkAddress - Typus intial framwork package address.
|
|
143
|
+
* @param registryAddress - Typus registry package address.
|
|
144
|
+
* @param strategyPoolAddress - strategy pool package address.
|
|
145
|
+
* @param userAddress - user's wallet address.
|
|
146
|
+
* @param prices - tokens prices (usd pair on Pyth)
|
|
147
|
+
* @return User Bids.
|
|
148
|
+
*/
|
|
149
|
+
export declare const fetchUserBids: (provider: SuiClient, network: string, packageAddress: string, framworkAddress: string, originFramworkAddress: string, registryAddress: string, strategyPoolAddress: string, userAddress: string, prices?: {
|
|
150
|
+
[key: string]: CoinInfo;
|
|
151
|
+
} | undefined) => Promise<any>;
|
|
@@ -0,0 +1,834 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
50
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
51
|
+
if (!m) return o;
|
|
52
|
+
var i = m.call(o), r, ar = [], e;
|
|
53
|
+
try {
|
|
54
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
55
|
+
}
|
|
56
|
+
catch (error) { e = { error: error }; }
|
|
57
|
+
finally {
|
|
58
|
+
try {
|
|
59
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
60
|
+
}
|
|
61
|
+
finally { if (e) throw e.error; }
|
|
62
|
+
}
|
|
63
|
+
return ar;
|
|
64
|
+
};
|
|
65
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
66
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
67
|
+
if (ar || !(i in from)) {
|
|
68
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
69
|
+
ar[i] = from[i];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
73
|
+
};
|
|
74
|
+
var __values = (this && this.__values) || function(o) {
|
|
75
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
76
|
+
if (m) return m.call(o);
|
|
77
|
+
if (o && typeof o.length === "number") return {
|
|
78
|
+
next: function () {
|
|
79
|
+
if (o && i >= o.length) o = void 0;
|
|
80
|
+
return { value: o && o[i++], done: !o };
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
84
|
+
};
|
|
85
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
86
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
87
|
+
};
|
|
88
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
89
|
+
exports.fetchUserBids = exports.getUserBidReceipts = exports.parseBid = exports.parseBidReceipt = exports.parseStrikes = exports.calcEstPnl = exports.calcBreakEvenPrice = exports.calcDeliveryPrice = exports.calcIncentiveRate = exports.fetchPrices = exports.parsePythOracleData = exports.IncentiveRateBp = exports.periodOrder = exports.optionTypeOrder = exports.tokenOrder = exports.ASSET_INFO = void 0;
|
|
90
|
+
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
91
|
+
var web3_js_1 = require("@solana/web3.js");
|
|
92
|
+
var client_1 = require("@pythnetwork/client");
|
|
93
|
+
var lodash_1 = require("lodash");
|
|
94
|
+
var moment_1 = __importDefault(require("moment"));
|
|
95
|
+
var view_function_1 = require("../view-function");
|
|
96
|
+
var vault_1 = require("./vault");
|
|
97
|
+
var token_1 = require("./token");
|
|
98
|
+
var tools_1 = require("../../tools");
|
|
99
|
+
var config_json_1 = __importDefault(require("../../../config.json"));
|
|
100
|
+
var view_function_2 = require("../../auto-bid/view-function");
|
|
101
|
+
var token_2 = require("../../token");
|
|
102
|
+
var token_3 = require("./token");
|
|
103
|
+
var price_1 = require("../../price");
|
|
104
|
+
var PriceDecimal = (0, bignumber_js_1.default)(10).pow(8);
|
|
105
|
+
exports.ASSET_INFO = {
|
|
106
|
+
BTC: {
|
|
107
|
+
product: new web3_js_1.PublicKey("4aDoSXJ5o3AuvL7QFeR6h44jALQfTmUUCTVGDD6aoJTM"),
|
|
108
|
+
price: new web3_js_1.PublicKey("GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU"),
|
|
109
|
+
},
|
|
110
|
+
ETH: {
|
|
111
|
+
product: new web3_js_1.PublicKey("EMkxjGC1CQ7JLiutDbfYb7UKb3zm9SJcUmr1YicBsdpZ"),
|
|
112
|
+
price: new web3_js_1.PublicKey("JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB"),
|
|
113
|
+
},
|
|
114
|
+
SUI: {
|
|
115
|
+
product: new web3_js_1.PublicKey("2F8rfBf4z4SzNpeQstFTpLXTQQ7RNKsLFqPdbpybooCc"),
|
|
116
|
+
price: new web3_js_1.PublicKey("3Qub3HaAJaa2xNY7SUqPKd3vVwTqDfDDkEUMPjXD2c1q"),
|
|
117
|
+
},
|
|
118
|
+
CETUS: {
|
|
119
|
+
product: new web3_js_1.PublicKey("JDHPsM1zxsZ6TfDwpCVzo41DAZdRi6ZmhkzWU1iXvSQ"),
|
|
120
|
+
price: new web3_js_1.PublicKey("GTeC2JfBFrHuYkBivDQcNdLY74X5FRDLEJntnxPKRQbY"),
|
|
121
|
+
},
|
|
122
|
+
SEI: {
|
|
123
|
+
product: new web3_js_1.PublicKey("24bB1mRGsrrDVawJTCVYXrxbEz6ozztukPUKvcZCDcPz"),
|
|
124
|
+
price: new web3_js_1.PublicKey("6cUuAyAX3eXoiWkjFF77RQBEUF15AAMQ7d1hm4EPd3tv"),
|
|
125
|
+
},
|
|
126
|
+
USDC: {
|
|
127
|
+
product: new web3_js_1.PublicKey("8GWTTbNiXdmyZREXbjsZBmCRuzdPrW55dnZGDkTRjWvb"),
|
|
128
|
+
price: new web3_js_1.PublicKey("Gnt27xtC473ZT2Mw5u8wZ68Z3gULkSTb5DuxJy7eJotD"),
|
|
129
|
+
},
|
|
130
|
+
USDT: {
|
|
131
|
+
product: new web3_js_1.PublicKey("Av6XyAMJnyi68FdsKSPYgzfXGjYrrt6jcAMwtvzLCqaM"),
|
|
132
|
+
price: new web3_js_1.PublicKey("3vxLXJqLqF3JG5TCbYycbKWRBbCJQLxQmBGCkyqEEefL"),
|
|
133
|
+
},
|
|
134
|
+
TURBOS: {
|
|
135
|
+
product: new web3_js_1.PublicKey("8DZUgXNQo5Um1pqo4gzv9oWPUZpyKV9nXm51gysZFMef"),
|
|
136
|
+
price: new web3_js_1.PublicKey("HoxttzPFzcPvpZhUY8LCLkFNn9keDnBrctno4wXEhpFk"),
|
|
137
|
+
},
|
|
138
|
+
APT: {
|
|
139
|
+
product: new web3_js_1.PublicKey("6bQMDtuAmRgjvymdWk9w4tTc9YyuXcjMxF8MyPHXejsx"),
|
|
140
|
+
price: new web3_js_1.PublicKey("FNNvb1AFDnDVPkocEri8mWbJ1952HQZtFLuwPiUjSJQ"),
|
|
141
|
+
},
|
|
142
|
+
SOL: {
|
|
143
|
+
product: new web3_js_1.PublicKey("ALP8SdU9oARYVLgLR7LrqMNCYBnhtnQz1cj6bwgwQmgj"),
|
|
144
|
+
price: new web3_js_1.PublicKey("H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG"),
|
|
145
|
+
},
|
|
146
|
+
INJ: {
|
|
147
|
+
product: new web3_js_1.PublicKey("5Q5kyCVzssrGMd2BniSdVeRwjNWrGGrFhMrgGt4zURyA"),
|
|
148
|
+
price: new web3_js_1.PublicKey("9EdtbaivHQYA4Nh3XzGR6DwRaoorqXYnmpfsnFhvwuVj"),
|
|
149
|
+
},
|
|
150
|
+
JUP: {
|
|
151
|
+
product: new web3_js_1.PublicKey("AykbyeHZbUbEtEAPVpBLoPAMHBrUrDMtXJkPWZw4TRDX"),
|
|
152
|
+
price: new web3_js_1.PublicKey("g6eRCbboSwK4tSWngn773RCMexr1APQr4uA9bGZBYfo"),
|
|
153
|
+
},
|
|
154
|
+
HASUI: {
|
|
155
|
+
product: new web3_js_1.PublicKey("FGJutsZ3Hr9BaamiNUq369AamUEMArCxFeMnjZZ1u4oG"),
|
|
156
|
+
price: new web3_js_1.PublicKey("7Y9jRRHvqig2wdSkjnACwt1SV1qocjY81C9nKKVJ6zJs"),
|
|
157
|
+
},
|
|
158
|
+
VSUI: {
|
|
159
|
+
product: new web3_js_1.PublicKey("9L4zWUnRWEqHT9fvH5WkmQgXf7qrr97SGV4pofTSdK5k"),
|
|
160
|
+
price: new web3_js_1.PublicKey("6vWPEigSDaAi6m6HuX24aK4fJGJxvQZ8TLQKADC65S2S"),
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
exports.tokenOrder = {
|
|
164
|
+
// Basically it's a to z but put SUI at first
|
|
165
|
+
SUI: 0,
|
|
166
|
+
AFSUI: 1,
|
|
167
|
+
APT: 2,
|
|
168
|
+
WBTC: 3,
|
|
169
|
+
BTC: 3,
|
|
170
|
+
BUCK: 4,
|
|
171
|
+
CETUS: 5,
|
|
172
|
+
WETH: 6,
|
|
173
|
+
ETH: 6,
|
|
174
|
+
HASUI: 7,
|
|
175
|
+
FUD: 8,
|
|
176
|
+
INJ: 9,
|
|
177
|
+
JUP: 10,
|
|
178
|
+
NAVX: 11,
|
|
179
|
+
SCA: 12,
|
|
180
|
+
SEI: 13,
|
|
181
|
+
WSOL: 14,
|
|
182
|
+
SOL: 15,
|
|
183
|
+
TURBOS: 16,
|
|
184
|
+
USDC: 17,
|
|
185
|
+
USDT: 18,
|
|
186
|
+
USDY: 19,
|
|
187
|
+
VSUI: 20,
|
|
188
|
+
};
|
|
189
|
+
exports.optionTypeOrder = {
|
|
190
|
+
0: 0,
|
|
191
|
+
1: 2,
|
|
192
|
+
2: 3,
|
|
193
|
+
4: 4,
|
|
194
|
+
6: 5,
|
|
195
|
+
5: 6,
|
|
196
|
+
};
|
|
197
|
+
exports.periodOrder = {
|
|
198
|
+
0: 1,
|
|
199
|
+
1: 2,
|
|
200
|
+
2: 3,
|
|
201
|
+
3: 0,
|
|
202
|
+
};
|
|
203
|
+
exports.IncentiveRateBp = 4;
|
|
204
|
+
var DefaultOracleDecimal = {
|
|
205
|
+
ETH: "8",
|
|
206
|
+
SUI: "8",
|
|
207
|
+
AFSUI: "8",
|
|
208
|
+
BTC: "8",
|
|
209
|
+
DOGE: "8",
|
|
210
|
+
APT: "8",
|
|
211
|
+
SOL: "8",
|
|
212
|
+
USDC: "8",
|
|
213
|
+
USDT: "8",
|
|
214
|
+
CETUS: "8",
|
|
215
|
+
TURBOS: "8",
|
|
216
|
+
NAVX: "8",
|
|
217
|
+
JUP: "8",
|
|
218
|
+
BUCK: "8",
|
|
219
|
+
USDY: "8",
|
|
220
|
+
SEI: "8",
|
|
221
|
+
FUD: "8",
|
|
222
|
+
MFUD: "8",
|
|
223
|
+
INJ: "8",
|
|
224
|
+
SCA: "8",
|
|
225
|
+
VSUI: "8",
|
|
226
|
+
HASUI: "8",
|
|
227
|
+
};
|
|
228
|
+
var parsePythOracleData = function (data, decimals) {
|
|
229
|
+
var prices = {};
|
|
230
|
+
Object.entries(exports.ASSET_INFO).forEach(function (p) {
|
|
231
|
+
var _a, _b;
|
|
232
|
+
var asset = p[0].toUpperCase();
|
|
233
|
+
var coinData = data.find(function (s) {
|
|
234
|
+
return s.productAccountKey.equals(p[1].product);
|
|
235
|
+
});
|
|
236
|
+
var decimal = decimals[asset];
|
|
237
|
+
if (decimal && coinData) {
|
|
238
|
+
prices[asset.toLowerCase()] = {
|
|
239
|
+
price: (0, bignumber_js_1.default)((_a = coinData.price) !== null && _a !== void 0 ? _a : 0)
|
|
240
|
+
.multipliedBy((0, bignumber_js_1.default)(10).pow(decimal))
|
|
241
|
+
.toString(),
|
|
242
|
+
decimal: decimal,
|
|
243
|
+
quote: "usd",
|
|
244
|
+
};
|
|
245
|
+
if (token_3.WrappedToken[asset]) {
|
|
246
|
+
prices[token_3.WrappedToken[asset].toLowerCase()] = {
|
|
247
|
+
price: (0, bignumber_js_1.default)((_b = coinData.price) !== null && _b !== void 0 ? _b : 0)
|
|
248
|
+
.multipliedBy((0, bignumber_js_1.default)(10).pow(decimal))
|
|
249
|
+
.toString(),
|
|
250
|
+
decimal: decimal,
|
|
251
|
+
quote: "usd",
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
return prices;
|
|
257
|
+
};
|
|
258
|
+
exports.parsePythOracleData = parsePythOracleData;
|
|
259
|
+
var fetchPrices = function (provider, network) { return __awaiter(void 0, void 0, void 0, function () {
|
|
260
|
+
var coinObjects, oracleDecimal, PYTHNET_CLUSTER_NAME, connection, pythPublicKey, pythClient, priceData, prices, suiusd, suifud, fudusd, suiafsui, afsuiusd, suinavx, navxusd, suibuck, buckusd, usdyusdc, usdyusdcWithDecimal, scasui, scausd;
|
|
261
|
+
var _a, _b;
|
|
262
|
+
return __generator(this, function (_c) {
|
|
263
|
+
switch (_c.label) {
|
|
264
|
+
case 0: return [4 /*yield*/, provider.multiGetObjects({
|
|
265
|
+
ids: Object.values(config_json_1.default[network.toUpperCase()].ORACLE),
|
|
266
|
+
options: { showContent: true },
|
|
267
|
+
})];
|
|
268
|
+
case 1:
|
|
269
|
+
coinObjects = _c.sent();
|
|
270
|
+
oracleDecimal = __assign({}, DefaultOracleDecimal);
|
|
271
|
+
coinObjects.forEach(function (c) {
|
|
272
|
+
var _a, _b;
|
|
273
|
+
// @ts-ignore
|
|
274
|
+
oracleDecimal[(_a = c.data) === null || _a === void 0 ? void 0 : _a.content.fields.base_token] =
|
|
275
|
+
// @ts-ignore
|
|
276
|
+
(_b = c.data) === null || _b === void 0 ? void 0 : _b.content.fields.decimal;
|
|
277
|
+
});
|
|
278
|
+
PYTHNET_CLUSTER_NAME = "pythnet";
|
|
279
|
+
connection = new web3_js_1.Connection((0, client_1.getPythClusterApiUrl)(PYTHNET_CLUSTER_NAME));
|
|
280
|
+
pythPublicKey = (0, client_1.getPythProgramKeyForCluster)(PYTHNET_CLUSTER_NAME);
|
|
281
|
+
pythClient = new client_1.PythHttpClient(connection, pythPublicKey);
|
|
282
|
+
return [4 /*yield*/, pythClient.getAssetPricesFromAccounts(Object.values(exports.ASSET_INFO).map(function (a) { return a.price; }))];
|
|
283
|
+
case 2:
|
|
284
|
+
priceData = _c.sent();
|
|
285
|
+
prices = (0, exports.parsePythOracleData)(priceData, oracleDecimal);
|
|
286
|
+
suiusd = (0, bignumber_js_1.default)((_b = (_a = prices["sui"]) === null || _a === void 0 ? void 0 : _a.price) !== null && _b !== void 0 ? _b : 0);
|
|
287
|
+
return [4 /*yield*/, (0, price_1.getLatestPrice)("SUIFUD")];
|
|
288
|
+
case 3:
|
|
289
|
+
suifud = _c.sent();
|
|
290
|
+
fudusd = suifud == "0" ? (0, bignumber_js_1.default)(0) : suiusd.div(suifud);
|
|
291
|
+
return [4 /*yield*/, (0, price_1.getLatestPrice)("SUIAFSUI")];
|
|
292
|
+
case 4:
|
|
293
|
+
suiafsui = _c.sent();
|
|
294
|
+
afsuiusd = suiafsui == "0" ? (0, bignumber_js_1.default)(0) : suiusd.div(suiafsui);
|
|
295
|
+
return [4 /*yield*/, (0, price_1.getLatestPrice)("SUINAVX")];
|
|
296
|
+
case 5:
|
|
297
|
+
suinavx = _c.sent();
|
|
298
|
+
navxusd = suiusd.div(suinavx);
|
|
299
|
+
return [4 /*yield*/, (0, price_1.getLatestPrice)("SUIBUCK")];
|
|
300
|
+
case 6:
|
|
301
|
+
suibuck = _c.sent();
|
|
302
|
+
buckusd = (0, bignumber_js_1.default)(suibuck).lte(0) ? "0" : suiusd.div(suibuck);
|
|
303
|
+
return [4 /*yield*/, (0, price_1.getLatestPrice)("USDYUSDC")];
|
|
304
|
+
case 7:
|
|
305
|
+
usdyusdc = _c.sent();
|
|
306
|
+
usdyusdcWithDecimal = (0, bignumber_js_1.default)(usdyusdc).multipliedBy((0, bignumber_js_1.default)(10).pow(8));
|
|
307
|
+
return [4 /*yield*/, (0, price_1.getLatestPrice)("SCASUI")];
|
|
308
|
+
case 8:
|
|
309
|
+
scasui = _c.sent();
|
|
310
|
+
scausd = suiusd.eq(0) ? (0, bignumber_js_1.default)(0) : (0, bignumber_js_1.default)(scasui).multipliedBy(suiusd);
|
|
311
|
+
return [2 /*return*/, __assign({ fud: { price: fudusd.toString(), decimal: "8", quote: "usd" }, mfud: { price: fudusd.multipliedBy(1000000).toString(), decimal: "8", quote: "usd" }, afsui: { price: afsuiusd.toString(), decimal: "8", quote: "usd" }, navx: { price: navxusd.toString(), decimal: "8", quote: "usd" }, buck: { price: buckusd.toString(), decimal: "8", quote: "usd" }, usdy: { price: usdyusdcWithDecimal.toString(), decimal: "8", quote: "usd" }, sca: { price: scausd.toString(), decimal: "8", quote: "usd" } }, prices)];
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
}); };
|
|
315
|
+
exports.fetchPrices = fetchPrices;
|
|
316
|
+
var calcIncentiveRate = function (incentiveBp) {
|
|
317
|
+
var incentiveRateBp = (0, bignumber_js_1.default)(incentiveBp).div((0, bignumber_js_1.default)(10).pow(exports.IncentiveRateBp));
|
|
318
|
+
var incentiveRate = 1;
|
|
319
|
+
if (incentiveRateBp.gt(0)) {
|
|
320
|
+
incentiveRate = 1 - Number(incentiveRateBp);
|
|
321
|
+
}
|
|
322
|
+
return incentiveRate;
|
|
323
|
+
};
|
|
324
|
+
exports.calcIncentiveRate = calcIncentiveRate;
|
|
325
|
+
var calcDeliveryPrice = function (bidShare, vaultInfo) {
|
|
326
|
+
var bTokenDecimal = vaultInfo.info.bTokenDecimal;
|
|
327
|
+
var deliveryPrice = (0, bignumber_js_1.default)("0");
|
|
328
|
+
// check if bid has settled already
|
|
329
|
+
if (bidShare.bidVault.u64Padding[1]) {
|
|
330
|
+
deliveryPrice = (0, bignumber_js_1.default)(bidShare.bidVault.u64Padding[1]);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
var deliveryInfos = vaultInfo.info.deliveryInfos.deliveryInfo;
|
|
334
|
+
var deliveryInfo = deliveryInfos[deliveryInfos.length - 1];
|
|
335
|
+
deliveryPrice = deliveryInfo ? (0, bignumber_js_1.default)(deliveryInfo.deliveryPrice) : (0, bignumber_js_1.default)("0");
|
|
336
|
+
}
|
|
337
|
+
deliveryPrice = (0, bignumber_js_1.default)(deliveryPrice).div((0, bignumber_js_1.default)(10).pow((0, bignumber_js_1.default)(bTokenDecimal)));
|
|
338
|
+
return deliveryPrice;
|
|
339
|
+
};
|
|
340
|
+
exports.calcDeliveryPrice = calcDeliveryPrice;
|
|
341
|
+
var calcBreakEvenPrice = function (optionType, period, strikes, bToken, price, incentive) {
|
|
342
|
+
var breakEvenPrice = 0;
|
|
343
|
+
switch (optionType) {
|
|
344
|
+
case "0":
|
|
345
|
+
if (token_1.StableCoin.includes(bToken)) {
|
|
346
|
+
breakEvenPrice = Number(strikes[0]) + Number(price) * 1.1 * incentive;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
breakEvenPrice = Number(strikes[0]) / (1 - Number(price) * 1.1 * incentive);
|
|
350
|
+
}
|
|
351
|
+
break;
|
|
352
|
+
case "1":
|
|
353
|
+
if (token_1.StableCoin.includes(bToken)) {
|
|
354
|
+
breakEvenPrice = Number(strikes[0]) - Number(price) * 1.1 * incentive;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
breakEvenPrice = Number(strikes[0]) / (1 + Number(price) * 1.1 * incentive);
|
|
358
|
+
}
|
|
359
|
+
break;
|
|
360
|
+
case "2":
|
|
361
|
+
// Calculate with the lower one
|
|
362
|
+
if (token_1.StableCoin.includes(bToken)) {
|
|
363
|
+
breakEvenPrice = Number(strikes[0]) + Number(price) * 1.1 * incentive;
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
breakEvenPrice = Number(strikes[0]) / (1 - Number(price) * 1.1 * incentive);
|
|
367
|
+
}
|
|
368
|
+
break;
|
|
369
|
+
case "4":
|
|
370
|
+
// Calculate with the lower one
|
|
371
|
+
if (token_1.StableCoin.includes(bToken)) {
|
|
372
|
+
breakEvenPrice = Number(strikes[0]) + Number(price) * 1.1 * incentive;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
breakEvenPrice = Number(strikes[0]) / (1 - Number(price) * 1.1 * incentive);
|
|
376
|
+
}
|
|
377
|
+
break;
|
|
378
|
+
case "5":
|
|
379
|
+
if (token_1.StableCoin.includes(bToken)) {
|
|
380
|
+
breakEvenPrice = Number(strikes[1]) - Number(price) * 1.1 * incentive;
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
breakEvenPrice = Number(strikes[1]) / (1 + Number(price) * 1.1 * incentive);
|
|
384
|
+
}
|
|
385
|
+
break;
|
|
386
|
+
case "6":
|
|
387
|
+
// Calculate with the lower one
|
|
388
|
+
if (token_1.StableCoin.includes(bToken)) {
|
|
389
|
+
breakEvenPrice = Number(strikes[0]) + Number(price) * 1.1 * incentive;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
breakEvenPrice = Number(strikes[0]) / (1 + Number(price) * 1.1 * incentive);
|
|
393
|
+
}
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
return breakEvenPrice;
|
|
397
|
+
};
|
|
398
|
+
exports.calcBreakEvenPrice = calcBreakEvenPrice;
|
|
399
|
+
var calcEstPnl = function (live, incentive, bidSize, optionType, assets, strikes, bidShare, deliveryPrice, oTokenPrice) {
|
|
400
|
+
var profit = "0";
|
|
401
|
+
var cost = "0";
|
|
402
|
+
var _a = __read((0, token_2.typeArgsToAssets)(assets), 3), dToken = _a[0], bToken = _a[1], oToken = _a[2];
|
|
403
|
+
var dTokenWrappedName = (0, token_1.getTokenName)({ token: dToken, wrapped: true });
|
|
404
|
+
var bTokenWrappedName = (0, token_1.getTokenName)({ token: bToken, wrapped: true });
|
|
405
|
+
var estPnls = [];
|
|
406
|
+
var referencePrice = bidShare.bidVault.u64Padding.length > 0 ? (0, bignumber_js_1.default)(bidShare.bidVault.u64Padding[0]).div(PriceDecimal) : (0, bignumber_js_1.default)(oTokenPrice);
|
|
407
|
+
if (optionType === "0") {
|
|
408
|
+
profit = bignumber_js_1.default.max(0, (0, bignumber_js_1.default)(referencePrice.minus((0, bignumber_js_1.default)(strikes[0])))
|
|
409
|
+
.div(referencePrice)
|
|
410
|
+
.multipliedBy(bidSize)).toString();
|
|
411
|
+
}
|
|
412
|
+
else if (optionType === "1") {
|
|
413
|
+
profit = bignumber_js_1.default.max(0, (0, bignumber_js_1.default)(strikes[0]).minus(referencePrice).multipliedBy(bidSize)).toString();
|
|
414
|
+
}
|
|
415
|
+
else if (optionType === "2" || optionType === "4") {
|
|
416
|
+
profit = bignumber_js_1.default.max(0, (0, bignumber_js_1.default)(referencePrice.minus((0, bignumber_js_1.default)(strikes[0])))
|
|
417
|
+
.div(referencePrice)
|
|
418
|
+
.multipliedBy(bidSize))
|
|
419
|
+
.minus(bignumber_js_1.default.max(0, (0, bignumber_js_1.default)(referencePrice.minus((0, bignumber_js_1.default)(strikes[1])))
|
|
420
|
+
.div(referencePrice)
|
|
421
|
+
.multipliedBy(bidSize)))
|
|
422
|
+
.toString();
|
|
423
|
+
}
|
|
424
|
+
else if (optionType === "5") {
|
|
425
|
+
profit = bignumber_js_1.default.max(0, (0, bignumber_js_1.default)((0, bignumber_js_1.default)(strikes[1]).minus(referencePrice)).multipliedBy(bidSize))
|
|
426
|
+
.minus(bignumber_js_1.default.max(0, (0, bignumber_js_1.default)((0, bignumber_js_1.default)(strikes[0]).minus((0, bignumber_js_1.default)(referencePrice))).multipliedBy(bidSize)))
|
|
427
|
+
.toString();
|
|
428
|
+
}
|
|
429
|
+
else if (optionType === "6") {
|
|
430
|
+
profit = bignumber_js_1.default.max(0, (0, bignumber_js_1.default)(referencePrice.minus(strikes[0])).multipliedBy(bidSize))
|
|
431
|
+
.minus(bignumber_js_1.default.max(0, (0, bignumber_js_1.default)(referencePrice.minus(strikes[1])).multipliedBy(bidSize)))
|
|
432
|
+
.toString();
|
|
433
|
+
}
|
|
434
|
+
cost = (0, bignumber_js_1.default)(deliveryPrice).multipliedBy(bidSize).multipliedBy(1.1).multipliedBy(incentive).toString();
|
|
435
|
+
if (dToken === bToken) {
|
|
436
|
+
profit = (0, bignumber_js_1.default)(profit).minus(cost).toString();
|
|
437
|
+
}
|
|
438
|
+
if (!live) {
|
|
439
|
+
estPnls.push({
|
|
440
|
+
value: profit,
|
|
441
|
+
token: assets[0],
|
|
442
|
+
});
|
|
443
|
+
if (dToken !== bToken) {
|
|
444
|
+
estPnls.push({ value: "-" + cost, token: assets[1] });
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return estPnls;
|
|
448
|
+
};
|
|
449
|
+
exports.calcEstPnl = calcEstPnl;
|
|
450
|
+
var parseStrikes = function (period, optionType, metadata) {
|
|
451
|
+
var strikes = [period === "3" ? metadata.split("-")[3] : metadata.split("-")[2]];
|
|
452
|
+
switch (optionType) {
|
|
453
|
+
case "0":
|
|
454
|
+
break;
|
|
455
|
+
case "1":
|
|
456
|
+
break;
|
|
457
|
+
case "2":
|
|
458
|
+
strikes = [metadata.split("-")[2], metadata.split("-")[3]];
|
|
459
|
+
break;
|
|
460
|
+
case "4":
|
|
461
|
+
strikes = [metadata.split("-")[2], metadata.split("-")[3]];
|
|
462
|
+
if (period == "3") {
|
|
463
|
+
strikes = [metadata.split("-")[3], metadata.split("-")[4]];
|
|
464
|
+
}
|
|
465
|
+
strikes = strikes.sort(function (a, b) { return Number(a) - Number(b); });
|
|
466
|
+
break;
|
|
467
|
+
case "5":
|
|
468
|
+
strikes = [metadata.split("-")[2], metadata.split("-")[3]];
|
|
469
|
+
if (period == "3") {
|
|
470
|
+
strikes = [metadata.split("-")[3], metadata.split("-")[4]];
|
|
471
|
+
}
|
|
472
|
+
strikes = strikes.sort(function (a, b) { return Number(a) - Number(b); });
|
|
473
|
+
break;
|
|
474
|
+
case "6":
|
|
475
|
+
strikes = [metadata.split("-")[2], metadata.split("-")[3]];
|
|
476
|
+
if (period == "3") {
|
|
477
|
+
strikes = [metadata.split("-")[3], metadata.split("-")[4]];
|
|
478
|
+
}
|
|
479
|
+
strikes = strikes.sort(function (a, b) { return Number(a) - Number(b); });
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
strikes = (0, tools_1.checkNumber)(strikes[0]) ? strikes : [];
|
|
483
|
+
strikes = strikes.sort(function (a, b) { return Number(a) - Number(b); });
|
|
484
|
+
return strikes;
|
|
485
|
+
};
|
|
486
|
+
exports.parseStrikes = parseStrikes;
|
|
487
|
+
var parseBidReceipt = function (vaults, bidReceipts) {
|
|
488
|
+
var sortedBidReceipts = [];
|
|
489
|
+
var bidVaultsInfo = [];
|
|
490
|
+
var vidMap = new Map();
|
|
491
|
+
vaults.forEach(function (v) {
|
|
492
|
+
var curReceipts = bidReceipts[v.info.index];
|
|
493
|
+
if (curReceipts) {
|
|
494
|
+
curReceipts.map(function (receipt) {
|
|
495
|
+
// ###### NOTE: #####
|
|
496
|
+
// Bid receipts need to be sorted and put together
|
|
497
|
+
// BY vid for SDK getMyBids to fetch the correct data.
|
|
498
|
+
// ###########
|
|
499
|
+
// Filer out autoBidReceiptsData receipts cuz it's wrapped in strategy and
|
|
500
|
+
// SDK getMyBids can't retrieve it!
|
|
501
|
+
var data = vidMap.get(receipt.vid);
|
|
502
|
+
if (!data) {
|
|
503
|
+
vidMap.set(receipt.vid, [receipt.id]);
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
data.push(receipt.id);
|
|
507
|
+
vidMap.set(receipt.vid, data);
|
|
508
|
+
}
|
|
509
|
+
bidVaultsInfo.push({ vaultInfo: v, receipt: receipt });
|
|
510
|
+
});
|
|
511
|
+
var values = Array.from(vidMap.values());
|
|
512
|
+
sortedBidReceipts = values.reduce(function (previousValue, currentValue, currentIndex, array) {
|
|
513
|
+
return previousValue.concat(currentValue);
|
|
514
|
+
}, []);
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
return { sortedBidReceipts: sortedBidReceipts, bidVaultsInfo: bidVaultsInfo };
|
|
518
|
+
};
|
|
519
|
+
exports.parseBidReceipt = parseBidReceipt;
|
|
520
|
+
var parseBid = function (bidVaultInfo, bidShare, auction, oTokenPrice, isAutoBid) {
|
|
521
|
+
var _a, _b;
|
|
522
|
+
var vaultInfo = bidVaultInfo.vaultInfo, _c = bidVaultInfo.vaultInfo, info = _c.info, _d = _c.info, index = _d.index, bTokenDecimal = _d.bTokenDecimal, oTokenDecimal = _d.oTokenDecimal, optionType = _d.optionType, period = _d.period, depositToken = _d.depositToken, bidToken = _d.bidToken, settlementBase = _d.settlementBase, _e = _c.config, lotSize = _e.bidLotSize, bidIncentiveBp = _e.bidIncentiveBp, u64Padding = _e.u64Padding, receipt = bidVaultInfo.receipt;
|
|
523
|
+
var incentiveRate = (0, exports.calcIncentiveRate)(bidIncentiveBp);
|
|
524
|
+
var _f = __read((0, vault_1.parseAssets)(info), 3), dToken = _f[0], bToken = _f[1], oToken = _f[2];
|
|
525
|
+
var oTokenName = (0, token_1.getTokenName)({ token: oToken });
|
|
526
|
+
var dTokenWrappedName = (0, token_1.getTokenName)({ token: dToken, wrapped: true });
|
|
527
|
+
var bTokenWrappedName = (0, token_1.getTokenName)({ token: bToken, wrapped: true });
|
|
528
|
+
var metadata = bidShare.bidVault.metadata;
|
|
529
|
+
var tokenLabel = metadata.split("-")[0];
|
|
530
|
+
var periodLabel = vault_1.Period[Number(period)].charAt(0).toUpperCase() + vault_1.Period[Number(period)].slice(1);
|
|
531
|
+
var optionTypeLabel = vault_1.AbbrStrategyName[optionType];
|
|
532
|
+
var bidsSize = Number(bidShare.share) / Math.pow(10, Number(oTokenDecimal));
|
|
533
|
+
var expirationDate = (0, moment_1.default)(metadata.split("-")[1], "DDMMMYY").format("yyyy-MM-DD");
|
|
534
|
+
expirationDate = moment_1.default
|
|
535
|
+
.utc(period === "3" ? "".concat(expirationDate, " ").concat((0, tools_1.insertAt)(metadata.split("-")[2], ":", 2)) : "".concat(expirationDate, " 08:00"))
|
|
536
|
+
.local()
|
|
537
|
+
.format("DD MMM YY, HH:mm");
|
|
538
|
+
var live = !auction
|
|
539
|
+
? false
|
|
540
|
+
: moment_1.default.unix(Number(auction.endTsMs) / 1000).isAfter((0, moment_1.default)()) &&
|
|
541
|
+
moment_1.default.unix(Number(auction.startTsMs) / 1000).isBefore((0, moment_1.default)()) &&
|
|
542
|
+
(0, moment_1.default)(expirationDate, "DD MMM YY, HH:mm").isAfter(moment_1.default.unix(Number(auction.endTsMs) / 1000));
|
|
543
|
+
var deliveryPrice = (0, exports.calcDeliveryPrice)(bidShare, vaultInfo);
|
|
544
|
+
var initialPrice = (_a = auction === null || auction === void 0 ? void 0 : auction.initialPrice) !== null && _a !== void 0 ? _a : 0;
|
|
545
|
+
initialPrice = (0, bignumber_js_1.default)(initialPrice).div((0, bignumber_js_1.default)(10).pow((0, bignumber_js_1.default)(bTokenDecimal)));
|
|
546
|
+
var strikes = (0, exports.parseStrikes)(period, optionType, metadata);
|
|
547
|
+
var breakEvenPriceReference = live ? initialPrice : deliveryPrice;
|
|
548
|
+
var breakEvenPrice = (0, exports.calcBreakEvenPrice)(optionType, period, strikes, bToken, breakEvenPriceReference, incentiveRate);
|
|
549
|
+
var defaultMinBidSize = (0, bignumber_js_1.default)(lotSize).div((0, bignumber_js_1.default)(10).pow(oTokenDecimal));
|
|
550
|
+
var bidSize = bidsSize.toFixed((0, tools_1.countFloating)(defaultMinBidSize.toNumber()));
|
|
551
|
+
var settlePrice = (0, bignumber_js_1.default)((_b = bidShare.bidVault.u64Padding[0]) !== null && _b !== void 0 ? _b : "0").div(PriceDecimal);
|
|
552
|
+
var estPnls = (0, exports.calcEstPnl)(live, incentiveRate, bidSize, optionType, [depositToken, bidToken, settlementBase], strikes, bidShare, deliveryPrice.toString(), oTokenPrice);
|
|
553
|
+
return {
|
|
554
|
+
vaultIndex: index,
|
|
555
|
+
auctionName: "".concat(tokenLabel, " ").concat(periodLabel, " ").concat(optionTypeLabel),
|
|
556
|
+
expiry: expirationDate,
|
|
557
|
+
strikes: strikes.map(function (s) {
|
|
558
|
+
if (tokenLabel === "MFUD") {
|
|
559
|
+
return (0, bignumber_js_1.default)(s).div(1000000).toString();
|
|
560
|
+
}
|
|
561
|
+
return s;
|
|
562
|
+
}),
|
|
563
|
+
bidSize: {
|
|
564
|
+
value: (0, bignumber_js_1.default)(bidSize)
|
|
565
|
+
.div((0, bignumber_js_1.default)(10).pow(oToken === "MFUD" ? 6 : 0))
|
|
566
|
+
.toString(),
|
|
567
|
+
token: settlementBase,
|
|
568
|
+
},
|
|
569
|
+
breakEvenPrice: (0, bignumber_js_1.default)(breakEvenPrice)
|
|
570
|
+
.div((0, bignumber_js_1.default)(10).pow(oToken === "MFUD" ? 6 : 0))
|
|
571
|
+
.toString(),
|
|
572
|
+
settlePrice: (0, bignumber_js_1.default)(settlePrice)
|
|
573
|
+
.div((0, bignumber_js_1.default)(10).pow(oToken === "MFUD" ? 6 : 0))
|
|
574
|
+
.toString(),
|
|
575
|
+
estPnls: estPnls,
|
|
576
|
+
isAutoBid: isAutoBid,
|
|
577
|
+
receiptsId: [receipt.id],
|
|
578
|
+
receiptsVid: [receipt.vid],
|
|
579
|
+
optionTypeOrder: exports.optionTypeOrder[optionType],
|
|
580
|
+
periodOrder: exports.periodOrder[period],
|
|
581
|
+
tokenOrder: exports.tokenOrder[oToken.toUpperCase()],
|
|
582
|
+
};
|
|
583
|
+
};
|
|
584
|
+
exports.parseBid = parseBid;
|
|
585
|
+
var getUserBidReceipts = function (provider, network, originFramworkAddress, userAddress) { return __awaiter(void 0, void 0, void 0, function () {
|
|
586
|
+
var bidReceipts, result, hasNextPage, data, nextCursor, data_1, data_1_1, object, content, typeStringComponents, subtype, typeComponents, type, typePackage, vaultIndex, receipt;
|
|
587
|
+
var e_1, _a;
|
|
588
|
+
return __generator(this, function (_b) {
|
|
589
|
+
switch (_b.label) {
|
|
590
|
+
case 0:
|
|
591
|
+
bidReceipts = {};
|
|
592
|
+
return [4 /*yield*/, provider.getOwnedObjects({ owner: userAddress, options: { showType: true, showContent: true } })];
|
|
593
|
+
case 1:
|
|
594
|
+
result = _b.sent();
|
|
595
|
+
hasNextPage = result.hasNextPage;
|
|
596
|
+
data = result.data;
|
|
597
|
+
nextCursor = result.nextCursor;
|
|
598
|
+
_b.label = 2;
|
|
599
|
+
case 2:
|
|
600
|
+
if (!hasNextPage) return [3 /*break*/, 4];
|
|
601
|
+
return [4 /*yield*/, provider.getOwnedObjects({ owner: userAddress, cursor: nextCursor, options: { showType: true, showContent: true } })];
|
|
602
|
+
case 3:
|
|
603
|
+
result = _b.sent();
|
|
604
|
+
data = __spreadArray(__spreadArray([], __read(data), false), __read(result.data), false);
|
|
605
|
+
hasNextPage = result.hasNextPage;
|
|
606
|
+
nextCursor = result.nextCursor;
|
|
607
|
+
return [3 /*break*/, 2];
|
|
608
|
+
case 4:
|
|
609
|
+
if (data.length === 0) {
|
|
610
|
+
return [2 /*return*/, bidReceipts];
|
|
611
|
+
}
|
|
612
|
+
try {
|
|
613
|
+
for (data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {
|
|
614
|
+
object = data_1_1.value;
|
|
615
|
+
try {
|
|
616
|
+
content = (object.data || {}).content;
|
|
617
|
+
if (!content)
|
|
618
|
+
continue;
|
|
619
|
+
typeStringComponents = (content.type || "").split("<");
|
|
620
|
+
subtype = (typeStringComponents[1] || "").replace(/>/, "");
|
|
621
|
+
typeComponents = typeStringComponents[0].split("::");
|
|
622
|
+
type = typeComponents[typeComponents.length - 1];
|
|
623
|
+
typePackage = typeComponents[0];
|
|
624
|
+
if (type === "TypusBidReceipt" && originFramworkAddress == typePackage) {
|
|
625
|
+
vaultIndex = content.fields.index;
|
|
626
|
+
receipt = {
|
|
627
|
+
// @ts-ignore
|
|
628
|
+
id: content.fields.id.id,
|
|
629
|
+
// @ts-ignore
|
|
630
|
+
index: vaultIndex,
|
|
631
|
+
// @ts-ignore
|
|
632
|
+
name: content.fields.name,
|
|
633
|
+
// @ts-ignore
|
|
634
|
+
description: content.fields.description,
|
|
635
|
+
// @ts-ignore
|
|
636
|
+
vid: content.fields.vid,
|
|
637
|
+
// @ts-ignore
|
|
638
|
+
metadata: content.fields.metadata,
|
|
639
|
+
};
|
|
640
|
+
bidReceipts[vaultIndex] || (bidReceipts[vaultIndex] = []);
|
|
641
|
+
bidReceipts[vaultIndex].push(receipt);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
catch (e) {
|
|
645
|
+
console.log("Error retrieving object", object, e);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
650
|
+
finally {
|
|
651
|
+
try {
|
|
652
|
+
if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);
|
|
653
|
+
}
|
|
654
|
+
finally { if (e_1) throw e_1.error; }
|
|
655
|
+
}
|
|
656
|
+
return [2 /*return*/, bidReceipts];
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
}); };
|
|
660
|
+
exports.getUserBidReceipts = getUserBidReceipts;
|
|
661
|
+
/**
|
|
662
|
+
* Fetch user's bids info
|
|
663
|
+
*
|
|
664
|
+
* @param provider - Sui Client instance.
|
|
665
|
+
* @param network - network type in lowercase.
|
|
666
|
+
* @param packageAddress - Typus main package address.
|
|
667
|
+
* @param framworkAddress - Typus framwork package address.
|
|
668
|
+
* @param originFramworkAddress - Typus intial framwork package address.
|
|
669
|
+
* @param registryAddress - Typus registry package address.
|
|
670
|
+
* @param strategyPoolAddress - strategy pool package address.
|
|
671
|
+
* @param userAddress - user's wallet address.
|
|
672
|
+
* @param prices - tokens prices (usd pair on Pyth)
|
|
673
|
+
* @return User Bids.
|
|
674
|
+
*/
|
|
675
|
+
var fetchUserBids = function (provider, network, packageAddress, framworkAddress, originFramworkAddress, registryAddress, strategyPoolAddress, userAddress, prices) { return __awaiter(void 0, void 0, void 0, function () {
|
|
676
|
+
var vaultsInfo, userReceipts, userStrategies, auctions, _a, sortedBidReceipts, bidVaultsInfo, bidShares, bidsFromBidShares, _loop_1, bidVaultsInfo_1, bidVaultsInfo_1_1, bidVaultInfo, autoBidsShares, vaultAutoBidReceipts, userStrategies_1, userStrategies_1_1, strategy, receipts, receipts_1, receipts_1_1, receiptItem, vaultIndex, receipt, autoBidVaultInfos, bidsFromStrategies, _loop_2, autoBidVaultInfos_1, autoBidVaultInfos_1_1, autoBidVaultInfo, byOrdered;
|
|
677
|
+
var e_2, _b, e_3, _c, e_4, _d, e_5, _e;
|
|
678
|
+
return __generator(this, function (_f) {
|
|
679
|
+
switch (_f.label) {
|
|
680
|
+
case 0: return [4 /*yield*/, (0, view_function_1.getVaults)(provider, packageAddress, registryAddress, [])];
|
|
681
|
+
case 1:
|
|
682
|
+
vaultsInfo = _f.sent();
|
|
683
|
+
return [4 /*yield*/, (0, exports.getUserBidReceipts)(provider, network, originFramworkAddress, userAddress)];
|
|
684
|
+
case 2:
|
|
685
|
+
userReceipts = _f.sent();
|
|
686
|
+
return [4 /*yield*/, (0, view_function_2.getUserStrategies)(provider, packageAddress, registryAddress, strategyPoolAddress, userAddress)];
|
|
687
|
+
case 3:
|
|
688
|
+
userStrategies = _f.sent();
|
|
689
|
+
return [4 /*yield*/, (0, view_function_1.getAuctions)(provider, packageAddress, registryAddress, [])];
|
|
690
|
+
case 4:
|
|
691
|
+
auctions = _f.sent();
|
|
692
|
+
if (!(typeof prices === "undefined")) return [3 /*break*/, 6];
|
|
693
|
+
return [4 /*yield*/, (0, exports.fetchPrices)(provider, "testnet")];
|
|
694
|
+
case 5:
|
|
695
|
+
prices = _f.sent();
|
|
696
|
+
_f.label = 6;
|
|
697
|
+
case 6:
|
|
698
|
+
_a = (0, exports.parseBidReceipt)(Object.values(vaultsInfo), userReceipts), sortedBidReceipts = _a.sortedBidReceipts, bidVaultsInfo = _a.bidVaultsInfo;
|
|
699
|
+
return [4 /*yield*/, (0, view_function_1.getMyBids)(provider, framworkAddress, packageAddress, registryAddress, sortedBidReceipts)];
|
|
700
|
+
case 7:
|
|
701
|
+
bidShares = _f.sent();
|
|
702
|
+
bidsFromBidShares = [];
|
|
703
|
+
_loop_1 = function (bidVaultInfo) {
|
|
704
|
+
var bidShare = bidShares["".concat(bidVaultInfo.receipt.index, "-").concat(bidVaultInfo.receipt.vid)];
|
|
705
|
+
var auction = auctions ? auctions[bidVaultInfo.vaultInfo.info.index] : null;
|
|
706
|
+
var _g = __read((0, vault_1.parseAssets)(bidVaultInfo.vaultInfo.info), 3), dToken = _g[0], bToken = _g[1], oToken = _g[2];
|
|
707
|
+
if (bidShare) {
|
|
708
|
+
var price = (0, bignumber_js_1.default)(prices[oToken.toLowerCase()].price)
|
|
709
|
+
.div((0, bignumber_js_1.default)(10).pow(prices[oToken.toLowerCase()].decimal))
|
|
710
|
+
.toString();
|
|
711
|
+
var data = (0, exports.parseBid)(bidVaultInfo, bidShare, auction, price, false);
|
|
712
|
+
var checkExistVault = bidsFromBidShares.find(function (p) { return p.vaultIndex === bidVaultInfo.vaultInfo.info.index && p.receiptsVid.includes(bidVaultInfo.receipt.vid); });
|
|
713
|
+
if (checkExistVault) {
|
|
714
|
+
// Merge the bid receipts into the same vault
|
|
715
|
+
checkExistVault.receiptsId = __spreadArray(__spreadArray([], __read(checkExistVault.receiptsId), false), __read(data.receiptsId), false);
|
|
716
|
+
}
|
|
717
|
+
else {
|
|
718
|
+
bidsFromBidShares.push(data);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
};
|
|
722
|
+
try {
|
|
723
|
+
for (bidVaultsInfo_1 = __values(bidVaultsInfo), bidVaultsInfo_1_1 = bidVaultsInfo_1.next(); !bidVaultsInfo_1_1.done; bidVaultsInfo_1_1 = bidVaultsInfo_1.next()) {
|
|
724
|
+
bidVaultInfo = bidVaultsInfo_1_1.value;
|
|
725
|
+
_loop_1(bidVaultInfo);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
729
|
+
finally {
|
|
730
|
+
try {
|
|
731
|
+
if (bidVaultsInfo_1_1 && !bidVaultsInfo_1_1.done && (_b = bidVaultsInfo_1.return)) _b.call(bidVaultsInfo_1);
|
|
732
|
+
}
|
|
733
|
+
finally { if (e_2) throw e_2.error; }
|
|
734
|
+
}
|
|
735
|
+
autoBidsShares = {};
|
|
736
|
+
vaultAutoBidReceipts = {};
|
|
737
|
+
try {
|
|
738
|
+
for (userStrategies_1 = __values(userStrategies), userStrategies_1_1 = userStrategies_1.next(); !userStrategies_1_1.done; userStrategies_1_1 = userStrategies_1.next()) {
|
|
739
|
+
strategy = userStrategies_1_1.value;
|
|
740
|
+
receipts = strategy.receipts;
|
|
741
|
+
try {
|
|
742
|
+
for (receipts_1 = (e_4 = void 0, __values(receipts)), receipts_1_1 = receipts_1.next(); !receipts_1_1.done; receipts_1_1 = receipts_1.next()) {
|
|
743
|
+
receiptItem = receipts_1_1.value;
|
|
744
|
+
vaultIndex = receiptItem.index;
|
|
745
|
+
receipt = {
|
|
746
|
+
id: receiptItem.id,
|
|
747
|
+
index: vaultIndex,
|
|
748
|
+
name: "",
|
|
749
|
+
description: "",
|
|
750
|
+
vid: receiptItem.vid,
|
|
751
|
+
metadata: receiptItem.metadata,
|
|
752
|
+
};
|
|
753
|
+
if (vaultAutoBidReceipts[vaultIndex]) {
|
|
754
|
+
vaultAutoBidReceipts[vaultIndex] = __spreadArray(__spreadArray([], __read(vaultAutoBidReceipts[vaultIndex]), false), [receipt], false);
|
|
755
|
+
}
|
|
756
|
+
else {
|
|
757
|
+
vaultAutoBidReceipts[vaultIndex] = [receipt];
|
|
758
|
+
}
|
|
759
|
+
if (autoBidsShares["".concat(vaultIndex, "-").concat(receiptItem.vid)]) {
|
|
760
|
+
autoBidsShares["".concat(vaultIndex, "-").concat(receiptItem.vid)].share = (Number(autoBidsShares["".concat(vaultIndex, "-").concat(receiptItem.vid)].share) +
|
|
761
|
+
Number(strategy.my_bids["".concat(vaultIndex, "-").concat(receiptItem.vid)].share)).toString();
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
autoBidsShares["".concat(vaultIndex, "-").concat(receiptItem.vid)] = {
|
|
765
|
+
bidVault: strategy.my_bids["".concat(vaultIndex, "-").concat(receiptItem.vid)].bidVault,
|
|
766
|
+
share: strategy.my_bids["".concat(vaultIndex, "-").concat(receiptItem.vid)].share,
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
772
|
+
finally {
|
|
773
|
+
try {
|
|
774
|
+
if (receipts_1_1 && !receipts_1_1.done && (_d = receipts_1.return)) _d.call(receipts_1);
|
|
775
|
+
}
|
|
776
|
+
finally { if (e_4) throw e_4.error; }
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
781
|
+
finally {
|
|
782
|
+
try {
|
|
783
|
+
if (userStrategies_1_1 && !userStrategies_1_1.done && (_c = userStrategies_1.return)) _c.call(userStrategies_1);
|
|
784
|
+
}
|
|
785
|
+
finally { if (e_3) throw e_3.error; }
|
|
786
|
+
}
|
|
787
|
+
autoBidVaultInfos = [];
|
|
788
|
+
Object.values(vaultsInfo).forEach(function (v) {
|
|
789
|
+
var curReceipts = vaultAutoBidReceipts[v.info.index];
|
|
790
|
+
if (curReceipts) {
|
|
791
|
+
curReceipts.map(function (item) {
|
|
792
|
+
autoBidVaultInfos.push({ vaultInfo: v, receipt: item });
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
bidsFromStrategies = [];
|
|
797
|
+
_loop_2 = function (autoBidVaultInfo) {
|
|
798
|
+
var bidShare = autoBidsShares["".concat(autoBidVaultInfo.receipt.index, "-").concat(autoBidVaultInfo.receipt.vid)];
|
|
799
|
+
var auction = auctions ? auctions[autoBidVaultInfo.vaultInfo.info.index] : null;
|
|
800
|
+
var _h = __read((0, vault_1.parseAssets)(autoBidVaultInfo.vaultInfo.info), 3), dToken = _h[0], bToken = _h[1], oToken = _h[2];
|
|
801
|
+
if (bidShare) {
|
|
802
|
+
var price = (0, bignumber_js_1.default)(prices[oToken.toLowerCase()].price)
|
|
803
|
+
.div((0, bignumber_js_1.default)(10).pow(prices[oToken.toLowerCase()].decimal))
|
|
804
|
+
.toString();
|
|
805
|
+
var data = (0, exports.parseBid)(autoBidVaultInfo, bidShare, auction, price, false);
|
|
806
|
+
var checkExistVault = bidsFromStrategies.find(function (p) { return p.vaultIndex === autoBidVaultInfo.vaultInfo.info.index && p.receiptsVid.includes(autoBidVaultInfo.receipt.vid); });
|
|
807
|
+
if (checkExistVault) {
|
|
808
|
+
// Merge the bid receipts into the same vault
|
|
809
|
+
checkExistVault.receiptsId = __spreadArray(__spreadArray([], __read(checkExistVault.receiptsId), false), __read(data.receiptsId), false);
|
|
810
|
+
}
|
|
811
|
+
else {
|
|
812
|
+
bidsFromStrategies.push(data);
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
};
|
|
816
|
+
try {
|
|
817
|
+
for (autoBidVaultInfos_1 = __values(autoBidVaultInfos), autoBidVaultInfos_1_1 = autoBidVaultInfos_1.next(); !autoBidVaultInfos_1_1.done; autoBidVaultInfos_1_1 = autoBidVaultInfos_1.next()) {
|
|
818
|
+
autoBidVaultInfo = autoBidVaultInfos_1_1.value;
|
|
819
|
+
_loop_2(autoBidVaultInfo);
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
823
|
+
finally {
|
|
824
|
+
try {
|
|
825
|
+
if (autoBidVaultInfos_1_1 && !autoBidVaultInfos_1_1.done && (_e = autoBidVaultInfos_1.return)) _e.call(autoBidVaultInfos_1);
|
|
826
|
+
}
|
|
827
|
+
finally { if (e_5) throw e_5.error; }
|
|
828
|
+
}
|
|
829
|
+
byOrdered = (0, lodash_1.orderBy)(__spreadArray(__spreadArray([], __read(bidsFromBidShares), false), __read(bidsFromStrategies), false), ["expiry", "tokenOrder", "periodOrder", "optionTypeOrder"], ["asc", "asc", "asc", "asc"]);
|
|
830
|
+
return [2 /*return*/, byOrdered];
|
|
831
|
+
}
|
|
832
|
+
});
|
|
833
|
+
}); };
|
|
834
|
+
exports.fetchUserBids = fetchUserBids;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const WrappedToken: {
|
|
2
|
+
[key: string]: string;
|
|
3
|
+
};
|
|
4
|
+
export declare const UnwrappedToken: {
|
|
5
|
+
[key: string]: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const MillionToken: {
|
|
8
|
+
[key: string]: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const RemoveMillionToken: {
|
|
11
|
+
[key: string]: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const LST: {
|
|
14
|
+
[key: string]: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const StableCoin: string[];
|
|
17
|
+
export declare const getTokenName: ({ token, wrapped, million }: {
|
|
18
|
+
token: string;
|
|
19
|
+
wrapped?: boolean | undefined;
|
|
20
|
+
million?: boolean | undefined;
|
|
21
|
+
}) => string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTokenName = exports.StableCoin = exports.LST = exports.RemoveMillionToken = exports.MillionToken = exports.UnwrappedToken = exports.WrappedToken = void 0;
|
|
4
|
+
exports.WrappedToken = {
|
|
5
|
+
ETH: "WETH",
|
|
6
|
+
BTC: "WBTC",
|
|
7
|
+
SOL: "WSOL",
|
|
8
|
+
};
|
|
9
|
+
exports.UnwrappedToken = {
|
|
10
|
+
WETH: "ETH",
|
|
11
|
+
WBTC: "BTC",
|
|
12
|
+
WSOL: "SOL",
|
|
13
|
+
};
|
|
14
|
+
exports.MillionToken = {
|
|
15
|
+
FUD: "MFUD",
|
|
16
|
+
};
|
|
17
|
+
exports.RemoveMillionToken = {
|
|
18
|
+
MFUD: "FUD",
|
|
19
|
+
};
|
|
20
|
+
exports.LST = {
|
|
21
|
+
AFSUI: "SUI",
|
|
22
|
+
HASUI: "SUI",
|
|
23
|
+
VSUI: "SUI",
|
|
24
|
+
};
|
|
25
|
+
exports.StableCoin = ["USDC", "USDT", "BUCK", "USDY"];
|
|
26
|
+
var getTokenName = function (_a) {
|
|
27
|
+
var _b, _c, _d, _e;
|
|
28
|
+
var token = _a.token, wrapped = _a.wrapped, million = _a.million;
|
|
29
|
+
var tokenName = token;
|
|
30
|
+
if (wrapped) {
|
|
31
|
+
tokenName = (_b = exports.WrappedToken[token]) !== null && _b !== void 0 ? _b : token;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
tokenName = (_c = exports.UnwrappedToken[token]) !== null && _c !== void 0 ? _c : token;
|
|
35
|
+
}
|
|
36
|
+
return million ? (_d = exports.MillionToken[tokenName]) !== null && _d !== void 0 ? _d : tokenName : (_e = exports.RemoveMillionToken[tokenName]) !== null && _e !== void 0 ? _e : tokenName;
|
|
37
|
+
};
|
|
38
|
+
exports.getTokenName = getTokenName;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAssets = exports.AbbrStrategyName = exports.Period = void 0;
|
|
4
|
+
var token_1 = require("../../token");
|
|
5
|
+
exports.Period = {
|
|
6
|
+
0: "daily",
|
|
7
|
+
1: "weekly",
|
|
8
|
+
2: "monthly",
|
|
9
|
+
3: "hourly",
|
|
10
|
+
};
|
|
11
|
+
exports.AbbrStrategyName = {
|
|
12
|
+
0: "Call",
|
|
13
|
+
1: "Put",
|
|
14
|
+
2: "Call Spread",
|
|
15
|
+
4: "Capped Call",
|
|
16
|
+
5: "Capped Put",
|
|
17
|
+
6: "Capped Call",
|
|
18
|
+
};
|
|
19
|
+
var parseAssets = function (info) {
|
|
20
|
+
var dToken = info.depositToken, bToken = info.bidToken, oToken = info.settlementBase;
|
|
21
|
+
return (0, token_1.typeArgsToAssets)([dToken, bToken, oToken]);
|
|
22
|
+
};
|
|
23
|
+
exports.parseAssets = parseAssets;
|
package/package.json
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
"name": "@typus/typus-sdk",
|
|
3
3
|
"author": "Typus",
|
|
4
4
|
"description": "typus sdk",
|
|
5
|
-
"version": "1.2.87
|
|
5
|
+
"version": "1.2.87",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@mysten/bcs": "^0.11.1",
|
|
8
8
|
"@mysten/kiosk": "0.8.10",
|
|
9
9
|
"@mysten/sui.js": "0.54.1",
|
|
10
|
+
"@pythnetwork/client": "^2.21.0",
|
|
11
|
+
"@solana/web3.js": "^1.91.8",
|
|
10
12
|
"@types/node": "^20.5.7",
|
|
11
13
|
"aftermath-ts-sdk": "^1.1.14",
|
|
12
14
|
"bignumber.js": "^9.1.1",
|
|
@@ -33,12 +35,13 @@
|
|
|
33
35
|
"js-tokens": "^8.0.1",
|
|
34
36
|
"js-yaml": "^4.1.0",
|
|
35
37
|
"json2csv": "^6.0.0-alpha.2",
|
|
38
|
+
"lodash": "^4.17.21",
|
|
36
39
|
"math-erf": "^1.0.0",
|
|
37
40
|
"minimatch": "^9.0.3",
|
|
38
41
|
"minimist": "^1.2.5",
|
|
39
42
|
"mkdirp": "^3.0.1",
|
|
40
43
|
"mocha": "^10.1.0",
|
|
41
|
-
"moment": "^2.
|
|
44
|
+
"moment": "^2.30.1",
|
|
42
45
|
"node-cron": "^3.0.2",
|
|
43
46
|
"once": "^1.4.0",
|
|
44
47
|
"path-is-absolute": "^2.0.0",
|