@symmetry-hq/temp-v3-sdk 0.0.9 → 0.0.11
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/dist/src/index.d.ts +7 -4
- package/dist/src/index.js +40 -7
- package/dist/src/instructions/management/edit.js +0 -1
- package/dist/src/states/basket.d.ts +3 -3
- package/dist/src/states/basket.js +173 -169
- package/dist/test.js +9 -4
- package/package.json +1 -1
- package/src/constants.ts +0 -1
- package/src/index.ts +35 -11
- package/src/instructions/management/edit.ts +0 -2
- package/src/states/basket.ts +173 -172
- package/test.ts +13 -6
package/dist/src/index.d.ts
CHANGED
|
@@ -21,10 +21,13 @@ export declare class SymmetryCore {
|
|
|
21
21
|
jupiterApiKey?: string;
|
|
22
22
|
maxAllowedAccounts?: number;
|
|
23
23
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
fetchBasket(basketPubkey: string): Promise<Basket>;
|
|
25
|
+
fetchMultipleBaskets(basketPubkeys: string[]): Promise<Map<string, Basket>>;
|
|
26
|
+
fetchAllBaskets(basketFilter?: BasketFilter): Promise<Basket[]>;
|
|
27
|
+
fetchCreatedBaskets(creatorPubkey: string): Promise<Basket[]>;
|
|
28
|
+
fetchHostedBaskets(hostPubkey: string): Promise<Basket[]>;
|
|
29
|
+
fetchManagedBaskets(managerPubkey: string): Promise<Basket[]>;
|
|
30
|
+
deriveBasketsByMints(mints: string[]): Promise<Map<string, string>>;
|
|
28
31
|
fetchBasketsFromMints(mints: string[]): Promise<Map<string, Basket>>;
|
|
29
32
|
loadBasketPrice(basket: Basket): Promise<Basket>;
|
|
30
33
|
fetchAllIntents(filters: IntentFilter[]): Promise<Intent[]>;
|
package/dist/src/index.js
CHANGED
|
@@ -56,16 +56,49 @@ class SymmetryCore {
|
|
|
56
56
|
// async setPayer(payer: PublicKey) {
|
|
57
57
|
// this.sdkParams.payer = payer;
|
|
58
58
|
// }
|
|
59
|
-
|
|
59
|
+
fetchBasket(basketPubkey) {
|
|
60
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
const basketState = yield (0, basket_2.fetchBasket)(this.sdkParams.connection,
|
|
61
|
+
const basketState = yield (0, basket_2.fetchBasket)(this.sdkParams.connection, new web3_js_1.PublicKey(basketPubkey));
|
|
62
62
|
return basketState;
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
fetchMultipleBaskets(basketPubkeys) {
|
|
66
66
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
let basketPubkeysArray = basketPubkeys.map(pubkey => new web3_js_1.PublicKey(pubkey));
|
|
68
|
+
const basketsMap = yield (0, basket_2.fetchBaskektsMultiple)(this.sdkParams.connection, basketPubkeysArray);
|
|
69
|
+
return basketsMap;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
fetchAllBaskets(basketFilter) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
return yield (0, basket_2.fetchBaskets)(this.sdkParams.connection, basketFilter);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
fetchCreatedBaskets(creatorPubkey) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
return yield (0, basket_2.fetchBaskets)(this.sdkParams.connection, { type: "creator", pubkey: creatorPubkey });
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
fetchHostedBaskets(hostPubkey) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
return yield (0, basket_2.fetchBaskets)(this.sdkParams.connection, { type: "host", pubkey: hostPubkey });
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
fetchManagedBaskets(managerPubkey) {
|
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
return yield (0, basket_2.fetchBaskets)(this.sdkParams.connection, { type: "manager", pubkey: managerPubkey });
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
deriveBasketsByMints(mints) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
let result = new Map();
|
|
95
|
+
for (let basketId = 0; basketId < 50000; basketId++) {
|
|
96
|
+
let mint = (0, pda_1.getBasketTokenMintPda)(basketId).toBase58();
|
|
97
|
+
if (mints.includes(mint)) {
|
|
98
|
+
result.set(mint, (0, pda_1.getBasketState)(new web3_js_1.PublicKey(mint)).toBase58());
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
69
102
|
});
|
|
70
103
|
}
|
|
71
104
|
fetchBasketsFromMints(mints) {
|
|
@@ -278,7 +311,7 @@ class SymmetryCore {
|
|
|
278
311
|
openBasketIntentTx(params) {
|
|
279
312
|
return __awaiter(this, void 0, void 0, function* () {
|
|
280
313
|
var _a;
|
|
281
|
-
let basket = yield this.
|
|
314
|
+
let basket = yield this.fetchBasket(params.edit_data.basket);
|
|
282
315
|
let manager = new web3_js_1.PublicKey(params.edit_data.manager);
|
|
283
316
|
let useBounty = params.edit_data.use_bounty == false ? false : true;
|
|
284
317
|
let activationTimestamp = new anchor_1.BN((_a = params.edit_data.activation_timestamp) !== null && _a !== void 0 ? _a : 0);
|
|
@@ -354,7 +387,7 @@ class SymmetryCore {
|
|
|
354
387
|
let { keeper, intent } = params;
|
|
355
388
|
let basketMint;
|
|
356
389
|
if (intent.taskType === intent_1.TaskType.EditMetadataSettings) {
|
|
357
|
-
let basket = yield this.
|
|
390
|
+
let basket = yield this.fetchBasket(intent.basket.toBase58());
|
|
358
391
|
basketMint = basket.mint;
|
|
359
392
|
}
|
|
360
393
|
let ix = (0, edit_1.executeEditBasketIntentIx)({
|
|
@@ -21,7 +21,6 @@ const EDIT_PRIVATE_BASKET_SETTINGS_DISCRIMINATOR = Buffer.from([202, 54, 138, 17
|
|
|
21
21
|
const CREATE_EDIT_BASKET_INTENT_DISCRIMINATOR = Buffer.from([82, 150, 58, 227, 153, 129, 20, 30]);
|
|
22
22
|
const EDIT_BASKET_DISCRIMINATOR = Buffer.from([156, 31, 4, 39, 248, 29, 55, 220]);
|
|
23
23
|
const CANCEL_INTENT_DISCRIMINATOR = Buffer.from([181, 103, 27, 100, 84, 89, 70, 236]);
|
|
24
|
-
const ZERO_INTENT_SEED = new Uint8Array(32).fill(0);
|
|
25
24
|
function editPrivateBasketSettingsIx(params) {
|
|
26
25
|
let metadataAccount = (0, pda_1.getMetadataAccount)(params.mint);
|
|
27
26
|
let globalConfig = (0, pda_1.getGlobalConfigPda)();
|
|
@@ -5,9 +5,9 @@ export declare function addLutsToBaskets(connection: Connection, baskets: Basket
|
|
|
5
5
|
export declare function fetchBasket(connection: Connection, basketAddress: PublicKey): Promise<Basket>;
|
|
6
6
|
export declare function fetchBaskektsMultiple(connection: Connection, basketAddresses: PublicKey[]): Promise<Map<string, Basket>>;
|
|
7
7
|
export interface BasketFilter {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
type: "host" | "creator" | "manager";
|
|
9
|
+
pubkey: string;
|
|
10
10
|
}
|
|
11
|
-
export declare function fetchBaskets(connection: Connection,
|
|
11
|
+
export declare function fetchBaskets(connection: Connection, filter?: BasketFilter): Promise<Basket[]>;
|
|
12
12
|
export declare function getBasketOracleAccountInfos(connection: Connection, basket: Basket): Promise<Map<string, AccountInfo<Buffer> | null>>;
|
|
13
13
|
export declare function loadBasketPrice(basket: Basket, connection: Connection): Promise<Basket>;
|
|
@@ -57,207 +57,185 @@ function addFieldsToBasket(basket) {
|
|
|
57
57
|
basket.settings.managers.managers = basket.settings.managers.managers.slice(0, totalManagers);
|
|
58
58
|
basket.settings.managers.managersWeightBps = basket.settings.managers.managersWeightBps.slice(0, totalManagers);
|
|
59
59
|
basket = Object.assign(Object.assign({}, basket), { metadata: metadata });
|
|
60
|
-
let
|
|
60
|
+
let managers = [];
|
|
61
61
|
for (let i = 0; i < basket.settings.managers.managers.length; i++) {
|
|
62
62
|
let manager = basket.settings.managers.managers[i].toBase58();
|
|
63
|
-
let authorities =
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (((2 ** i) & basket.settings.addTokenIntentAuthorityBitmask) != 0)
|
|
83
|
-
authorities.push("add_token");
|
|
84
|
-
if (((2 ** i) & basket.settings.updateWeightsIntentAuthorityBitmask) != 0)
|
|
85
|
-
authorities.push("update_weights");
|
|
86
|
-
if (((2 ** i) & basket.settings.makeDirectSwapIntentAuthorityBitmask) != 0)
|
|
87
|
-
authorities.push("make_direct_swap");
|
|
88
|
-
authoritiesMap.set(manager, authorities);
|
|
63
|
+
let authorities = {
|
|
64
|
+
managers: (((2 ** i) & basket.settings.managersAuthorityBitmask) != 0),
|
|
65
|
+
fees: (((2 ** i) & basket.settings.feesAuthorityBitmask) != 0),
|
|
66
|
+
schedule: (((2 ** i) & basket.settings.scheduleAuthorityBitmask) != 0),
|
|
67
|
+
automation: (((2 ** i) & basket.settings.automationAuthorityBitmask) != 0),
|
|
68
|
+
lp: (((2 ** i) & basket.settings.lpAuthorityBitmask) != 0),
|
|
69
|
+
metadata: (((2 ** i) & basket.settings.metadataAuthorityBitmask) != 0),
|
|
70
|
+
deposits: (((2 ** i) & basket.settings.depositsAuthorityBitmask) != 0),
|
|
71
|
+
force_rebalance: (((2 ** i) & basket.settings.forceRebalanceAuthorityBitmask) != 0),
|
|
72
|
+
custom_rebalance: (((2 ** i) & basket.settings.customRebalanceAuthorityBitmask) != 0),
|
|
73
|
+
add_token: (((2 ** i) & basket.settings.addTokenIntentAuthorityBitmask) != 0),
|
|
74
|
+
update_weights: (((2 ** i) & basket.settings.updateWeightsIntentAuthorityBitmask) != 0),
|
|
75
|
+
make_direct_swap: (((2 ** i) & basket.settings.makeDirectSwapIntentAuthorityBitmask) != 0),
|
|
76
|
+
};
|
|
77
|
+
managers.push({
|
|
78
|
+
pubkey: manager,
|
|
79
|
+
weight_bps: basket.settings.managers.managersWeightBps[i],
|
|
80
|
+
authorities: authorities,
|
|
81
|
+
});
|
|
89
82
|
}
|
|
90
83
|
let formatted = {
|
|
91
84
|
pubkey: basket.ownAddress.toBase58(),
|
|
92
85
|
name: (_a = basket.metadata) === null || _a === void 0 ? void 0 : _a.name,
|
|
93
86
|
symbol: (_b = basket.metadata) === null || _b === void 0 ? void 0 : _b.symbol,
|
|
94
87
|
uri: (_c = basket.metadata) === null || _c === void 0 ? void 0 : _c.uri,
|
|
95
|
-
|
|
96
|
-
version: basket.version.toString(),
|
|
88
|
+
version: basket.version,
|
|
97
89
|
own_address: basket.ownAddress.toBase58(),
|
|
98
90
|
mint: basket.mint.toBase58(),
|
|
99
|
-
supply_outstanding: basket.supplyOutstanding.
|
|
91
|
+
supply_outstanding: basket.supplyOutstanding.toNumber(),
|
|
100
92
|
creator: basket.settings.creator.toBase58(),
|
|
101
93
|
host: basket.settings.host.toBase58(),
|
|
102
|
-
basket_type: basket.settings.basketType == 0 ? "
|
|
94
|
+
basket_type: basket.settings.basketType == 0 ? "private" : "public",
|
|
103
95
|
bounty_mint: basket.settings.bountyMint.toBase58(),
|
|
104
|
-
bounty_balance: basket.settings.bountyBalance.toString(),
|
|
105
|
-
start_price: (0, fraction_1.fractionToDecimal)(basket.settings.startPrice).
|
|
106
|
-
high_watermark: (0, fraction_1.fractionToDecimal)(basket.settings.highWaterMark).
|
|
107
|
-
active_rebalance: basket.settings.activeRebalance.toString(),
|
|
108
|
-
active_deposits: basket.settings.activeDeposits.toString(),
|
|
109
|
-
active_managements: basket.settings.activeManagements.toString(),
|
|
110
|
-
last_automation_execution_timestamp: basket.settings.lastAutomationExecutionTimestamp.toString(),
|
|
111
|
-
managers:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
96
|
+
bounty_balance: parseInt(basket.settings.bountyBalance.toString()),
|
|
97
|
+
start_price: (0, fraction_1.fractionToDecimal)(basket.settings.startPrice).toNumber(),
|
|
98
|
+
high_watermark: (0, fraction_1.fractionToDecimal)(basket.settings.highWaterMark).toNumber(),
|
|
99
|
+
active_rebalance: parseInt(basket.settings.activeRebalance.toString()),
|
|
100
|
+
active_deposits: parseInt(basket.settings.activeDeposits.toString()),
|
|
101
|
+
active_managements: parseInt(basket.settings.activeManagements.toString()),
|
|
102
|
+
last_automation_execution_timestamp: parseInt(basket.settings.lastAutomationExecutionTimestamp.toString()),
|
|
103
|
+
managers: {
|
|
104
|
+
managers,
|
|
105
|
+
modification_delay: parseInt(basket.settings.managers.modificationDelay.toString()),
|
|
106
|
+
updated_at: parseInt(basket.settings.managersLastUpdateTimestamp.toString()),
|
|
107
|
+
},
|
|
116
108
|
fees: {
|
|
117
|
-
host_deposit_fee_bps: basket.settings.fees.hostDepositFeeBps
|
|
118
|
-
host_withdraw_fee_bps: basket.settings.fees.hostWithdrawFeeBps
|
|
119
|
-
host_management_fee_bps: basket.settings.fees.hostManagementFeeBps
|
|
120
|
-
host_performance_fee_bps: basket.settings.fees.hostPerformanceFeeBps
|
|
121
|
-
creator_deposit_fee_bps: basket.settings.fees.creatorDepositFeeBps
|
|
122
|
-
creator_withdraw_fee_bps: basket.settings.fees.creatorWithdrawFeeBps
|
|
123
|
-
creator_management_fee_bps: basket.settings.fees.creatorManagementFeeBps
|
|
124
|
-
creator_performance_fee_bps: basket.settings.fees.creatorPerformanceFeeBps
|
|
125
|
-
managers_deposit_fee_bps: basket.settings.fees.managersDepositFeeBps
|
|
126
|
-
managers_withdraw_fee_bps: basket.settings.fees.managersWithdrawFeeBps
|
|
127
|
-
managers_management_fee_bps: basket.settings.fees.managersManagementFeeBps
|
|
128
|
-
managers_performance_fee_bps: basket.settings.fees.managersPerformanceFeeBps
|
|
129
|
-
basket_deposit_fee_bps: basket.settings.fees.basketDepositFeeBps
|
|
130
|
-
basket_withdraw_fee_bps: basket.settings.fees.basketWithdrawFeeBps
|
|
131
|
-
|
|
132
|
-
|
|
109
|
+
host_deposit_fee_bps: basket.settings.fees.hostDepositFeeBps,
|
|
110
|
+
host_withdraw_fee_bps: basket.settings.fees.hostWithdrawFeeBps,
|
|
111
|
+
host_management_fee_bps: basket.settings.fees.hostManagementFeeBps,
|
|
112
|
+
host_performance_fee_bps: basket.settings.fees.hostPerformanceFeeBps,
|
|
113
|
+
creator_deposit_fee_bps: basket.settings.fees.creatorDepositFeeBps,
|
|
114
|
+
creator_withdraw_fee_bps: basket.settings.fees.creatorWithdrawFeeBps,
|
|
115
|
+
creator_management_fee_bps: basket.settings.fees.creatorManagementFeeBps,
|
|
116
|
+
creator_performance_fee_bps: basket.settings.fees.creatorPerformanceFeeBps,
|
|
117
|
+
managers_deposit_fee_bps: basket.settings.fees.managersDepositFeeBps,
|
|
118
|
+
managers_withdraw_fee_bps: basket.settings.fees.managersWithdrawFeeBps,
|
|
119
|
+
managers_management_fee_bps: basket.settings.fees.managersManagementFeeBps,
|
|
120
|
+
managers_performance_fee_bps: basket.settings.fees.managersPerformanceFeeBps,
|
|
121
|
+
basket_deposit_fee_bps: basket.settings.fees.basketDepositFeeBps,
|
|
122
|
+
basket_withdraw_fee_bps: basket.settings.fees.basketWithdrawFeeBps,
|
|
123
|
+
modification_delay: parseInt(basket.settings.fees.modificationDelay.toString()),
|
|
124
|
+
updated_at: parseInt(basket.settings.feesLastUpdateTimestamp.toString()),
|
|
133
125
|
},
|
|
134
|
-
fees_last_update_timestamp: basket.settings.feesLastUpdateTimestamp.toString(),
|
|
135
|
-
fees_authority_bitmask: basket.settings.feesAuthorityBitmask.toString(),
|
|
136
126
|
schedule: {
|
|
137
|
-
cycle_start_time: basket.settings.schedule.cycleStartTime.toString(),
|
|
138
|
-
cycle_duration: basket.settings.schedule.cycleDuration.toString(),
|
|
139
|
-
deposits_start: basket.settings.schedule.depositsStart.toString(),
|
|
140
|
-
deposits_end: basket.settings.schedule.depositsEnd.toString(),
|
|
141
|
-
automation_start: basket.settings.schedule.automationStart.toString(),
|
|
142
|
-
automation_end: basket.settings.schedule.automationEnd.toString(),
|
|
143
|
-
management_start: basket.settings.schedule.managementStart.toString(),
|
|
144
|
-
management_end: basket.settings.schedule.managementEnd.toString(),
|
|
145
|
-
modification_delay: basket.settings.schedule.modificationDelay.toString(),
|
|
127
|
+
cycle_start_time: parseInt(basket.settings.schedule.cycleStartTime.toString()),
|
|
128
|
+
cycle_duration: parseInt(basket.settings.schedule.cycleDuration.toString()),
|
|
129
|
+
deposits_start: parseInt(basket.settings.schedule.depositsStart.toString()),
|
|
130
|
+
deposits_end: parseInt(basket.settings.schedule.depositsEnd.toString()),
|
|
131
|
+
automation_start: parseInt(basket.settings.schedule.automationStart.toString()),
|
|
132
|
+
automation_end: parseInt(basket.settings.schedule.automationEnd.toString()),
|
|
133
|
+
management_start: parseInt(basket.settings.schedule.managementStart.toString()),
|
|
134
|
+
management_end: parseInt(basket.settings.schedule.managementEnd.toString()),
|
|
135
|
+
modification_delay: parseInt(basket.settings.schedule.modificationDelay.toString()),
|
|
136
|
+
updated_at: parseInt(basket.settings.scheduleLastUpdateTimestamp.toString()),
|
|
146
137
|
},
|
|
147
|
-
schedule_last_update_timestamp: basket.settings.scheduleLastUpdateTimestamp.toString(),
|
|
148
|
-
schedule_authority_bitmask: basket.settings.scheduleAuthorityBitmask.toString(),
|
|
149
138
|
automation: {
|
|
150
|
-
|
|
151
|
-
rebalance_slippage_threshold_bps: basket.settings.automation.rebalanceSlippageThresholdBps
|
|
152
|
-
per_trade_rebalance_slippage_threshold_bps: basket.settings.automation.perTradeRebalanceSlippageThresholdBps
|
|
153
|
-
rebalance_activation_threshold_abs_bps: basket.settings.automation.rebalanceActivationThresholdAbsBps
|
|
154
|
-
rebalance_activation_threshold_rel_bps: basket.settings.automation.rebalanceActivationThresholdRelBps
|
|
155
|
-
rebalance_activation_cooldown: basket.settings.automation.rebalanceActivationCooldown.toString(),
|
|
156
|
-
|
|
157
|
-
|
|
139
|
+
allow: basket.settings.automation.allowAutomation == 1 ? true : false,
|
|
140
|
+
rebalance_slippage_threshold_bps: basket.settings.automation.rebalanceSlippageThresholdBps,
|
|
141
|
+
per_trade_rebalance_slippage_threshold_bps: basket.settings.automation.perTradeRebalanceSlippageThresholdBps,
|
|
142
|
+
rebalance_activation_threshold_abs_bps: basket.settings.automation.rebalanceActivationThresholdAbsBps,
|
|
143
|
+
rebalance_activation_threshold_rel_bps: basket.settings.automation.rebalanceActivationThresholdRelBps,
|
|
144
|
+
rebalance_activation_cooldown: parseInt(basket.settings.automation.rebalanceActivationCooldown.toString()),
|
|
145
|
+
modification_delay: parseInt(basket.settings.automation.modificationDelay.toString()),
|
|
146
|
+
updated_at: parseInt(basket.settings.automationLastUpdateTimestamp.toString()),
|
|
158
147
|
},
|
|
159
|
-
automation_last_update_timestamp: basket.settings.automationLastUpdateTimestamp.toString(),
|
|
160
|
-
automation_authority_bitmask: basket.settings.automationAuthorityBitmask.toString(),
|
|
161
148
|
lp: {
|
|
162
|
-
|
|
163
|
-
lp_threshold_bps: basket.settings.lp.lpThresholdBps
|
|
164
|
-
|
|
165
|
-
|
|
149
|
+
allow: basket.settings.lp.allowLp == 1 ? true : false,
|
|
150
|
+
lp_threshold_bps: basket.settings.lp.lpThresholdBps,
|
|
151
|
+
modification_delay: parseInt(basket.settings.lp.modificationDelay.toString()),
|
|
152
|
+
updated_at: parseInt(basket.settings.lpLastUpdateTimestamp.toString()),
|
|
153
|
+
},
|
|
154
|
+
deposits: {
|
|
155
|
+
allow: basket.settings.depositsAreAllowed == 1 ? true : false,
|
|
156
|
+
},
|
|
157
|
+
force_rebalance: {
|
|
158
|
+
allow: basket.settings.forceRebalanceIsAllowed == 1 ? true : false,
|
|
159
|
+
modification_delay: parseInt(basket.settings.forceRebalanceModificationDelay.toString()),
|
|
160
|
+
updated_at: parseInt(basket.settings.forceRebalanceLastUpdateTimestamp.toString()),
|
|
161
|
+
},
|
|
162
|
+
custom_rebalance: {
|
|
163
|
+
allow: basket.settings.customRebalanceIsAllowed == 1 ? true : false,
|
|
164
|
+
modification_delay: parseInt(basket.settings.customRebalanceModificationDelay.toString()),
|
|
165
|
+
updated_at: parseInt(basket.settings.customRebalanceLastUpdateTimestamp.toString()),
|
|
166
|
+
},
|
|
167
|
+
add_token: {
|
|
168
|
+
delay: parseInt(basket.settings.addTokenDelay.toString()),
|
|
169
|
+
updated_at: parseInt(basket.settings.addTokenLastUpdateTimestamp.toString()),
|
|
166
170
|
},
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
uri_length: basket.settings.metadata.uriLength.toString(),
|
|
175
|
-
uri: basket.settings.metadata.uri.map(data => data.toString()),
|
|
176
|
-
modification_delay: basket.settings.metadata.modificationDelay.toString(),
|
|
171
|
+
update_weights: {
|
|
172
|
+
delay: parseInt(basket.settings.updateWeightsDelay.toString()),
|
|
173
|
+
updated_at: parseInt(basket.settings.updateWeightsLastUpdateTimestamp.toString()),
|
|
174
|
+
},
|
|
175
|
+
make_direct_swap: {
|
|
176
|
+
delay: parseInt(basket.settings.makeDirectSwapDelay.toString()),
|
|
177
|
+
updated_at: parseInt(basket.settings.makeDirectSwapLastUpdateTimestamp.toString()),
|
|
177
178
|
},
|
|
178
|
-
deposits_are_allowed: basket.settings.depositsAreAllowed.toString(),
|
|
179
|
-
deposits_authority_bitmask: basket.settings.depositsAuthorityBitmask.toString(),
|
|
180
|
-
force_rebalance_is_allowed: basket.settings.forceRebalanceIsAllowed.toString(),
|
|
181
|
-
force_rebalance_modification_delay: basket.settings.forceRebalanceModificationDelay.toString(),
|
|
182
|
-
force_rebalance_last_update_timestamp: basket.settings.forceRebalanceLastUpdateTimestamp.toString(),
|
|
183
|
-
force_rebalance_authority_bitmask: basket.settings.forceRebalanceAuthorityBitmask.toString(),
|
|
184
|
-
custom_rebalance_is_allowed: basket.settings.customRebalanceIsAllowed.toString(),
|
|
185
|
-
custom_rebalance_modification_delay: basket.settings.customRebalanceModificationDelay.toString(),
|
|
186
|
-
custom_rebalance_last_update_timestamp: basket.settings.customRebalanceLastUpdateTimestamp.toString(),
|
|
187
|
-
custom_rebalance_authority_bitmask: basket.settings.customRebalanceAuthorityBitmask.toString(),
|
|
188
|
-
add_token_delay: basket.settings.addTokenDelay.toString(),
|
|
189
|
-
add_token_last_update_timestamp: basket.settings.addTokenLastUpdateTimestamp.toString(),
|
|
190
|
-
add_token_intent_authority_bitmask: basket.settings.addTokenIntentAuthorityBitmask.toString(),
|
|
191
|
-
update_weights_delay: basket.settings.updateWeightsDelay.toString(),
|
|
192
|
-
update_weights_last_update_timestamp: basket.settings.updateWeightsLastUpdateTimestamp.toString(),
|
|
193
|
-
update_weights_intent_authority_bitmask: basket.settings.updateWeightsIntentAuthorityBitmask.toString(),
|
|
194
|
-
make_direct_swap_delay: basket.settings.makeDirectSwapDelay.toString(),
|
|
195
|
-
make_direct_swap_last_update_timestamp: basket.settings.makeDirectSwapLastUpdateTimestamp.toString(),
|
|
196
|
-
make_direct_swap_intent_authority_bitmask: basket.settings.makeDirectSwapIntentAuthorityBitmask.toString(),
|
|
197
|
-
extra_data: basket.settings.extraData.map(data => data.toString()),
|
|
198
179
|
accumulated_fees: {
|
|
199
|
-
symmetry_fees: basket.accumulatedFees.symmetryFees.toString(),
|
|
200
|
-
creator_fees: basket.accumulatedFees.creatorFees.toString(),
|
|
201
|
-
host_fees: basket.accumulatedFees.hostFees.toString(),
|
|
202
|
-
managers_fees: basket.accumulatedFees.managersFees.toString(),
|
|
180
|
+
symmetry_fees: parseInt(basket.accumulatedFees.symmetryFees.toString()),
|
|
181
|
+
creator_fees: parseInt(basket.accumulatedFees.creatorFees.toString()),
|
|
182
|
+
host_fees: parseInt(basket.accumulatedFees.hostFees.toString()),
|
|
183
|
+
managers_fees: parseInt(basket.accumulatedFees.managersFees.toString()),
|
|
203
184
|
},
|
|
204
185
|
lookup_tables: {
|
|
205
|
-
active:
|
|
206
|
-
temp: basket.lookupTables.temp.map(table => table.toBase58()),
|
|
207
|
-
active_contents: [
|
|
186
|
+
active: [
|
|
208
187
|
{
|
|
209
188
|
pubkey: basket.lookupTables.active[0].toBase58(),
|
|
210
|
-
|
|
189
|
+
contents: ((_e = (_d = basket.lutPubkeys) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.state.addresses.map(address => address.toBase58())) || [],
|
|
211
190
|
},
|
|
212
191
|
{
|
|
213
192
|
pubkey: basket.lookupTables.active[1].toBase58(),
|
|
214
|
-
|
|
193
|
+
contents: ((_g = (_f = basket.lutPubkeys) === null || _f === void 0 ? void 0 : _f[1]) === null || _g === void 0 ? void 0 : _g.state.addresses.map(address => address.toBase58())) || [],
|
|
215
194
|
},
|
|
216
195
|
],
|
|
217
|
-
|
|
196
|
+
temp: [
|
|
218
197
|
{
|
|
219
198
|
pubkey: basket.lookupTables.temp[0].toBase58(),
|
|
220
|
-
|
|
199
|
+
contents: ((_j = (_h = basket.lutPubkeys) === null || _h === void 0 ? void 0 : _h[2]) === null || _j === void 0 ? void 0 : _j.state.addresses.map(address => address.toBase58())) || [],
|
|
221
200
|
},
|
|
222
201
|
{
|
|
223
202
|
pubkey: basket.lookupTables.temp[1].toBase58(),
|
|
224
|
-
|
|
203
|
+
contents: ((_l = (_k = basket.lutPubkeys) === null || _k === void 0 ? void 0 : _k[3]) === null || _l === void 0 ? void 0 : _l.state.addresses.map(address => address.toBase58())) || [],
|
|
225
204
|
},
|
|
226
205
|
],
|
|
227
206
|
},
|
|
228
|
-
num_tokens: basket.numTokens.toString(),
|
|
229
207
|
composition: basket.composition.map(asset => ({
|
|
230
208
|
mint: asset.mint.toBase58(),
|
|
231
|
-
amount: asset.amount.toString(),
|
|
232
|
-
weight: asset.weight
|
|
233
|
-
active: asset.active
|
|
209
|
+
amount: parseInt(asset.amount.toString()),
|
|
210
|
+
weight: asset.weight,
|
|
211
|
+
active: asset.active == 1 ? true : false,
|
|
234
212
|
oracle_aggregator: {
|
|
235
|
-
num_oracles: asset.oracleAggregator.numOracles
|
|
236
|
-
min_oracles_thresh: asset.oracleAggregator.minOraclesThresh
|
|
213
|
+
num_oracles: asset.oracleAggregator.numOracles,
|
|
214
|
+
min_oracles_thresh: asset.oracleAggregator.minOraclesThresh,
|
|
237
215
|
oracles: asset.oracleAggregator.oracles.map(oracle => ({
|
|
238
216
|
oracle_settings: {
|
|
239
217
|
oracle_type: ["Pyth", "RaydiumCpmm", "RaydiumClmm", "SwitchBoard", "Example"][oracle.oracleSettings.oracleType],
|
|
240
|
-
num_required_accounts: oracle.oracleSettings.numRequiredAccounts
|
|
241
|
-
weight: oracle.oracleSettings.weight
|
|
242
|
-
is_required: oracle.oracleSettings.isRequired
|
|
243
|
-
conf_thresh_bps: oracle.oracleSettings.confThreshBps
|
|
244
|
-
volatility_thresh_bps: oracle.oracleSettings.volatilityThreshBps
|
|
245
|
-
max_slippage_bps: oracle.oracleSettings.maxSlippageBps
|
|
246
|
-
min_liquidity: oracle.oracleSettings.minLiquidity.toString(),
|
|
247
|
-
staleness_thresh: oracle.oracleSettings.stalenessThresh.toString(),
|
|
248
|
-
staleness_conf_rate_bps: oracle.oracleSettings.stalenessConfRateBps
|
|
249
|
-
token_decimals: oracle.oracleSettings.tokenDecimals
|
|
250
|
-
twap_seconds_ago: oracle.oracleSettings.twapSecondsAgo.toString(),
|
|
251
|
-
twap_secondary_seconds_ago: oracle.oracleSettings.twapSecondarySecondsAgo.toString(),
|
|
218
|
+
num_required_accounts: oracle.oracleSettings.numRequiredAccounts,
|
|
219
|
+
weight: oracle.oracleSettings.weight,
|
|
220
|
+
is_required: oracle.oracleSettings.isRequired == 1 ? true : false,
|
|
221
|
+
conf_thresh_bps: oracle.oracleSettings.confThreshBps,
|
|
222
|
+
volatility_thresh_bps: oracle.oracleSettings.volatilityThreshBps,
|
|
223
|
+
max_slippage_bps: oracle.oracleSettings.maxSlippageBps,
|
|
224
|
+
min_liquidity: parseInt(oracle.oracleSettings.minLiquidity.toString()),
|
|
225
|
+
staleness_thresh: parseInt(oracle.oracleSettings.stalenessThresh.toString()),
|
|
226
|
+
staleness_conf_rate_bps: oracle.oracleSettings.stalenessConfRateBps,
|
|
227
|
+
token_decimals: oracle.oracleSettings.tokenDecimals,
|
|
228
|
+
twap_seconds_ago: parseInt(oracle.oracleSettings.twapSecondsAgo.toString()),
|
|
229
|
+
twap_secondary_seconds_ago: parseInt(oracle.oracleSettings.twapSecondarySecondsAgo.toString()),
|
|
252
230
|
quote: oracle.oracleSettings.quote == 0 ? "Usdc" : "Wsol",
|
|
253
231
|
side: oracle.oracleSettings.side == 0 ? "Base" : "Quote",
|
|
254
232
|
},
|
|
255
233
|
accounts_to_load_lut_ids: oracle.accountsToLoadLutIds.map(id => id.toString()),
|
|
256
234
|
accounts_to_load_lut_indices: oracle.accountsToLoadLutIndices.map(index => index.toString()),
|
|
257
235
|
})),
|
|
258
|
-
min_conf_bps: asset.oracleAggregator.minConfBps
|
|
259
|
-
conf_thresh_bps: asset.oracleAggregator.confThreshBps
|
|
260
|
-
conf_multiplier: (0, fraction_1.fractionToDecimal)(asset.oracleAggregator.confMultiplier).
|
|
236
|
+
min_conf_bps: asset.oracleAggregator.minConfBps,
|
|
237
|
+
conf_thresh_bps: asset.oracleAggregator.confThreshBps,
|
|
238
|
+
conf_multiplier: (0, fraction_1.fractionToDecimal)(asset.oracleAggregator.confMultiplier).toNumber(),
|
|
261
239
|
},
|
|
262
240
|
})),
|
|
263
241
|
};
|
|
@@ -306,31 +284,57 @@ function fetchBaskektsMultiple(connection, basketAddresses) {
|
|
|
306
284
|
return basketsMap;
|
|
307
285
|
});
|
|
308
286
|
}
|
|
309
|
-
function fetchBaskets(connection,
|
|
287
|
+
function fetchBaskets(connection, filter) {
|
|
310
288
|
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
let
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
offset: 8 + 1 +
|
|
318
|
-
bytes: filter.
|
|
319
|
-
} }
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
289
|
+
let multipleFilters = [];
|
|
290
|
+
if ((filter === null || filter === void 0 ? void 0 : filter.type) === "creator") {
|
|
291
|
+
// Offset: discriminator(8) + version(1) + ownAddress(32) + mint(32) + supplyOutstanding(8) = 81
|
|
292
|
+
multipleFilters.push([
|
|
293
|
+
{ dataSize: 8 + basket_1.BasketLayout.getSpan() },
|
|
294
|
+
{ memcmp: {
|
|
295
|
+
offset: 8 + 1 + 32 + 32 + 8,
|
|
296
|
+
bytes: filter.pubkey
|
|
297
|
+
} }
|
|
298
|
+
]);
|
|
299
|
+
}
|
|
300
|
+
else if ((filter === null || filter === void 0 ? void 0 : filter.type) === "host") {
|
|
301
|
+
// Offset: discriminator(8) + version(1) + ownAddress(32) + mint(32) + supplyOutstanding(8) + creator(32) = 113
|
|
302
|
+
multipleFilters.push([
|
|
303
|
+
{ dataSize: 8 + basket_1.BasketLayout.getSpan() },
|
|
304
|
+
{ memcmp: {
|
|
305
|
+
offset: 8 + 1 + 32 + 32 + 8 + 32,
|
|
306
|
+
bytes: filter.pubkey
|
|
307
|
+
} }
|
|
308
|
+
]);
|
|
309
|
+
}
|
|
310
|
+
else if ((filter === null || filter === void 0 ? void 0 : filter.type) === "manager") {
|
|
311
|
+
// Offset: discriminator(8) + version(1) + ownAddress(32) + mint(32) + supplyOutstanding(8) + creator(32)
|
|
312
|
+
// + host(32) + basket_type(1) + bounty_mint(32) + bounty_balance(8) + start_price(16) + high_water_mark(16)
|
|
313
|
+
// + active_rebalance(8) + active_deposits(8) + active_managements(8) + last_automation_execution_timestamp(8)
|
|
314
|
+
for (let i = 0; i < constants_1.MAX_MANAGERS_PER_BASKET; i++) {
|
|
315
|
+
multipleFilters.push([
|
|
316
|
+
{ dataSize: 8 + basket_1.BasketLayout.getSpan() },
|
|
317
|
+
{ memcmp: {
|
|
318
|
+
offset: 8 + 1 + 32 + 32 + 8 + 32 + 32 + 1 + 32 + 8 + 16 + 16 + 8 + 8 + 8 + 8 + i * 32,
|
|
319
|
+
bytes: filter.pubkey
|
|
320
|
+
} }
|
|
321
|
+
]);
|
|
326
322
|
}
|
|
327
323
|
}
|
|
328
|
-
|
|
324
|
+
else {
|
|
325
|
+
multipleFilters.push([
|
|
326
|
+
{ dataSize: 8 + basket_1.BasketLayout.getSpan() },
|
|
327
|
+
]);
|
|
328
|
+
}
|
|
329
|
+
let requests = multipleFilters.map(filters => connection.getProgramAccounts(constants_1.BASKETS_V3_PROGRAM_ID, {
|
|
329
330
|
commitment: "confirmed",
|
|
330
|
-
filters:
|
|
331
|
+
filters: filters,
|
|
331
332
|
encoding: 'base64'
|
|
332
|
-
});
|
|
333
|
-
let
|
|
333
|
+
}));
|
|
334
|
+
let results = yield Promise.all(requests);
|
|
335
|
+
let accounts = [];
|
|
336
|
+
results.forEach(gpa => gpa.forEach(account => accounts.push(account.account)));
|
|
337
|
+
let baskets = accounts.map(account => basket_1.BasketLayout.decode(account.data.slice(8)));
|
|
334
338
|
baskets = yield addLutsToBaskets(connection, baskets);
|
|
335
339
|
baskets = baskets.map(basket => addFieldsToBasket(basket));
|
|
336
340
|
return baskets;
|
package/dist/test.js
CHANGED
|
@@ -24,12 +24,9 @@ function testStates() {
|
|
|
24
24
|
network: "devnet",
|
|
25
25
|
});
|
|
26
26
|
console.log("SDK created:", wallet.publicKey.toBase58());
|
|
27
|
-
console.log("Total baskets: ", (yield sdk.fetchAllBaskets(
|
|
27
|
+
console.log("Total baskets: ", (yield sdk.fetchAllBaskets()).length);
|
|
28
28
|
console.log("Total intents: ", (yield sdk.fetchAllIntents([])).length);
|
|
29
29
|
console.log("Total rebalance intents: ", (yield sdk.fetchAllRebalanceIntents([])).length);
|
|
30
|
-
let basket = yield sdk.getBasket({ basket: new web3_js_1.PublicKey("GrBFFvtdRL25o7gcRnV1kGvz1Qc7iscUmDp1ZvyBSyUa") });
|
|
31
|
-
basket = yield sdk.loadBasketPrice(basket);
|
|
32
|
-
console.log(basket);
|
|
33
30
|
let tests = {
|
|
34
31
|
createGlobalConfig: false, // TESTED
|
|
35
32
|
editGlobalConfig: false, // TESTED
|
|
@@ -67,12 +64,20 @@ function testStates() {
|
|
|
67
64
|
host_performance_fee_bps: 0,
|
|
68
65
|
priority_fee_lamports: 0,
|
|
69
66
|
});
|
|
67
|
+
console.log(createBasketTx.batches[0].transactions[0]);
|
|
68
|
+
return;
|
|
70
69
|
let resCreateBasket = yield sdk.signAndSendTxPayloadBatchSequence({
|
|
71
70
|
txPayloadBatchSequence: createBasketTx,
|
|
72
71
|
wallet,
|
|
73
72
|
});
|
|
74
73
|
console.log(resCreateBasket);
|
|
75
74
|
}
|
|
75
|
+
// return;
|
|
76
|
+
let basket = yield sdk.fetchBasket("GrBFFvtdRL25o7gcRnV1kGvz1Qc7iscUmDp1ZvyBSyUa");
|
|
77
|
+
basket = yield sdk.loadBasketPrice(basket);
|
|
78
|
+
console.log(basket.formatted);
|
|
79
|
+
console.log(basket.formatted.managers.managers);
|
|
80
|
+
return;
|
|
76
81
|
if (tests.editCreator) {
|
|
77
82
|
let txEditCreator = yield sdk.editCreatorTx({
|
|
78
83
|
basket: basket.ownAddress.toBase58(),
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -22,7 +22,6 @@ export const MINTS: Record<string, Record<string, PublicKey>> = {
|
|
|
22
22
|
export const PYTHNET_CUSTODY_PRICE_WSOL_ACCOUNT = new PublicKey("7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE");
|
|
23
23
|
export const PYTHNET_CUSTODY_PRICE_USDC_ACCOUNT = new PublicKey("Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX");
|
|
24
24
|
|
|
25
|
-
|
|
26
25
|
export const INTENT_TASK_DATA_SIZE = 600;
|
|
27
26
|
export const MAX_MANAGERS_PER_BASKET = 10;
|
|
28
27
|
|
package/src/index.ts
CHANGED
|
@@ -112,18 +112,42 @@ export class SymmetryCore {
|
|
|
112
112
|
// this.sdkParams.payer = payer;
|
|
113
113
|
// }
|
|
114
114
|
|
|
115
|
-
async
|
|
116
|
-
|
|
117
|
-
}): Promise<Basket> {
|
|
118
|
-
const basketState = await fetchBasket(this.sdkParams.connection, params.basket);
|
|
115
|
+
async fetchBasket(basketPubkey: string): Promise<Basket> {
|
|
116
|
+
const basketState = await fetchBasket(this.sdkParams.connection, new PublicKey(basketPubkey));
|
|
119
117
|
return basketState;
|
|
120
118
|
}
|
|
121
119
|
|
|
122
|
-
async
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
async fetchMultipleBaskets(basketPubkeys: string[]): Promise<Map<string, Basket>> {
|
|
121
|
+
let basketPubkeysArray: PublicKey[] = basketPubkeys.map(pubkey => new PublicKey(pubkey));
|
|
122
|
+
const basketsMap = await fetchBaskektsMultiple(this.sdkParams.connection, basketPubkeysArray);
|
|
123
|
+
return basketsMap;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
async fetchAllBaskets(basketFilter?: BasketFilter): Promise<Basket[]> {
|
|
127
|
+
return await fetchBaskets(this.sdkParams.connection, basketFilter);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async fetchCreatedBaskets(creatorPubkey: string): Promise<Basket[]> {
|
|
131
|
+
return await fetchBaskets(this.sdkParams.connection, { type: "creator", pubkey: creatorPubkey });
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async fetchHostedBaskets(hostPubkey: string): Promise<Basket[]> {
|
|
135
|
+
return await fetchBaskets(this.sdkParams.connection, { type: "host", pubkey: hostPubkey });
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async fetchManagedBaskets(managerPubkey: string): Promise<Basket[]> {
|
|
139
|
+
return await fetchBaskets(this.sdkParams.connection, { type: "manager", pubkey: managerPubkey });
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async deriveBasketsByMints(mints: string[]): Promise<Map<string, string>> {
|
|
143
|
+
let result: Map<string, string> = new Map();
|
|
144
|
+
for (let basketId = 0; basketId < 50000; basketId++) {
|
|
145
|
+
let mint = getBasketTokenMintPda(basketId).toBase58();
|
|
146
|
+
if (mints.includes(mint)) {
|
|
147
|
+
result.set(mint, getBasketState(new PublicKey(mint)).toBase58());
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
127
151
|
}
|
|
128
152
|
|
|
129
153
|
async fetchBasketsFromMints(
|
|
@@ -332,7 +356,7 @@ export class SymmetryCore {
|
|
|
332
356
|
edit_type: TaskType,
|
|
333
357
|
edit_data: EditDataInput,
|
|
334
358
|
}): Promise<TxPayloadBatchSequence> {
|
|
335
|
-
let basket = await this.
|
|
359
|
+
let basket = await this.fetchBasket(params.edit_data.basket);
|
|
336
360
|
let manager = new PublicKey(params.edit_data.manager);
|
|
337
361
|
let useBounty = params.edit_data.use_bounty == false ? false : true;
|
|
338
362
|
let activationTimestamp = new BN(params.edit_data.activation_timestamp ?? 0);
|
|
@@ -415,7 +439,7 @@ export class SymmetryCore {
|
|
|
415
439
|
let { keeper, intent } = params;
|
|
416
440
|
let basketMint: PublicKey | undefined;
|
|
417
441
|
if (intent.taskType === TaskType.EditMetadataSettings) {
|
|
418
|
-
let basket = await this.
|
|
442
|
+
let basket = await this.fetchBasket(intent.basket.toBase58());
|
|
419
443
|
basketMint = basket.mint;
|
|
420
444
|
}
|
|
421
445
|
let ix = executeEditBasketIntentIx({
|
|
@@ -40,8 +40,6 @@ const CREATE_EDIT_BASKET_INTENT_DISCRIMINATOR = Buffer.from([82, 150, 58, 227, 1
|
|
|
40
40
|
const EDIT_BASKET_DISCRIMINATOR = Buffer.from([156, 31, 4, 39, 248, 29, 55, 220]);
|
|
41
41
|
const CANCEL_INTENT_DISCRIMINATOR = Buffer.from([181, 103, 27, 100, 84, 89, 70, 236]);
|
|
42
42
|
|
|
43
|
-
const ZERO_INTENT_SEED = new Uint8Array(32).fill(0);
|
|
44
|
-
|
|
45
43
|
export function editPrivateBasketSettingsIx(
|
|
46
44
|
params: {
|
|
47
45
|
creator: PublicKey,
|
package/src/states/basket.ts
CHANGED
|
@@ -47,211 +47,189 @@ export function addFieldsToBasket(basket: Basket): Basket {
|
|
|
47
47
|
basket.settings.managers.managers = basket.settings.managers.managers.slice(0, totalManagers);
|
|
48
48
|
basket.settings.managers.managersWeightBps = basket.settings.managers.managersWeightBps.slice(0, totalManagers);
|
|
49
49
|
basket = {...basket, metadata: metadata};
|
|
50
|
-
let
|
|
50
|
+
let managers = [];
|
|
51
51
|
for (let i = 0; i < basket.settings.managers.managers.length; i++) {
|
|
52
52
|
let manager = basket.settings.managers.managers[i].toBase58();
|
|
53
|
-
let authorities =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (((2 ** i) & basket.settings.addTokenIntentAuthorityBitmask) != 0)
|
|
73
|
-
authorities.push("add_token");
|
|
74
|
-
if (((2 ** i) & basket.settings.updateWeightsIntentAuthorityBitmask) != 0)
|
|
75
|
-
authorities.push("update_weights");
|
|
76
|
-
if (((2 ** i) & basket.settings.makeDirectSwapIntentAuthorityBitmask) != 0)
|
|
77
|
-
authorities.push("make_direct_swap");
|
|
78
|
-
authoritiesMap.set(manager, authorities);
|
|
53
|
+
let authorities = {
|
|
54
|
+
managers: (((2 ** i) & basket.settings.managersAuthorityBitmask) != 0),
|
|
55
|
+
fees: (((2 ** i) & basket.settings.feesAuthorityBitmask) != 0),
|
|
56
|
+
schedule: (((2 ** i) & basket.settings.scheduleAuthorityBitmask) != 0),
|
|
57
|
+
automation: (((2 ** i) & basket.settings.automationAuthorityBitmask) != 0),
|
|
58
|
+
lp: (((2 ** i) & basket.settings.lpAuthorityBitmask) != 0),
|
|
59
|
+
metadata: (((2 ** i) & basket.settings.metadataAuthorityBitmask) != 0),
|
|
60
|
+
deposits: (((2 ** i) & basket.settings.depositsAuthorityBitmask) != 0),
|
|
61
|
+
force_rebalance: (((2 ** i) & basket.settings.forceRebalanceAuthorityBitmask) != 0),
|
|
62
|
+
custom_rebalance: (((2 ** i) & basket.settings.customRebalanceAuthorityBitmask) != 0),
|
|
63
|
+
add_token: (((2 ** i) & basket.settings.addTokenIntentAuthorityBitmask) != 0),
|
|
64
|
+
update_weights: (((2 ** i) & basket.settings.updateWeightsIntentAuthorityBitmask) != 0),
|
|
65
|
+
make_direct_swap: (((2 ** i) & basket.settings.makeDirectSwapIntentAuthorityBitmask) != 0),
|
|
66
|
+
};
|
|
67
|
+
managers.push({
|
|
68
|
+
pubkey: manager,
|
|
69
|
+
weight_bps: basket.settings.managers.managersWeightBps[i],
|
|
70
|
+
authorities: authorities,
|
|
71
|
+
});
|
|
79
72
|
}
|
|
80
73
|
let formatted = {
|
|
81
74
|
pubkey: basket.ownAddress.toBase58(),
|
|
82
75
|
name: basket.metadata?.name,
|
|
83
76
|
symbol: basket.metadata?.symbol,
|
|
84
77
|
uri: basket.metadata?.uri,
|
|
85
|
-
authorities: authoritiesMap,
|
|
86
78
|
|
|
87
|
-
version: basket.version
|
|
79
|
+
version: basket.version,
|
|
88
80
|
own_address: basket.ownAddress.toBase58(),
|
|
89
81
|
mint: basket.mint.toBase58(),
|
|
90
|
-
supply_outstanding: basket.supplyOutstanding.
|
|
82
|
+
supply_outstanding: basket.supplyOutstanding.toNumber(),
|
|
91
83
|
|
|
92
84
|
creator: basket.settings.creator.toBase58(),
|
|
93
85
|
host: basket.settings.host.toBase58(),
|
|
94
|
-
basket_type: basket.settings.basketType == 0 ? "
|
|
86
|
+
basket_type: basket.settings.basketType == 0 ? "private" : "public",
|
|
95
87
|
bounty_mint: basket.settings.bountyMint.toBase58(),
|
|
96
|
-
bounty_balance: basket.settings.bountyBalance.toString(),
|
|
97
|
-
start_price: fractionToDecimal(basket.settings.startPrice).
|
|
98
|
-
high_watermark: fractionToDecimal(basket.settings.highWaterMark).
|
|
99
|
-
active_rebalance: basket.settings.activeRebalance.toString(),
|
|
100
|
-
active_deposits: basket.settings.activeDeposits.toString(),
|
|
101
|
-
active_managements: basket.settings.activeManagements.toString(),
|
|
102
|
-
last_automation_execution_timestamp: basket.settings.lastAutomationExecutionTimestamp.toString(),
|
|
103
|
-
managers:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
88
|
+
bounty_balance: parseInt(basket.settings.bountyBalance.toString()),
|
|
89
|
+
start_price: fractionToDecimal(basket.settings.startPrice).toNumber(),
|
|
90
|
+
high_watermark: fractionToDecimal(basket.settings.highWaterMark).toNumber(),
|
|
91
|
+
active_rebalance: parseInt(basket.settings.activeRebalance.toString()),
|
|
92
|
+
active_deposits: parseInt(basket.settings.activeDeposits.toString()),
|
|
93
|
+
active_managements: parseInt(basket.settings.activeManagements.toString()),
|
|
94
|
+
last_automation_execution_timestamp: parseInt(basket.settings.lastAutomationExecutionTimestamp.toString()),
|
|
95
|
+
managers: {
|
|
96
|
+
managers,
|
|
97
|
+
modification_delay: parseInt(basket.settings.managers.modificationDelay.toString()),
|
|
98
|
+
updated_at: parseInt(basket.settings.managersLastUpdateTimestamp.toString()),
|
|
99
|
+
},
|
|
108
100
|
fees: {
|
|
109
|
-
host_deposit_fee_bps: basket.settings.fees.hostDepositFeeBps
|
|
110
|
-
host_withdraw_fee_bps: basket.settings.fees.hostWithdrawFeeBps
|
|
111
|
-
host_management_fee_bps: basket.settings.fees.hostManagementFeeBps
|
|
112
|
-
host_performance_fee_bps: basket.settings.fees.hostPerformanceFeeBps
|
|
113
|
-
creator_deposit_fee_bps: basket.settings.fees.creatorDepositFeeBps
|
|
114
|
-
creator_withdraw_fee_bps: basket.settings.fees.creatorWithdrawFeeBps
|
|
115
|
-
creator_management_fee_bps: basket.settings.fees.creatorManagementFeeBps
|
|
116
|
-
creator_performance_fee_bps: basket.settings.fees.creatorPerformanceFeeBps
|
|
117
|
-
managers_deposit_fee_bps: basket.settings.fees.managersDepositFeeBps
|
|
118
|
-
managers_withdraw_fee_bps: basket.settings.fees.managersWithdrawFeeBps
|
|
119
|
-
managers_management_fee_bps: basket.settings.fees.managersManagementFeeBps
|
|
120
|
-
managers_performance_fee_bps: basket.settings.fees.managersPerformanceFeeBps
|
|
121
|
-
basket_deposit_fee_bps: basket.settings.fees.basketDepositFeeBps
|
|
122
|
-
basket_withdraw_fee_bps: basket.settings.fees.basketWithdrawFeeBps
|
|
123
|
-
|
|
124
|
-
|
|
101
|
+
host_deposit_fee_bps: basket.settings.fees.hostDepositFeeBps,
|
|
102
|
+
host_withdraw_fee_bps: basket.settings.fees.hostWithdrawFeeBps,
|
|
103
|
+
host_management_fee_bps: basket.settings.fees.hostManagementFeeBps,
|
|
104
|
+
host_performance_fee_bps: basket.settings.fees.hostPerformanceFeeBps,
|
|
105
|
+
creator_deposit_fee_bps: basket.settings.fees.creatorDepositFeeBps,
|
|
106
|
+
creator_withdraw_fee_bps: basket.settings.fees.creatorWithdrawFeeBps,
|
|
107
|
+
creator_management_fee_bps: basket.settings.fees.creatorManagementFeeBps,
|
|
108
|
+
creator_performance_fee_bps: basket.settings.fees.creatorPerformanceFeeBps,
|
|
109
|
+
managers_deposit_fee_bps: basket.settings.fees.managersDepositFeeBps,
|
|
110
|
+
managers_withdraw_fee_bps: basket.settings.fees.managersWithdrawFeeBps,
|
|
111
|
+
managers_management_fee_bps: basket.settings.fees.managersManagementFeeBps,
|
|
112
|
+
managers_performance_fee_bps: basket.settings.fees.managersPerformanceFeeBps,
|
|
113
|
+
basket_deposit_fee_bps: basket.settings.fees.basketDepositFeeBps,
|
|
114
|
+
basket_withdraw_fee_bps: basket.settings.fees.basketWithdrawFeeBps,
|
|
115
|
+
modification_delay: parseInt(basket.settings.fees.modificationDelay.toString()),
|
|
116
|
+
updated_at: parseInt(basket.settings.feesLastUpdateTimestamp.toString()),
|
|
125
117
|
},
|
|
126
|
-
fees_last_update_timestamp: basket.settings.feesLastUpdateTimestamp.toString(),
|
|
127
|
-
fees_authority_bitmask: basket.settings.feesAuthorityBitmask.toString(),
|
|
128
118
|
schedule: {
|
|
129
|
-
cycle_start_time: basket.settings.schedule.cycleStartTime.toString(),
|
|
130
|
-
cycle_duration: basket.settings.schedule.cycleDuration.toString(),
|
|
131
|
-
deposits_start: basket.settings.schedule.depositsStart.toString(),
|
|
132
|
-
deposits_end: basket.settings.schedule.depositsEnd.toString(),
|
|
133
|
-
automation_start: basket.settings.schedule.automationStart.toString(),
|
|
134
|
-
automation_end: basket.settings.schedule.automationEnd.toString(),
|
|
135
|
-
management_start: basket.settings.schedule.managementStart.toString(),
|
|
136
|
-
management_end: basket.settings.schedule.managementEnd.toString(),
|
|
137
|
-
modification_delay: basket.settings.schedule.modificationDelay.toString(),
|
|
119
|
+
cycle_start_time: parseInt(basket.settings.schedule.cycleStartTime.toString()),
|
|
120
|
+
cycle_duration: parseInt(basket.settings.schedule.cycleDuration.toString()),
|
|
121
|
+
deposits_start: parseInt(basket.settings.schedule.depositsStart.toString()),
|
|
122
|
+
deposits_end: parseInt(basket.settings.schedule.depositsEnd.toString()),
|
|
123
|
+
automation_start: parseInt(basket.settings.schedule.automationStart.toString()),
|
|
124
|
+
automation_end: parseInt(basket.settings.schedule.automationEnd.toString()),
|
|
125
|
+
management_start: parseInt(basket.settings.schedule.managementStart.toString()),
|
|
126
|
+
management_end: parseInt(basket.settings.schedule.managementEnd.toString()),
|
|
127
|
+
modification_delay: parseInt(basket.settings.schedule.modificationDelay.toString()),
|
|
128
|
+
updated_at: parseInt(basket.settings.scheduleLastUpdateTimestamp.toString()),
|
|
138
129
|
},
|
|
139
|
-
schedule_last_update_timestamp: basket.settings.scheduleLastUpdateTimestamp.toString(),
|
|
140
|
-
schedule_authority_bitmask: basket.settings.scheduleAuthorityBitmask.toString(),
|
|
141
130
|
automation: {
|
|
142
|
-
|
|
143
|
-
rebalance_slippage_threshold_bps: basket.settings.automation.rebalanceSlippageThresholdBps
|
|
144
|
-
per_trade_rebalance_slippage_threshold_bps: basket.settings.automation.perTradeRebalanceSlippageThresholdBps
|
|
145
|
-
rebalance_activation_threshold_abs_bps: basket.settings.automation.rebalanceActivationThresholdAbsBps
|
|
146
|
-
rebalance_activation_threshold_rel_bps: basket.settings.automation.rebalanceActivationThresholdRelBps
|
|
147
|
-
rebalance_activation_cooldown: basket.settings.automation.rebalanceActivationCooldown.toString(),
|
|
148
|
-
|
|
149
|
-
|
|
131
|
+
allow: basket.settings.automation.allowAutomation == 1 ? true : false,
|
|
132
|
+
rebalance_slippage_threshold_bps: basket.settings.automation.rebalanceSlippageThresholdBps,
|
|
133
|
+
per_trade_rebalance_slippage_threshold_bps: basket.settings.automation.perTradeRebalanceSlippageThresholdBps,
|
|
134
|
+
rebalance_activation_threshold_abs_bps: basket.settings.automation.rebalanceActivationThresholdAbsBps,
|
|
135
|
+
rebalance_activation_threshold_rel_bps: basket.settings.automation.rebalanceActivationThresholdRelBps,
|
|
136
|
+
rebalance_activation_cooldown: parseInt(basket.settings.automation.rebalanceActivationCooldown.toString()),
|
|
137
|
+
modification_delay: parseInt(basket.settings.automation.modificationDelay.toString()),
|
|
138
|
+
updated_at: parseInt(basket.settings.automationLastUpdateTimestamp.toString()),
|
|
150
139
|
},
|
|
151
|
-
automation_last_update_timestamp: basket.settings.automationLastUpdateTimestamp.toString(),
|
|
152
|
-
automation_authority_bitmask: basket.settings.automationAuthorityBitmask.toString(),
|
|
153
140
|
lp: {
|
|
154
|
-
|
|
155
|
-
lp_threshold_bps: basket.settings.lp.lpThresholdBps
|
|
156
|
-
|
|
157
|
-
|
|
141
|
+
allow: basket.settings.lp.allowLp == 1 ? true : false,
|
|
142
|
+
lp_threshold_bps: basket.settings.lp.lpThresholdBps,
|
|
143
|
+
modification_delay: parseInt(basket.settings.lp.modificationDelay.toString()),
|
|
144
|
+
updated_at: parseInt(basket.settings.lpLastUpdateTimestamp.toString()),
|
|
145
|
+
},
|
|
146
|
+
deposits: {
|
|
147
|
+
allow: basket.settings.depositsAreAllowed == 1 ? true : false,
|
|
148
|
+
},
|
|
149
|
+
force_rebalance: {
|
|
150
|
+
allow: basket.settings.forceRebalanceIsAllowed == 1 ? true : false,
|
|
151
|
+
modification_delay: parseInt(basket.settings.forceRebalanceModificationDelay.toString()),
|
|
152
|
+
updated_at: parseInt(basket.settings.forceRebalanceLastUpdateTimestamp.toString()),
|
|
153
|
+
},
|
|
154
|
+
custom_rebalance: {
|
|
155
|
+
allow: basket.settings.customRebalanceIsAllowed == 1 ? true : false,
|
|
156
|
+
modification_delay: parseInt(basket.settings.customRebalanceModificationDelay.toString()),
|
|
157
|
+
updated_at: parseInt(basket.settings.customRebalanceLastUpdateTimestamp.toString()),
|
|
158
158
|
},
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
159
|
+
add_token: {
|
|
160
|
+
delay: parseInt(basket.settings.addTokenDelay.toString()),
|
|
161
|
+
updated_at: parseInt(basket.settings.addTokenLastUpdateTimestamp.toString()),
|
|
162
|
+
},
|
|
163
|
+
update_weights: {
|
|
164
|
+
delay: parseInt(basket.settings.updateWeightsDelay.toString()),
|
|
165
|
+
updated_at: parseInt(basket.settings.updateWeightsLastUpdateTimestamp.toString()),
|
|
166
|
+
},
|
|
167
|
+
make_direct_swap: {
|
|
168
|
+
delay: parseInt(basket.settings.makeDirectSwapDelay.toString()),
|
|
169
|
+
updated_at: parseInt(basket.settings.makeDirectSwapLastUpdateTimestamp.toString()),
|
|
169
170
|
},
|
|
170
|
-
deposits_are_allowed: basket.settings.depositsAreAllowed.toString(),
|
|
171
|
-
deposits_authority_bitmask: basket.settings.depositsAuthorityBitmask.toString(),
|
|
172
|
-
force_rebalance_is_allowed: basket.settings.forceRebalanceIsAllowed.toString(),
|
|
173
|
-
force_rebalance_modification_delay: basket.settings.forceRebalanceModificationDelay.toString(),
|
|
174
|
-
force_rebalance_last_update_timestamp: basket.settings.forceRebalanceLastUpdateTimestamp.toString(),
|
|
175
|
-
force_rebalance_authority_bitmask: basket.settings.forceRebalanceAuthorityBitmask.toString(),
|
|
176
|
-
custom_rebalance_is_allowed: basket.settings.customRebalanceIsAllowed.toString(),
|
|
177
|
-
custom_rebalance_modification_delay: basket.settings.customRebalanceModificationDelay.toString(),
|
|
178
|
-
custom_rebalance_last_update_timestamp: basket.settings.customRebalanceLastUpdateTimestamp.toString(),
|
|
179
|
-
custom_rebalance_authority_bitmask: basket.settings.customRebalanceAuthorityBitmask.toString(),
|
|
180
|
-
add_token_delay: basket.settings.addTokenDelay.toString(),
|
|
181
|
-
add_token_last_update_timestamp: basket.settings.addTokenLastUpdateTimestamp.toString(),
|
|
182
|
-
add_token_intent_authority_bitmask: basket.settings.addTokenIntentAuthorityBitmask.toString(),
|
|
183
|
-
update_weights_delay: basket.settings.updateWeightsDelay.toString(),
|
|
184
|
-
update_weights_last_update_timestamp: basket.settings.updateWeightsLastUpdateTimestamp.toString(),
|
|
185
|
-
update_weights_intent_authority_bitmask: basket.settings.updateWeightsIntentAuthorityBitmask.toString(),
|
|
186
|
-
make_direct_swap_delay: basket.settings.makeDirectSwapDelay.toString(),
|
|
187
|
-
make_direct_swap_last_update_timestamp: basket.settings.makeDirectSwapLastUpdateTimestamp.toString(),
|
|
188
|
-
make_direct_swap_intent_authority_bitmask: basket.settings.makeDirectSwapIntentAuthorityBitmask.toString(),
|
|
189
|
-
extra_data: basket.settings.extraData.map(data => data.toString()),
|
|
190
171
|
|
|
191
172
|
accumulated_fees: {
|
|
192
|
-
symmetry_fees: basket.accumulatedFees.symmetryFees.toString(),
|
|
193
|
-
creator_fees: basket.accumulatedFees.creatorFees.toString(),
|
|
194
|
-
host_fees: basket.accumulatedFees.hostFees.toString(),
|
|
195
|
-
managers_fees: basket.accumulatedFees.managersFees.toString(),
|
|
173
|
+
symmetry_fees: parseInt(basket.accumulatedFees.symmetryFees.toString()),
|
|
174
|
+
creator_fees: parseInt(basket.accumulatedFees.creatorFees.toString()),
|
|
175
|
+
host_fees: parseInt(basket.accumulatedFees.hostFees.toString()),
|
|
176
|
+
managers_fees: parseInt(basket.accumulatedFees.managersFees.toString()),
|
|
196
177
|
},
|
|
197
178
|
lookup_tables: {
|
|
198
|
-
active:
|
|
199
|
-
temp: basket.lookupTables.temp.map(table => table.toBase58()),
|
|
200
|
-
active_contents: [
|
|
179
|
+
active: [
|
|
201
180
|
{
|
|
202
181
|
pubkey: basket.lookupTables.active[0].toBase58(),
|
|
203
|
-
|
|
182
|
+
contents: basket.lutPubkeys?.[0]?.state.addresses.map(address => address.toBase58()) || [],
|
|
204
183
|
},
|
|
205
184
|
{
|
|
206
185
|
pubkey: basket.lookupTables.active[1].toBase58(),
|
|
207
|
-
|
|
186
|
+
contents: basket.lutPubkeys?.[1]?.state.addresses.map(address => address.toBase58()) || [],
|
|
208
187
|
},
|
|
209
188
|
],
|
|
210
|
-
|
|
189
|
+
temp: [
|
|
211
190
|
{
|
|
212
191
|
pubkey: basket.lookupTables.temp[0].toBase58(),
|
|
213
|
-
|
|
192
|
+
contents: basket.lutPubkeys?.[2]?.state.addresses.map(address => address.toBase58()) || [],
|
|
214
193
|
},
|
|
215
194
|
{
|
|
216
195
|
pubkey: basket.lookupTables.temp[1].toBase58(),
|
|
217
|
-
|
|
196
|
+
contents: basket.lutPubkeys?.[3]?.state.addresses.map(address => address.toBase58()) || [],
|
|
218
197
|
},
|
|
219
198
|
],
|
|
220
199
|
},
|
|
221
200
|
|
|
222
|
-
num_tokens: basket.numTokens.toString(),
|
|
223
201
|
composition: basket.composition.map(asset => ({
|
|
224
202
|
mint: asset.mint.toBase58(),
|
|
225
|
-
amount: asset.amount.toString(),
|
|
226
|
-
weight: asset.weight
|
|
227
|
-
active: asset.active
|
|
203
|
+
amount: parseInt(asset.amount.toString()),
|
|
204
|
+
weight: asset.weight,
|
|
205
|
+
active: asset.active == 1 ? true : false,
|
|
228
206
|
oracle_aggregator: {
|
|
229
|
-
num_oracles: asset.oracleAggregator.numOracles
|
|
230
|
-
min_oracles_thresh: asset.oracleAggregator.minOraclesThresh
|
|
207
|
+
num_oracles: asset.oracleAggregator.numOracles,
|
|
208
|
+
min_oracles_thresh: asset.oracleAggregator.minOraclesThresh,
|
|
231
209
|
oracles: asset.oracleAggregator.oracles.map(oracle => ({
|
|
232
210
|
oracle_settings: {
|
|
233
211
|
oracle_type: ["Pyth","RaydiumCpmm","RaydiumClmm","SwitchBoard","Example"][oracle.oracleSettings.oracleType],
|
|
234
|
-
num_required_accounts: oracle.oracleSettings.numRequiredAccounts
|
|
235
|
-
weight: oracle.oracleSettings.weight
|
|
236
|
-
is_required: oracle.oracleSettings.isRequired
|
|
237
|
-
conf_thresh_bps: oracle.oracleSettings.confThreshBps
|
|
238
|
-
volatility_thresh_bps: oracle.oracleSettings.volatilityThreshBps
|
|
239
|
-
max_slippage_bps: oracle.oracleSettings.maxSlippageBps
|
|
240
|
-
min_liquidity: oracle.oracleSettings.minLiquidity.toString(),
|
|
241
|
-
staleness_thresh: oracle.oracleSettings.stalenessThresh.toString(),
|
|
242
|
-
staleness_conf_rate_bps: oracle.oracleSettings.stalenessConfRateBps
|
|
243
|
-
token_decimals: oracle.oracleSettings.tokenDecimals
|
|
244
|
-
twap_seconds_ago: oracle.oracleSettings.twapSecondsAgo.toString(),
|
|
245
|
-
twap_secondary_seconds_ago: oracle.oracleSettings.twapSecondarySecondsAgo.toString(),
|
|
212
|
+
num_required_accounts: oracle.oracleSettings.numRequiredAccounts,
|
|
213
|
+
weight: oracle.oracleSettings.weight,
|
|
214
|
+
is_required: oracle.oracleSettings.isRequired == 1 ? true : false,
|
|
215
|
+
conf_thresh_bps: oracle.oracleSettings.confThreshBps,
|
|
216
|
+
volatility_thresh_bps: oracle.oracleSettings.volatilityThreshBps,
|
|
217
|
+
max_slippage_bps: oracle.oracleSettings.maxSlippageBps,
|
|
218
|
+
min_liquidity: parseInt(oracle.oracleSettings.minLiquidity.toString()),
|
|
219
|
+
staleness_thresh: parseInt(oracle.oracleSettings.stalenessThresh.toString()),
|
|
220
|
+
staleness_conf_rate_bps: oracle.oracleSettings.stalenessConfRateBps,
|
|
221
|
+
token_decimals: oracle.oracleSettings.tokenDecimals,
|
|
222
|
+
twap_seconds_ago: parseInt(oracle.oracleSettings.twapSecondsAgo.toString()),
|
|
223
|
+
twap_secondary_seconds_ago: parseInt(oracle.oracleSettings.twapSecondarySecondsAgo.toString()),
|
|
246
224
|
quote: oracle.oracleSettings.quote == 0 ? "Usdc" : "Wsol",
|
|
247
225
|
side: oracle.oracleSettings.side == 0 ? "Base" : "Quote",
|
|
248
226
|
},
|
|
249
227
|
accounts_to_load_lut_ids: oracle.accountsToLoadLutIds.map(id => id.toString()),
|
|
250
228
|
accounts_to_load_lut_indices: oracle.accountsToLoadLutIndices.map(index => index.toString()),
|
|
251
229
|
})),
|
|
252
|
-
min_conf_bps: asset.oracleAggregator.minConfBps
|
|
253
|
-
conf_thresh_bps: asset.oracleAggregator.confThreshBps
|
|
254
|
-
conf_multiplier: fractionToDecimal(asset.oracleAggregator.confMultiplier).
|
|
230
|
+
min_conf_bps: asset.oracleAggregator.minConfBps,
|
|
231
|
+
conf_thresh_bps: asset.oracleAggregator.confThreshBps,
|
|
232
|
+
conf_multiplier: fractionToDecimal(asset.oracleAggregator.confMultiplier).toNumber(),
|
|
255
233
|
},
|
|
256
234
|
})),
|
|
257
235
|
}
|
|
@@ -307,39 +285,62 @@ export async function fetchBaskektsMultiple(
|
|
|
307
285
|
}
|
|
308
286
|
|
|
309
287
|
export interface BasketFilter {
|
|
310
|
-
|
|
311
|
-
|
|
288
|
+
type: "host" | "creator" | "manager";
|
|
289
|
+
pubkey: string;
|
|
312
290
|
}
|
|
313
291
|
|
|
314
292
|
export async function fetchBaskets(
|
|
315
293
|
connection: Connection,
|
|
316
|
-
|
|
294
|
+
filter?: BasketFilter,
|
|
317
295
|
): Promise<Basket[]> {
|
|
318
|
-
let
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
offset: 8 + 1 +
|
|
325
|
-
bytes: filter.
|
|
326
|
-
} }
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
296
|
+
let multipleFilters: GetProgramAccountsFilter[][] = [];
|
|
297
|
+
if (filter?.type === "creator") {
|
|
298
|
+
// Offset: discriminator(8) + version(1) + ownAddress(32) + mint(32) + supplyOutstanding(8) = 81
|
|
299
|
+
multipleFilters.push([
|
|
300
|
+
{ dataSize: 8 + BasketLayout.getSpan() },
|
|
301
|
+
{ memcmp: {
|
|
302
|
+
offset: 8 + 1 + 32 + 32 + 8,
|
|
303
|
+
bytes: filter.pubkey
|
|
304
|
+
} }
|
|
305
|
+
]);
|
|
306
|
+
} else if (filter?.type === "host") {
|
|
307
|
+
// Offset: discriminator(8) + version(1) + ownAddress(32) + mint(32) + supplyOutstanding(8) + creator(32) = 113
|
|
308
|
+
multipleFilters.push([
|
|
309
|
+
{ dataSize: 8 + BasketLayout.getSpan() },
|
|
310
|
+
{ memcmp: {
|
|
311
|
+
offset: 8 + 1 + 32 + 32 + 8 + 32,
|
|
312
|
+
bytes: filter.pubkey
|
|
313
|
+
} }
|
|
314
|
+
]);
|
|
315
|
+
} else if (filter?.type === "manager") {
|
|
316
|
+
// Offset: discriminator(8) + version(1) + ownAddress(32) + mint(32) + supplyOutstanding(8) + creator(32)
|
|
317
|
+
// + host(32) + basket_type(1) + bounty_mint(32) + bounty_balance(8) + start_price(16) + high_water_mark(16)
|
|
318
|
+
// + active_rebalance(8) + active_deposits(8) + active_managements(8) + last_automation_execution_timestamp(8)
|
|
319
|
+
for (let i = 0; i < MAX_MANAGERS_PER_BASKET; i++) {
|
|
320
|
+
multipleFilters.push([
|
|
321
|
+
{ dataSize: 8 + BasketLayout.getSpan() },
|
|
322
|
+
{ memcmp: {
|
|
323
|
+
offset: 8 + 1 + 32 + 32 + 8 + 32 + 32 + 1 + 32 + 8 + 16 + 16 + 8 + 8 + 8 + 8 + i * 32,
|
|
324
|
+
bytes: filter.pubkey
|
|
325
|
+
} }
|
|
326
|
+
]);
|
|
332
327
|
}
|
|
328
|
+
} else {
|
|
329
|
+
multipleFilters.push([
|
|
330
|
+
{ dataSize: 8 + BasketLayout.getSpan() },
|
|
331
|
+
]);
|
|
333
332
|
}
|
|
334
|
-
|
|
335
|
-
BASKETS_V3_PROGRAM_ID,
|
|
336
|
-
{
|
|
333
|
+
let requests = multipleFilters.map(filters =>
|
|
334
|
+
connection.getProgramAccounts(BASKETS_V3_PROGRAM_ID, {
|
|
337
335
|
commitment: "confirmed",
|
|
338
|
-
filters:
|
|
336
|
+
filters: filters,
|
|
339
337
|
encoding: 'base64'
|
|
340
|
-
}
|
|
338
|
+
})
|
|
341
339
|
);
|
|
342
|
-
let
|
|
340
|
+
let results = await Promise.all(requests);
|
|
341
|
+
let accounts: AccountInfo<Buffer>[] = [];
|
|
342
|
+
results.forEach(gpa => gpa.forEach(account => accounts.push(account.account)));
|
|
343
|
+
let baskets: Basket[] = accounts.map(account => BasketLayout.decode(account.data.slice(8)));
|
|
343
344
|
baskets = await addLutsToBaskets(connection, baskets);
|
|
344
345
|
baskets = baskets.map(basket => addFieldsToBasket(basket));
|
|
345
346
|
return baskets;
|
package/test.ts
CHANGED
|
@@ -18,14 +18,11 @@ async function testStates() {
|
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
console.log("SDK created:", wallet.publicKey.toBase58());
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
console.log("Total baskets: ", (await sdk.fetchAllBaskets()).length);
|
|
22
23
|
console.log("Total intents: ", (await sdk.fetchAllIntents([])).length);
|
|
23
24
|
console.log("Total rebalance intents: ", (await sdk.fetchAllRebalanceIntents([])).length);
|
|
24
|
-
|
|
25
|
-
let basket = await sdk.getBasket({basket: new PublicKey("GrBFFvtdRL25o7gcRnV1kGvz1Qc7iscUmDp1ZvyBSyUa")});
|
|
26
|
-
basket = await sdk.loadBasketPrice(basket);
|
|
27
|
-
console.log(basket);
|
|
28
|
-
|
|
25
|
+
|
|
29
26
|
let tests = {
|
|
30
27
|
|
|
31
28
|
createGlobalConfig: false, // TESTED
|
|
@@ -69,6 +66,8 @@ async function testStates() {
|
|
|
69
66
|
host_performance_fee_bps: 0,
|
|
70
67
|
priority_fee_lamports: 0,
|
|
71
68
|
});
|
|
69
|
+
console.log(createBasketTx.batches[0].transactions[0]);
|
|
70
|
+
return;
|
|
72
71
|
let resCreateBasket = await sdk.signAndSendTxPayloadBatchSequence({
|
|
73
72
|
txPayloadBatchSequence: createBasketTx,
|
|
74
73
|
wallet,
|
|
@@ -76,6 +75,14 @@ async function testStates() {
|
|
|
76
75
|
console.log(resCreateBasket);
|
|
77
76
|
}
|
|
78
77
|
|
|
78
|
+
// return;
|
|
79
|
+
let basket = await sdk.fetchBasket("GrBFFvtdRL25o7gcRnV1kGvz1Qc7iscUmDp1ZvyBSyUa");
|
|
80
|
+
basket = await sdk.loadBasketPrice(basket);
|
|
81
|
+
console.log(basket.formatted);
|
|
82
|
+
console.log(basket.formatted.managers.managers);
|
|
83
|
+
return;
|
|
84
|
+
|
|
85
|
+
|
|
79
86
|
if (tests.editCreator) {
|
|
80
87
|
let txEditCreator = await sdk.editCreatorTx({
|
|
81
88
|
basket: basket.ownAddress.toBase58(),
|