@symmetry-hq/temp-v3-sdk 0.0.34 → 0.0.35
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 +2 -2
- package/dist/src/index.js +4 -4
- package/dist/src/states/oracles/pythOracle.js +3 -3
- package/dist/test.js +116 -0
- package/package.json +1 -1
- package/src/index.ts +6 -6
- package/src/states/oracles/pythOracle.ts +3 -3
- package/test.ts +107 -0
package/dist/src/index.d.ts
CHANGED
|
@@ -89,12 +89,12 @@ export declare class SymmetryCore {
|
|
|
89
89
|
jup_swap_ix?: TransactionInstruction;
|
|
90
90
|
}): Promise<TxPayloadBatchSequence>;
|
|
91
91
|
executeBasketIntentTx(params: {
|
|
92
|
+
keeper: string;
|
|
92
93
|
intent: string;
|
|
93
|
-
executor: string;
|
|
94
94
|
}): Promise<TxPayloadBatchSequence>;
|
|
95
95
|
cancelBasketIntentTx(params: {
|
|
96
|
+
keeper: string;
|
|
96
97
|
intent: string;
|
|
97
|
-
manager: string;
|
|
98
98
|
}): Promise<TxPayloadBatchSequence>;
|
|
99
99
|
cancelRebalanceIntentTx(params: {
|
|
100
100
|
keeper: string;
|
package/dist/src/index.js
CHANGED
|
@@ -478,7 +478,7 @@ class SymmetryCore {
|
|
|
478
478
|
}
|
|
479
479
|
executeBasketIntentTx(params) {
|
|
480
480
|
return __awaiter(this, void 0, void 0, function* () {
|
|
481
|
-
let keeper = new web3_js_1.PublicKey(params.
|
|
481
|
+
let keeper = new web3_js_1.PublicKey(params.keeper);
|
|
482
482
|
let intent = yield this.fetchIntent(params.intent);
|
|
483
483
|
let basketMint;
|
|
484
484
|
if (intent.taskType === intent_1.TaskType.EditMetadataSettings) {
|
|
@@ -510,10 +510,10 @@ class SymmetryCore {
|
|
|
510
510
|
}
|
|
511
511
|
cancelBasketIntentTx(params) {
|
|
512
512
|
return __awaiter(this, void 0, void 0, function* () {
|
|
513
|
-
let
|
|
513
|
+
let keeper = new web3_js_1.PublicKey(params.keeper);
|
|
514
514
|
let intent = yield this.fetchIntent(params.intent);
|
|
515
515
|
let ix = (0, edit_1.cancelIntentIx)({
|
|
516
|
-
keeper:
|
|
516
|
+
keeper: keeper,
|
|
517
517
|
basket: intent.basket,
|
|
518
518
|
intent: intent.ownAddress,
|
|
519
519
|
editType: intent.taskType,
|
|
@@ -521,7 +521,7 @@ class SymmetryCore {
|
|
|
521
521
|
bountyMint: intent.bounty.bountyMint,
|
|
522
522
|
});
|
|
523
523
|
let txBatchData = { batches: [[{
|
|
524
|
-
payer:
|
|
524
|
+
payer: keeper,
|
|
525
525
|
instructions: [
|
|
526
526
|
ix,
|
|
527
527
|
web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: exports.COMPUTE_UNITS }),
|
|
@@ -808,9 +808,9 @@ class PythOracle {
|
|
|
808
808
|
catch (error) {
|
|
809
809
|
return new oracle_1.OraclePrice(new decimal_js_1.default(0), new decimal_js_1.default(0), 0);
|
|
810
810
|
}
|
|
811
|
-
let pr = new decimal_js_1.default(state.priceMessage.price.toString()).mul(decimal_js_1.default.pow(10, state.priceMessage.exponent));
|
|
812
|
-
let ema = new decimal_js_1.default(state.priceMessage.emaPrice.toString()).mul(decimal_js_1.default.pow(10, state.priceMessage.exponent));
|
|
813
|
-
let cf = new decimal_js_1.default(state.priceMessage.conf.toString()).mul(decimal_js_1.default.pow(10, state.priceMessage.exponent));
|
|
811
|
+
let pr = new decimal_js_1.default(state.priceMessage.price.toString()).mul(decimal_js_1.default.pow(10, state.priceMessage.exponent - oracleParams.tokenDecimals));
|
|
812
|
+
let ema = new decimal_js_1.default(state.priceMessage.emaPrice.toString()).mul(decimal_js_1.default.pow(10, state.priceMessage.exponent - oracleParams.tokenDecimals));
|
|
813
|
+
let cf = new decimal_js_1.default(state.priceMessage.conf.toString()).mul(decimal_js_1.default.pow(10, state.priceMessage.exponent - oracleParams.tokenDecimals));
|
|
814
814
|
const lastUpdateTimestamp = state.priceMessage.publishTime;
|
|
815
815
|
// Validate primary price is not zero
|
|
816
816
|
if (pr.lte(0)) {
|
package/dist/test.js
CHANGED
|
@@ -463,3 +463,119 @@ function testStates() {
|
|
|
463
463
|
});
|
|
464
464
|
}
|
|
465
465
|
testStates();
|
|
466
|
+
function runKeeper() {
|
|
467
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
468
|
+
return;
|
|
469
|
+
let wallet = new anchor_1.Wallet(web3_js_1.Keypair.fromSecretKey(new Uint8Array(kp)));
|
|
470
|
+
console.log(wallet.publicKey.toBase58());
|
|
471
|
+
let sdk = new src_1.SymmetryCore({
|
|
472
|
+
connection: connection,
|
|
473
|
+
network: "devnet",
|
|
474
|
+
});
|
|
475
|
+
const delay = (ms) => __awaiter(this, void 0, void 0, function* () { return new Promise(resolve => setTimeout(resolve, ms)); });
|
|
476
|
+
while (true) {
|
|
477
|
+
let intents = yield sdk.fetchAllIntents();
|
|
478
|
+
let now = Date.now() / 1000;
|
|
479
|
+
for (let intent of intents) {
|
|
480
|
+
if (intent.formatted.activation_timestamp < now) {
|
|
481
|
+
try {
|
|
482
|
+
let tx = yield sdk.executeBasketIntentTx({
|
|
483
|
+
keeper: wallet.publicKey.toBase58(),
|
|
484
|
+
intent: intent.ownAddress.toBase58(),
|
|
485
|
+
});
|
|
486
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
487
|
+
console.log(res);
|
|
488
|
+
}
|
|
489
|
+
catch (error) {
|
|
490
|
+
let tx = yield sdk.cancelBasketIntentTx({
|
|
491
|
+
keeper: wallet.publicKey.toBase58(),
|
|
492
|
+
intent: intent.ownAddress.toBase58(),
|
|
493
|
+
});
|
|
494
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
495
|
+
console.log(res);
|
|
496
|
+
}
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
let rebalanceIntents = yield sdk.fetchAllRebalanceIntents();
|
|
501
|
+
for (let intent of rebalanceIntents) {
|
|
502
|
+
if (intent.formatted.current_action == "not_active") {
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
if (intent.formatted.current_action == "deposit_tokens") {
|
|
506
|
+
continue;
|
|
507
|
+
}
|
|
508
|
+
if (intent.formatted.current_action == "start_price_updates") {
|
|
509
|
+
try {
|
|
510
|
+
let tx = yield sdk.startPriceUpdatesTx({
|
|
511
|
+
keeper: wallet.publicKey.toBase58(),
|
|
512
|
+
basket: intent.basket.toBase58(),
|
|
513
|
+
rebalance_intent: intent.ownAddress.toBase58(),
|
|
514
|
+
});
|
|
515
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
516
|
+
console.log(res);
|
|
517
|
+
}
|
|
518
|
+
catch (_a) { }
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
if (intent.formatted.current_action == "update_prices" && intent.formatted.execution_start_time < now) {
|
|
522
|
+
try {
|
|
523
|
+
let tx = yield sdk.updateTokenPricesTx({
|
|
524
|
+
keeper: wallet.publicKey.toBase58(),
|
|
525
|
+
basket: intent.basket.toBase58(),
|
|
526
|
+
rebalance_intent: intent.ownAddress.toBase58(),
|
|
527
|
+
});
|
|
528
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
529
|
+
console.log(res);
|
|
530
|
+
}
|
|
531
|
+
catch (_b) { }
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
if (intent.formatted.current_action == "update_prices") {
|
|
535
|
+
continue;
|
|
536
|
+
}
|
|
537
|
+
if (intent.formatted.auctions[2].end_time >= now) {
|
|
538
|
+
// SWAP
|
|
539
|
+
continue;
|
|
540
|
+
}
|
|
541
|
+
if (intent.formatted.rebalance_type == "deposit") {
|
|
542
|
+
try {
|
|
543
|
+
let tx = yield sdk.mintTx({
|
|
544
|
+
keeper: wallet.publicKey.toBase58(),
|
|
545
|
+
rebalance_intent: intent.ownAddress.toBase58(),
|
|
546
|
+
});
|
|
547
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
548
|
+
console.log(res);
|
|
549
|
+
}
|
|
550
|
+
catch (_c) { }
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
let hasTokens = intent.formatted.tokens.find(token => token.amount > 0);
|
|
554
|
+
if (hasTokens && intent.formatted.rebalance_type == "withdraw") {
|
|
555
|
+
try {
|
|
556
|
+
let tx = yield sdk.redeemTokensTx({
|
|
557
|
+
keeper: wallet.publicKey.toBase58(),
|
|
558
|
+
rebalance_intent: intent.ownAddress.toBase58(),
|
|
559
|
+
});
|
|
560
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
561
|
+
console.log(res);
|
|
562
|
+
}
|
|
563
|
+
catch (_d) { }
|
|
564
|
+
continue;
|
|
565
|
+
}
|
|
566
|
+
try {
|
|
567
|
+
let tx = yield sdk.claimBountyTx({
|
|
568
|
+
keeper: wallet.publicKey.toBase58(),
|
|
569
|
+
rebalance_intent: intent.ownAddress.toBase58(),
|
|
570
|
+
});
|
|
571
|
+
let res = yield sdk.signAndSendTxPayloadBatchSequence({ txPayloadBatchSequence: tx, wallet });
|
|
572
|
+
console.log(res);
|
|
573
|
+
}
|
|
574
|
+
catch (_e) { }
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
yield delay(30 * 1000);
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
runKeeper();
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -517,10 +517,10 @@ export class SymmetryCore {
|
|
|
517
517
|
}
|
|
518
518
|
|
|
519
519
|
async executeBasketIntentTx(params: {
|
|
520
|
+
keeper: string,
|
|
520
521
|
intent: string,
|
|
521
|
-
executor: string,
|
|
522
522
|
}): Promise<TxPayloadBatchSequence> {
|
|
523
|
-
let keeper = new PublicKey(params.
|
|
523
|
+
let keeper = new PublicKey(params.keeper);
|
|
524
524
|
let intent = await this.fetchIntent(params.intent);
|
|
525
525
|
let basketMint: PublicKey | undefined;
|
|
526
526
|
if (intent.taskType === TaskType.EditMetadataSettings) {
|
|
@@ -552,13 +552,13 @@ export class SymmetryCore {
|
|
|
552
552
|
}
|
|
553
553
|
|
|
554
554
|
async cancelBasketIntentTx(params: {
|
|
555
|
+
keeper: string,
|
|
555
556
|
intent: string,
|
|
556
|
-
manager: string,
|
|
557
557
|
}): Promise<TxPayloadBatchSequence> {
|
|
558
|
-
let
|
|
558
|
+
let keeper = new PublicKey(params.keeper);
|
|
559
559
|
let intent = await this.fetchIntent(params.intent);
|
|
560
560
|
let ix = cancelIntentIx({
|
|
561
|
-
keeper:
|
|
561
|
+
keeper: keeper,
|
|
562
562
|
basket: intent.basket,
|
|
563
563
|
intent: intent.ownAddress!,
|
|
564
564
|
editType: intent.taskType,
|
|
@@ -567,7 +567,7 @@ export class SymmetryCore {
|
|
|
567
567
|
});
|
|
568
568
|
|
|
569
569
|
let txBatchData: TxBatchData = {batches: [[{
|
|
570
|
-
payer:
|
|
570
|
+
payer: keeper,
|
|
571
571
|
instructions: [
|
|
572
572
|
ix,
|
|
573
573
|
ComputeBudgetProgram.setComputeUnitLimit({units: COMPUTE_UNITS}),
|
|
@@ -1082,9 +1082,9 @@ export class PythOracle {
|
|
|
1082
1082
|
return new OraclePrice(new Decimal(0), new Decimal(0), 0);
|
|
1083
1083
|
}
|
|
1084
1084
|
|
|
1085
|
-
let pr = new Decimal(state.priceMessage.price.toString()).mul(Decimal.pow(10, state.priceMessage.exponent));
|
|
1086
|
-
let ema = new Decimal(state.priceMessage.emaPrice.toString()).mul(Decimal.pow(10, state.priceMessage.exponent));
|
|
1087
|
-
let cf = new Decimal(state.priceMessage.conf.toString()).mul(Decimal.pow(10, state.priceMessage.exponent));
|
|
1085
|
+
let pr = new Decimal(state.priceMessage.price.toString()).mul(Decimal.pow(10, state.priceMessage.exponent - oracleParams.tokenDecimals));
|
|
1086
|
+
let ema = new Decimal(state.priceMessage.emaPrice.toString()).mul(Decimal.pow(10, state.priceMessage.exponent - oracleParams.tokenDecimals));
|
|
1087
|
+
let cf = new Decimal(state.priceMessage.conf.toString()).mul(Decimal.pow(10, state.priceMessage.exponent - oracleParams.tokenDecimals));
|
|
1088
1088
|
const lastUpdateTimestamp = state.priceMessage.publishTime;
|
|
1089
1089
|
|
|
1090
1090
|
// Validate primary price is not zero
|
package/test.ts
CHANGED
|
@@ -509,3 +509,110 @@ async function testStates() {
|
|
|
509
509
|
}
|
|
510
510
|
|
|
511
511
|
testStates();
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
async function runKeeper() {
|
|
515
|
+
return;
|
|
516
|
+
let wallet = new Wallet(Keypair.fromSecretKey(new Uint8Array(kp)));
|
|
517
|
+
console.log(wallet.publicKey.toBase58());
|
|
518
|
+
|
|
519
|
+
let sdk = new SymmetryCore({
|
|
520
|
+
connection: connection,
|
|
521
|
+
network: "devnet",
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
const delay = async (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
|
|
525
|
+
while (true) {
|
|
526
|
+
let intents = await sdk.fetchAllIntents();
|
|
527
|
+
let now = Date.now() / 1000;
|
|
528
|
+
for (let intent of intents) {
|
|
529
|
+
if (intent.formatted!.activation_timestamp < now) {
|
|
530
|
+
try {
|
|
531
|
+
let tx = await sdk.executeBasketIntentTx({
|
|
532
|
+
keeper: wallet.publicKey.toBase58(),
|
|
533
|
+
intent: intent.ownAddress!.toBase58(),
|
|
534
|
+
});
|
|
535
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
536
|
+
console.log(res);
|
|
537
|
+
} catch (error) {
|
|
538
|
+
let tx = await sdk.cancelBasketIntentTx({
|
|
539
|
+
keeper: wallet.publicKey.toBase58(),
|
|
540
|
+
intent: intent.ownAddress!.toBase58(),
|
|
541
|
+
});
|
|
542
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
543
|
+
console.log(res);
|
|
544
|
+
}
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
let rebalanceIntents = await sdk.fetchAllRebalanceIntents();
|
|
549
|
+
for (let intent of rebalanceIntents) {
|
|
550
|
+
if (intent.formatted!.current_action == "not_active") { continue; }
|
|
551
|
+
if (intent.formatted!.current_action == "deposit_tokens") { continue; }
|
|
552
|
+
if (intent.formatted!.current_action == "start_price_updates") {
|
|
553
|
+
try {
|
|
554
|
+
let tx = await sdk.startPriceUpdatesTx({
|
|
555
|
+
keeper: wallet.publicKey.toBase58(),
|
|
556
|
+
basket: intent.basket.toBase58(),
|
|
557
|
+
rebalance_intent: intent.ownAddress!.toBase58(),
|
|
558
|
+
});
|
|
559
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
560
|
+
console.log(res);
|
|
561
|
+
} catch {}
|
|
562
|
+
continue;
|
|
563
|
+
}
|
|
564
|
+
if (intent.formatted!.current_action == "update_prices" && intent.formatted!.execution_start_time < now) {
|
|
565
|
+
try {
|
|
566
|
+
let tx = await sdk.updateTokenPricesTx({
|
|
567
|
+
keeper: wallet.publicKey.toBase58(),
|
|
568
|
+
basket: intent.basket.toBase58(),
|
|
569
|
+
rebalance_intent: intent.ownAddress!.toBase58(),
|
|
570
|
+
});
|
|
571
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
572
|
+
console.log(res);
|
|
573
|
+
} catch {}
|
|
574
|
+
continue;
|
|
575
|
+
}
|
|
576
|
+
if (intent.formatted!.current_action == "update_prices") { continue; }
|
|
577
|
+
if (intent.formatted!.auctions[2].end_time >= now) {
|
|
578
|
+
// SWAP
|
|
579
|
+
continue;
|
|
580
|
+
}
|
|
581
|
+
if (intent.formatted!.rebalance_type == "deposit") {
|
|
582
|
+
try {
|
|
583
|
+
let tx = await sdk.mintTx({
|
|
584
|
+
keeper: wallet.publicKey.toBase58(),
|
|
585
|
+
rebalance_intent: intent.ownAddress!.toBase58(),
|
|
586
|
+
});
|
|
587
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
588
|
+
console.log(res);
|
|
589
|
+
} catch {}
|
|
590
|
+
continue;
|
|
591
|
+
}
|
|
592
|
+
let hasTokens = intent.formatted!.tokens.find(token => token.amount > 0);
|
|
593
|
+
if (hasTokens && intent.formatted!.rebalance_type == "withdraw") {
|
|
594
|
+
try {
|
|
595
|
+
let tx = await sdk.redeemTokensTx({
|
|
596
|
+
keeper: wallet.publicKey.toBase58(),
|
|
597
|
+
rebalance_intent: intent.ownAddress!.toBase58(),
|
|
598
|
+
});
|
|
599
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
600
|
+
console.log(res);
|
|
601
|
+
} catch {}
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
try {
|
|
605
|
+
let tx = await sdk.claimBountyTx({
|
|
606
|
+
keeper: wallet.publicKey.toBase58(),
|
|
607
|
+
rebalance_intent: intent.ownAddress!.toBase58(),
|
|
608
|
+
});
|
|
609
|
+
let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
|
|
610
|
+
console.log(res);
|
|
611
|
+
} catch {}
|
|
612
|
+
continue;
|
|
613
|
+
}
|
|
614
|
+
await delay(30 * 1000);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
runKeeper();
|