@levrbet/shared 0.3.3 → 0.3.4
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/core/config/urls.d.ts +8 -0
- package/dist/core/config/urls.js +20 -12
- package/dist/core/config/urls.js.map +1 -1
- package/dist/core/contracts/abis/LevrManager.d.ts +1008 -988
- package/dist/core/contracts/abis/LevrManager.js +1538 -499
- package/dist/core/contracts/abis/LevrManager.js.map +1 -1
- package/dist/core/contracts/abis/index.d.ts +1008 -988
- package/dist/core/contracts/addresses.d.ts +21 -21
- package/dist/core/contracts/addresses.js +19 -19
- package/dist/core/types/oracle/game/game.types.d.ts +3 -2
- package/dist/core/types/oracle/game/game.types.js +0 -1
- package/dist/core/types/oracle/game/game.types.js.map +1 -1
- package/dist/core/types/oracle/market/markets.types.d.ts +4 -2
- package/dist/core/types/oracle/market/markets.types.js.map +1 -1
- package/dist/core/types/oracle/market/positions.types.d.ts +7 -1
- package/dist/react/hooks/contracts/useContracts.d.ts +19 -19
- package/dist/server/config/kms.js +1 -1
- package/dist/server/config/redis.d.ts +5 -0
- package/dist/server/config/redis.js +13 -3
- package/dist/server/config/redis.js.map +1 -1
- package/dist/server/config/urls.d.ts +8 -0
- package/dist/server/contracts/clients/ozRelayerService.d.ts +1 -0
- package/dist/server/contracts/clients/ozRelayerService.js +110 -17
- package/dist/server/contracts/clients/ozRelayerService.js.map +1 -1
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.d.ts +9 -9
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.js.map +1 -1
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js +1 -1
- package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js.map +1 -1
- package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.d.ts +4 -0
- package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.js +5 -1
- package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.js.map +1 -1
- package/dist/server/oracle/config/game-periods/sports.config.d.ts +1 -1
- package/dist/server/oracle/config/game-periods/sports.config.js +56 -6
- package/dist/server/oracle/config/game-periods/sports.config.js.map +1 -1
- package/dist/server/oracle/config/game-periods/types.d.ts +9 -1
- package/dist/server/oracle/config/game-periods/types.js +5 -0
- package/dist/server/oracle/config/game-periods/types.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/channels.d.ts +2 -2
- package/dist/server/oracle/redis-cache-manager/channels.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/game.progress.d.ts +4 -4
- package/dist/server/oracle/redis-cache-manager/game.progress.js.map +1 -1
- package/dist/server/oracle/redis-cache-manager/leagues.cache.service.d.ts +3 -3
- package/dist/server/oracle/redis-cache-manager/leagues.cache.service.js +5 -1
- package/dist/server/oracle/redis-cache-manager/leagues.cache.service.js.map +1 -1
- package/dist/server/oracle/rmq-manager/base.queue.manager.d.ts +1 -1
- package/dist/server/oracle/rmq-manager/base.queue.manager.js +3 -1
- package/dist/server/oracle/rmq-manager/base.queue.manager.js.map +1 -1
- package/dist/server/services/presigned.urls.js +1 -1
- package/dist/server/services/presigned.urls.js.map +1 -1
- package/dist/server/utils/game_progress/caclulate.game.progress.d.ts +132 -4
- package/dist/server/utils/game_progress/caclulate.game.progress.js +195 -24
- package/dist/server/utils/game_progress/caclulate.game.progress.js.map +1 -1
- package/dist/server/utils/game_progress/game.utils.d.ts +6 -1
- package/dist/server/utils/game_progress/game.utils.js +71 -52
- package/dist/server/utils/game_progress/game.utils.js.map +1 -1
- package/dist/server/utils/game_progress/parser.js +6 -0
- package/dist/server/utils/game_progress/parser.js.map +1 -1
- package/package.json +2 -1
- package/prisma/schema.prisma +54 -15
|
@@ -49,26 +49,26 @@ export declare const levrContractAddresses: {
|
|
|
49
49
|
};
|
|
50
50
|
readonly staging: {
|
|
51
51
|
readonly 10143: {
|
|
52
|
-
readonly levrConfigProvider: "
|
|
53
|
-
readonly levrMvpDepository: "
|
|
54
|
-
readonly levrMvpStaker: "
|
|
55
|
-
readonly levrMvpToken: "
|
|
56
|
-
readonly levrPythFeed: "
|
|
57
|
-
readonly levrManager: "
|
|
58
|
-
readonly levrMarketFeed: "
|
|
59
|
-
readonly levrLiquidationEngine: "
|
|
60
|
-
readonly levrFeeCollector: "
|
|
61
|
-
readonly levrFundManager: "
|
|
62
|
-
readonly levrMvpRouter: "
|
|
63
|
-
readonly levrMarketRouter: "
|
|
64
|
-
readonly levrMarketRiskSentinel: "
|
|
65
|
-
readonly levrMarketMaker: "
|
|
66
|
-
readonly levrOrderbook: "
|
|
67
|
-
readonly levrOrderbookLens: "
|
|
68
|
-
readonly levrFulltimeMarket: "
|
|
69
|
-
readonly levrOverUnderMarket: "
|
|
52
|
+
readonly levrConfigProvider: "0x432173BC643a7FCe366F169d5bE1B75191552189";
|
|
53
|
+
readonly levrMvpDepository: "0x90e82D207562836Fc19D0E377d1f4a2311A5E7df";
|
|
54
|
+
readonly levrMvpStaker: "0xfC4C8553ce22043d43859A5F8dd8D45098C37f66";
|
|
55
|
+
readonly levrMvpToken: "0xD5BC123a4aa832694b6E827bEB11f44902D3DA07";
|
|
56
|
+
readonly levrPythFeed: "0xDE606de672A150Df2669Ae25d6be1FfEcBDb561d";
|
|
57
|
+
readonly levrManager: "0x309b960cae4d4AfE031d6Ff9021a0242ef1A8E76";
|
|
58
|
+
readonly levrMarketFeed: "0x355f2Ce4A6243e83781bf6FAD214792b96aF0388";
|
|
59
|
+
readonly levrLiquidationEngine: "0x1a93e57c05e1B6242d4B2e80f4b4b61196975f4e";
|
|
60
|
+
readonly levrFeeCollector: "0x242c87CFb625982A18C01313Bb640f0fc581ce57";
|
|
61
|
+
readonly levrFundManager: "0x09D4449EB32F7E75AADA8509D0507BF5baCFd85f";
|
|
62
|
+
readonly levrMvpRouter: "0x53a4F405633e153B38215D6006591923492F95f5";
|
|
63
|
+
readonly levrMarketRouter: "0x1b049AAc0F973c8EddB177a981154c1aecdaAA71";
|
|
64
|
+
readonly levrMarketRiskSentinel: "0x5B06cc77351B5bA8a4804BC8EfB5Cf3eDC732c0b";
|
|
65
|
+
readonly levrMarketMaker: "0x43965219512971bcfD0831fE6477337826527Bf9";
|
|
66
|
+
readonly levrOrderbook: "0xf0444A84FccCaB8154EE3F14C1A5E7305954D1dD";
|
|
67
|
+
readonly levrOrderbookLens: "0x5F1cB4ae88499a6C0F2C1b59B0A174e3a608D221";
|
|
68
|
+
readonly levrFulltimeMarket: "0x39f9da32297BaA9274A9f01c213aCc30862587E6";
|
|
69
|
+
readonly levrOverUnderMarket: "0x9D9dAAe2EAa2505e3E1D544E860517E08a0bC24b";
|
|
70
70
|
readonly levrUtil: "0x5309dc7cc514ec962a0b203e57a1b9a79bf8d386";
|
|
71
|
-
readonly usdcToken: "
|
|
71
|
+
readonly usdcToken: "0x0B9A42F39515dF7ed69E0759F888f0E0a86cA2D7";
|
|
72
72
|
};
|
|
73
73
|
};
|
|
74
74
|
readonly prod: {
|
|
@@ -111,8 +111,8 @@ export declare const levrMarketContracts: {
|
|
|
111
111
|
};
|
|
112
112
|
readonly staging: {
|
|
113
113
|
readonly 10143: {
|
|
114
|
-
readonly "0xeb1dcadcfca10960803009411023082d": "
|
|
115
|
-
readonly "0xa94fb48271ded4f41a3089f130a62d1f": "
|
|
114
|
+
readonly "0xeb1dcadcfca10960803009411023082d": "0x39f9da32297BaA9274A9f01c213aCc30862587E6";
|
|
115
|
+
readonly "0xa94fb48271ded4f41a3089f130a62d1f": "0x9D9dAAe2EAa2505e3E1D544E860517E08a0bC24b";
|
|
116
116
|
};
|
|
117
117
|
};
|
|
118
118
|
readonly prod: {
|
|
@@ -54,26 +54,26 @@ exports.levrContractAddresses = {
|
|
|
54
54
|
},
|
|
55
55
|
staging: {
|
|
56
56
|
[types_1.LevrChain.MONAD_TESTNET]: {
|
|
57
|
-
levrConfigProvider: "
|
|
58
|
-
levrMvpDepository: "
|
|
59
|
-
levrMvpStaker: "
|
|
60
|
-
levrMvpToken: "
|
|
61
|
-
levrPythFeed: "
|
|
62
|
-
levrManager: "
|
|
63
|
-
levrMarketFeed: "
|
|
64
|
-
levrLiquidationEngine: "
|
|
65
|
-
levrFeeCollector: "
|
|
66
|
-
levrFundManager: "
|
|
67
|
-
levrMvpRouter: "
|
|
68
|
-
levrMarketRouter: "
|
|
69
|
-
levrMarketRiskSentinel: "
|
|
70
|
-
levrMarketMaker: "
|
|
71
|
-
levrOrderbook: "
|
|
72
|
-
levrOrderbookLens: "
|
|
73
|
-
levrFulltimeMarket: "
|
|
74
|
-
levrOverUnderMarket: "
|
|
57
|
+
levrConfigProvider: "0x432173BC643a7FCe366F169d5bE1B75191552189",
|
|
58
|
+
levrMvpDepository: "0x90e82D207562836Fc19D0E377d1f4a2311A5E7df",
|
|
59
|
+
levrMvpStaker: "0xfC4C8553ce22043d43859A5F8dd8D45098C37f66",
|
|
60
|
+
levrMvpToken: "0xD5BC123a4aa832694b6E827bEB11f44902D3DA07",
|
|
61
|
+
levrPythFeed: "0xDE606de672A150Df2669Ae25d6be1FfEcBDb561d",
|
|
62
|
+
levrManager: "0x309b960cae4d4AfE031d6Ff9021a0242ef1A8E76",
|
|
63
|
+
levrMarketFeed: "0x355f2Ce4A6243e83781bf6FAD214792b96aF0388",
|
|
64
|
+
levrLiquidationEngine: "0x1a93e57c05e1B6242d4B2e80f4b4b61196975f4e",
|
|
65
|
+
levrFeeCollector: "0x242c87CFb625982A18C01313Bb640f0fc581ce57",
|
|
66
|
+
levrFundManager: "0x09D4449EB32F7E75AADA8509D0507BF5baCFd85f",
|
|
67
|
+
levrMvpRouter: "0x53a4F405633e153B38215D6006591923492F95f5",
|
|
68
|
+
levrMarketRouter: "0x1b049AAc0F973c8EddB177a981154c1aecdaAA71",
|
|
69
|
+
levrMarketRiskSentinel: "0x5B06cc77351B5bA8a4804BC8EfB5Cf3eDC732c0b",
|
|
70
|
+
levrMarketMaker: "0x43965219512971bcfD0831fE6477337826527Bf9",
|
|
71
|
+
levrOrderbook: "0xf0444A84FccCaB8154EE3F14C1A5E7305954D1dD",
|
|
72
|
+
levrOrderbookLens: "0x5F1cB4ae88499a6C0F2C1b59B0A174e3a608D221",
|
|
73
|
+
levrFulltimeMarket: "0x39f9da32297BaA9274A9f01c213aCc30862587E6",
|
|
74
|
+
levrOverUnderMarket: "0x9D9dAAe2EAa2505e3E1D544E860517E08a0bC24b",
|
|
75
75
|
levrUtil: "0x5309dc7cc514ec962a0b203e57a1b9a79bf8d386",
|
|
76
|
-
usdcToken: "
|
|
76
|
+
usdcToken: "0x0B9A42F39515dF7ed69E0759F888f0E0a86cA2D7",
|
|
77
77
|
},
|
|
78
78
|
},
|
|
79
79
|
prod: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GamePhase, LevrGame, MarketType, Prisma } from "@prisma/client";
|
|
2
2
|
import { LevrChain } from "../../blockchain";
|
|
3
|
-
import { MarketWithRelations } from "../market";
|
|
3
|
+
import { MarketWithRelations, OddsServices } from "../market";
|
|
4
4
|
export declare enum RegistrationStatus {
|
|
5
5
|
Registered = "Registered",
|
|
6
6
|
Unregistered = "Unregistered"
|
|
@@ -70,6 +70,8 @@ export interface LevrScores {
|
|
|
70
70
|
gamePhase: GamePhase;
|
|
71
71
|
fixtureId: string;
|
|
72
72
|
fixtureObjectId: string;
|
|
73
|
+
provider?: OddsServices;
|
|
74
|
+
isTopOfInning?: boolean;
|
|
73
75
|
}
|
|
74
76
|
export declare enum FixtureIdIndexes {
|
|
75
77
|
OpticOdds = 0,
|
|
@@ -85,7 +87,6 @@ export declare enum LeagueIdsEnum {
|
|
|
85
87
|
NBA_BASKET_BALL = "4"
|
|
86
88
|
}
|
|
87
89
|
export declare enum GameProvider {
|
|
88
|
-
Rundown = "rundown",
|
|
89
90
|
LSports = "lsports",
|
|
90
91
|
OpticOdds = "optic_odds"
|
|
91
92
|
}
|
|
@@ -56,7 +56,6 @@ var LeagueIdsEnum;
|
|
|
56
56
|
})(LeagueIdsEnum || (exports.LeagueIdsEnum = LeagueIdsEnum = {}));
|
|
57
57
|
var GameProvider;
|
|
58
58
|
(function (GameProvider) {
|
|
59
|
-
GameProvider["Rundown"] = "rundown";
|
|
60
59
|
GameProvider["LSports"] = "lsports";
|
|
61
60
|
GameProvider["OpticOdds"] = "optic_odds";
|
|
62
61
|
})(GameProvider || (exports.GameProvider = GameProvider = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game.types.js","sourceRoot":"","sources":["../../../../../src/core/types/oracle/game/game.types.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AACxE,0CAA2C;AAI3C,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,+CAAyB,CAAA;IACzB,mDAA6B,CAAA;AACjC,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAEM,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAE,EAAE;IACtD,OAAO;QACH,CAAC,mBAAU,CAAC,cAAc,CAAC,EAAE,kBAAkB;QAC/C,CAAC,mBAAU,CAAC,SAAS,CAAC,EAAE,YAAY;KACvC,CAAC,MAAM,CAAC,CAAA;AACb,CAAC,CAAA;AALY,QAAA,mBAAmB,uBAK/B;AAwBD,IAAY,oBAMX;AAND,WAAY,oBAAoB;IAC5B,kDAA0B,CAAA;IAC1B,oDAA4B,CAAA;IAC5B,0DAAkC,CAAA;IAClC,8CAAsB,CAAA;IACtB,sDAA8B,CAAA;AAClC,CAAC,EANW,oBAAoB,oCAApB,oBAAoB,QAM/B;AAEY,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAErD,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE;IAC3D,SAAS,EAAE,kBAAkB;CAChC,CAAC,CAAA;AACW,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;AACrD,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE;IAC3D,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;CACrC,CAAC,CAAA;AAEF,IAAY,iBAUX;AAVD,WAAY,iBAAiB;IACzB,uEAAe,CAAA;IACf,iEAAY,CAAA;IACZ,uEAAe,CAAA;IACf,iEAAY,CAAA;IACZ,mEAAa,CAAA;IACb,uEAAe,CAAA;IACf,mEAAa,CAAA;IACb,2EAAiB,CAAA;IACjB,6EAAkB,CAAA;AACtB,CAAC,EAVW,iBAAiB,iCAAjB,iBAAiB,QAU5B;
|
|
1
|
+
{"version":3,"file":"game.types.js","sourceRoot":"","sources":["../../../../../src/core/types/oracle/game/game.types.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AACxE,0CAA2C;AAI3C,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,+CAAyB,CAAA;IACzB,mDAA6B,CAAA;AACjC,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAEM,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAE,EAAE;IACtD,OAAO;QACH,CAAC,mBAAU,CAAC,cAAc,CAAC,EAAE,kBAAkB;QAC/C,CAAC,mBAAU,CAAC,SAAS,CAAC,EAAE,YAAY;KACvC,CAAC,MAAM,CAAC,CAAA;AACb,CAAC,CAAA;AALY,QAAA,mBAAmB,uBAK/B;AAwBD,IAAY,oBAMX;AAND,WAAY,oBAAoB;IAC5B,kDAA0B,CAAA;IAC1B,oDAA4B,CAAA;IAC5B,0DAAkC,CAAA;IAClC,8CAAsB,CAAA;IACtB,sDAA8B,CAAA;AAClC,CAAC,EANW,oBAAoB,oCAApB,oBAAoB,QAM/B;AAEY,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAErD,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE;IAC3D,SAAS,EAAE,kBAAkB;CAChC,CAAC,CAAA;AACW,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;AACrD,QAAA,cAAc,GAAG,IAAA,kBAAU,EAAC,oBAAoB,EAAE;IAC3D,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;CACrC,CAAC,CAAA;AAEF,IAAY,iBAUX;AAVD,WAAY,iBAAiB;IACzB,uEAAe,CAAA;IACf,iEAAY,CAAA;IACZ,uEAAe,CAAA;IACf,iEAAY,CAAA;IACZ,mEAAa,CAAA;IACb,uEAAe,CAAA;IACf,mEAAa,CAAA;IACb,2EAAiB,CAAA;IACjB,6EAAkB,CAAA;AACtB,CAAC,EAVW,iBAAiB,iCAAjB,iBAAiB,QAU5B;AA2BD,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,iEAAa,CAAA;IACb,6DAAW,CAAA;AACf,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAQD,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,oCAAmB,CAAA;IACnB,sCAAqB,CAAA;AACzB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACpB,mCAA8B,CAAA;IAC9B,wCAAmC,CAAA;AACvC,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB"}
|
|
@@ -2,6 +2,7 @@ import { GamePhase, MarketStatus, MarketType, Prisma } from "@prisma/client";
|
|
|
2
2
|
import { LevrMarketId } from "../../../contracts";
|
|
3
3
|
import { Bytes10, Bytes32 } from "../../../validators";
|
|
4
4
|
import { LevrChain } from "../../blockchain";
|
|
5
|
+
import { GameProvider } from "../game";
|
|
5
6
|
import { type OddsData, type PriceData } from "./odds.types";
|
|
6
7
|
export type MarketWithRelations = Prisma.MarketGetPayload<{
|
|
7
8
|
include: {
|
|
@@ -12,19 +13,20 @@ export interface MarketPriceBroadcast {
|
|
|
12
13
|
gameId: number;
|
|
13
14
|
chainId: LevrChain;
|
|
14
15
|
levrFixtureId: string;
|
|
15
|
-
provider:
|
|
16
|
+
provider: GameProvider;
|
|
16
17
|
type: MarketType;
|
|
17
18
|
odds: OddsData;
|
|
18
19
|
marketPhase: MarketStatus;
|
|
19
20
|
prices: PriceData;
|
|
20
21
|
gamePhase: GamePhase;
|
|
21
22
|
gamePeriod: number;
|
|
22
|
-
gameClock: number;
|
|
23
|
+
gameClock: string | number;
|
|
23
24
|
gameMarketId: LevrGameMarketId;
|
|
24
25
|
nFactor: number;
|
|
25
26
|
providerObjectId: string;
|
|
26
27
|
levrGameObjectId: string;
|
|
27
28
|
marketObjectId: string;
|
|
29
|
+
isTopOfInning?: boolean;
|
|
28
30
|
}
|
|
29
31
|
export interface BaseMarket {
|
|
30
32
|
txHash: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markets.types.js","sourceRoot":"","sources":["../../../../../src/core/types/oracle/market/markets.types.ts"],"names":[],"mappings":";;;AAGA,iDAAkD;
|
|
1
|
+
{"version":3,"file":"markets.types.js","sourceRoot":"","sources":["../../../../../src/core/types/oracle/market/markets.types.ts"],"names":[],"mappings":";;;AAGA,iDAAkD;AA8DlD,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAC9B,mEAAQ,CAAA;IACR,yEAAW,CAAA;IACX,mEAAQ,CAAA;AACZ,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC;AAeD;;;;;;;;;GASG;AACU,QAAA,SAAS,GAAG,CAAC,IAAI,iBAAI,CAAC,IAAI,CAAA,CAAC,iBAAiB;AAC5C,QAAA,SAAS,GAAG,CAAC,IAAI,iBAAI,CAAC,IAAI,CAAA,CAAC,iBAAiB;AAC5C,QAAA,YAAY,GAAG,CAAC,IAAI,iBAAI,CAAC,OAAO,CAAA,CAAC,iBAAiB;AAClD,QAAA,SAAS,GAAG,CAAC,IAAI,iBAAI,CAAC,IAAI,CAAA,CAAC,iBAAiB;AAC5C,QAAA,SAAS,GAAG,CAAC,IAAI,iBAAI,CAAC,IAAI,CAAA,CAAC,kBAAkB;AAC7C,QAAA,UAAU,GAAG,CAAC,IAAI,iBAAI,CAAC,KAAK,CAAA,CAAC,kBAAkB;AAE5D;;;;;GAKG;AACU,QAAA,aAAa,GAAG,iBAAS,GAAG,oBAAY,GAAG,iBAAS,CAAA,CAAC,kBAAkB;AACvE,QAAA,WAAW,GAAG,iBAAS,GAAG,kBAAU,CAAA,CAAC,kBAAkB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { LevrMarketId } from "../../../contracts";
|
|
2
|
+
import { LevrGameMarketId } from "./markets.types";
|
|
1
3
|
export interface MarketPosition {
|
|
2
4
|
id: string;
|
|
3
|
-
game: string;
|
|
4
5
|
homeTeam: string;
|
|
5
6
|
awayTeam: string;
|
|
6
7
|
selectedTeam: string;
|
|
@@ -15,7 +16,12 @@ export interface MarketPosition {
|
|
|
15
16
|
leverage: string;
|
|
16
17
|
marketPrice: number;
|
|
17
18
|
liquidationPrice: number;
|
|
19
|
+
liquidationOddsAmerican: number;
|
|
20
|
+
liquidationOddsEuropean: number;
|
|
18
21
|
healthFactor: number;
|
|
22
|
+
gameMarketId: LevrGameMarketId;
|
|
23
|
+
levrMarketId: LevrMarketId;
|
|
24
|
+
isDraw: boolean;
|
|
19
25
|
margin: number;
|
|
20
26
|
isLong: boolean;
|
|
21
27
|
resultBadge?: {
|
|
@@ -67,26 +67,26 @@ export declare const useContractAddresses: (params?: UseContractParams) => {
|
|
|
67
67
|
readonly levrUtil: "0x5309dc7cc514ec962a0b203e57a1b9a79bf8d386";
|
|
68
68
|
readonly usdcToken: "0xCb4b4b18bC2D4f9e7e4A7Bbb372E31D547635dcC";
|
|
69
69
|
} | {
|
|
70
|
-
readonly levrConfigProvider: "
|
|
71
|
-
readonly levrMvpDepository: "
|
|
72
|
-
readonly levrMvpStaker: "
|
|
73
|
-
readonly levrMvpToken: "
|
|
74
|
-
readonly levrPythFeed: "
|
|
75
|
-
readonly levrManager: "
|
|
76
|
-
readonly levrMarketFeed: "
|
|
77
|
-
readonly levrLiquidationEngine: "
|
|
78
|
-
readonly levrFeeCollector: "
|
|
79
|
-
readonly levrFundManager: "
|
|
80
|
-
readonly levrMvpRouter: "
|
|
81
|
-
readonly levrMarketRouter: "
|
|
82
|
-
readonly levrMarketRiskSentinel: "
|
|
83
|
-
readonly levrMarketMaker: "
|
|
84
|
-
readonly levrOrderbook: "
|
|
85
|
-
readonly levrOrderbookLens: "
|
|
86
|
-
readonly levrFulltimeMarket: "
|
|
87
|
-
readonly levrOverUnderMarket: "
|
|
70
|
+
readonly levrConfigProvider: "0x432173BC643a7FCe366F169d5bE1B75191552189";
|
|
71
|
+
readonly levrMvpDepository: "0x90e82D207562836Fc19D0E377d1f4a2311A5E7df";
|
|
72
|
+
readonly levrMvpStaker: "0xfC4C8553ce22043d43859A5F8dd8D45098C37f66";
|
|
73
|
+
readonly levrMvpToken: "0xD5BC123a4aa832694b6E827bEB11f44902D3DA07";
|
|
74
|
+
readonly levrPythFeed: "0xDE606de672A150Df2669Ae25d6be1FfEcBDb561d";
|
|
75
|
+
readonly levrManager: "0x309b960cae4d4AfE031d6Ff9021a0242ef1A8E76";
|
|
76
|
+
readonly levrMarketFeed: "0x355f2Ce4A6243e83781bf6FAD214792b96aF0388";
|
|
77
|
+
readonly levrLiquidationEngine: "0x1a93e57c05e1B6242d4B2e80f4b4b61196975f4e";
|
|
78
|
+
readonly levrFeeCollector: "0x242c87CFb625982A18C01313Bb640f0fc581ce57";
|
|
79
|
+
readonly levrFundManager: "0x09D4449EB32F7E75AADA8509D0507BF5baCFd85f";
|
|
80
|
+
readonly levrMvpRouter: "0x53a4F405633e153B38215D6006591923492F95f5";
|
|
81
|
+
readonly levrMarketRouter: "0x1b049AAc0F973c8EddB177a981154c1aecdaAA71";
|
|
82
|
+
readonly levrMarketRiskSentinel: "0x5B06cc77351B5bA8a4804BC8EfB5Cf3eDC732c0b";
|
|
83
|
+
readonly levrMarketMaker: "0x43965219512971bcfD0831fE6477337826527Bf9";
|
|
84
|
+
readonly levrOrderbook: "0xf0444A84FccCaB8154EE3F14C1A5E7305954D1dD";
|
|
85
|
+
readonly levrOrderbookLens: "0x5F1cB4ae88499a6C0F2C1b59B0A174e3a608D221";
|
|
86
|
+
readonly levrFulltimeMarket: "0x39f9da32297BaA9274A9f01c213aCc30862587E6";
|
|
87
|
+
readonly levrOverUnderMarket: "0x9D9dAAe2EAa2505e3E1D544E860517E08a0bC24b";
|
|
88
88
|
readonly levrUtil: "0x5309dc7cc514ec962a0b203e57a1b9a79bf8d386";
|
|
89
|
-
readonly usdcToken: "
|
|
89
|
+
readonly usdcToken: "0x0B9A42F39515dF7ed69E0759F888f0E0a86cA2D7";
|
|
90
90
|
} | {
|
|
91
91
|
readonly levrConfigProvider: "0xF8A32A9ED9ab3aAd0878DFc96BbD0F596A541620";
|
|
92
92
|
readonly levrMvpDepository: "0x00202BE80E90Dd1944B2484De37cf7da7DE364bC";
|
|
@@ -15,7 +15,7 @@ class KmsClientManager {
|
|
|
15
15
|
this.kmsKeyIds = {
|
|
16
16
|
[core_1.LevrEnv.LOCAL]: "b6050d0f-be5b-418c-9056-c53c1d982dec",
|
|
17
17
|
[core_1.LevrEnv.DEV]: "b6050d0f-be5b-418c-9056-c53c1d982dec",
|
|
18
|
-
[core_1.LevrEnv.STAGING]: "
|
|
18
|
+
[core_1.LevrEnv.STAGING]: "28bef5bc-1af9-464c-9192-f31c80de0951",
|
|
19
19
|
[core_1.LevrEnv.PROD]: "b6050d0f-be5b-418c-9056-c53c1d982dec",
|
|
20
20
|
};
|
|
21
21
|
this.KeyId = this.kmsKeyIds[dotenv_1.LEVR_ENV];
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
2
|
import Redis, { type RedisOptions } from "ioredis";
|
|
3
|
+
/**
|
|
4
|
+
* Type alias for Redis client.
|
|
5
|
+
* Use this type when accepting a Redis client as a parameter in functions.
|
|
6
|
+
*/
|
|
7
|
+
export type RedisClient = Redis;
|
|
3
8
|
export declare enum RedisDb {
|
|
4
9
|
ORACLE = 0,
|
|
5
10
|
ORDERBOOK = 1,
|
|
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.redisClientManager = exports.RedisDb = void 0;
|
|
7
7
|
require("dotenv/config");
|
|
8
8
|
const ioredis_1 = __importDefault(require("ioredis"));
|
|
9
|
-
const _1 = require(".");
|
|
10
9
|
const core_1 = require("../../core");
|
|
10
|
+
const _1 = require(".");
|
|
11
|
+
const dotenv_1 = require("./dotenv");
|
|
11
12
|
const winston_1 = __importDefault(require("./winston"));
|
|
12
13
|
var RedisDb;
|
|
13
14
|
(function (RedisDb) {
|
|
@@ -78,9 +79,18 @@ class RedisClientManager {
|
|
|
78
79
|
}
|
|
79
80
|
this.initialized = true;
|
|
80
81
|
const { REDIS_URL, REDIS_REPLICA_ENDPOINTS } = core_1.Config.init(_1.redisSchema);
|
|
82
|
+
// Enable TLS for non-dev/local environments, but skip for local Redis URLs (localhost, redis://)
|
|
83
|
+
const isLocalRedis = REDIS_URL.includes("localhost") || REDIS_URL.includes("redis://redis:");
|
|
84
|
+
const shouldUseTls = !isLocalRedis && dotenv_1.LEVR_ENV !== core_1.LevrEnv.DEV && dotenv_1.LEVR_ENV !== core_1.LevrEnv.LOCAL;
|
|
85
|
+
const redisOptions = {
|
|
86
|
+
...options,
|
|
87
|
+
...(shouldUseTls && {
|
|
88
|
+
tls: {},
|
|
89
|
+
}),
|
|
90
|
+
};
|
|
81
91
|
if (options?.db)
|
|
82
92
|
this.dbIndex = options.db;
|
|
83
|
-
this._primaryClient =
|
|
93
|
+
this._primaryClient = new ioredis_1.default(REDIS_URL, redisOptions);
|
|
84
94
|
if (options?.db)
|
|
85
95
|
void this._primaryClient.select(options.db);
|
|
86
96
|
this._primaryClient.on("error", (err) => {
|
|
@@ -91,7 +101,7 @@ class RedisClientManager {
|
|
|
91
101
|
});
|
|
92
102
|
const replicaEndpoints = REDIS_REPLICA_ENDPOINTS.split(",").filter(Boolean); // Comma-separated list of replica endpoints
|
|
93
103
|
this.replicaClients = replicaEndpoints.map((url) => {
|
|
94
|
-
const client =
|
|
104
|
+
const client = new ioredis_1.default(url, redisOptions);
|
|
95
105
|
if (options?.db)
|
|
96
106
|
void client.select(options.db);
|
|
97
107
|
client.on("error", (err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/server/config/redis.ts"],"names":[],"mappings":";;;;;;AAAA,yBAAsB;AACtB,sDAAkD;AAClD,wBAA+B;AAC/B,qCAAmC;AACnC,wDAA8B;
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/server/config/redis.ts"],"names":[],"mappings":";;;;;;AAAA,yBAAsB;AACtB,sDAAkD;AAClD,qCAA4C;AAC5C,wBAA+B;AAC/B,qCAAmC;AACnC,wDAA8B;AAQ9B,IAAY,OAOX;AAPD,WAAY,OAAO;IACf,yCAAU,CAAA;IACV,+CAAa,CAAA;IACb,qCAAQ,CAAA;IACR,iEAAsB,CAAA;IACtB,mDAAe,CAAA;IACf,mCAAO,CAAA;AACX,CAAC,EAPW,OAAO,uBAAP,OAAO,QAOlB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,kBAAkB;IAAxB;QACY,mBAAc,GAAiB,IAAI,CAAA;QACnC,mBAAc,GAAY,EAAE,CAAA;QAC5B,gBAAW,GAAG,KAAK,CAAA;QACnB,YAAO,GAAG,CAAC,CAAA;QA4EnB,oBAAe,GAAG,CAAC,UAAkB,EAAS,EAAE;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAA;YAC7C,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEhC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,iBAAM,CAAC,KAAK,CAAC,SAAS,UAAU,gBAAgB,EAAE,GAAG,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACtB,iBAAM,CAAC,IAAI,CAAC,sBAAsB,UAAU,SAAS,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACjB,CAAC,CAAA;IACL,CAAC;IAvFG;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,OAAsB;QACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,iBAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;YAClE,OAAM;QACV,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QAEvB,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,GAAG,aAAM,CAAC,IAAI,CAAC,cAAW,CAAC,CAAA;QAEvE,iGAAiG;QACjG,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;QAC5F,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,iBAAQ,KAAK,cAAO,CAAC,GAAG,IAAI,iBAAQ,KAAK,cAAO,CAAC,KAAK,CAAA;QAC5F,MAAM,YAAY,GAAiB;YAC/B,GAAG,OAAO;YACV,GAAG,CAAC,YAAY,IAAI;gBAChB,GAAG,EAAE,EAAE;aACV,CAAC;SACL,CAAA;QAED,IAAI,OAAO,EAAE,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,CAAA;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACxD,IAAI,OAAO,EAAE,EAAE;YAAE,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE5D,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACpC,iBAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACnC,iBAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA,CAAC,4CAA4C;QACxH,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE;YACvD,MAAM,MAAM,GAAG,IAAI,iBAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;YAC3C,IAAI,OAAO,EAAE,EAAE;gBAAE,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAE/C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,iBAAM,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAA;YACtG,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACtB,iBAAM,CAAC,IAAI,CAAC,iCAAiC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAC9F,CAAC,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACjB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,aAAa;QACb,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QACtG,OAAO,IAAI,CAAC,cAAc,CAAA;IAC9B,CAAC;IAED,IAAI,aAAa;QACb,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,aAAa,CAAA;QAE1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAE,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3B,OAAO,MAAM,CAAA;IACjB,CAAC;CAeJ;AAEY,QAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAA"}
|
|
@@ -5,7 +5,9 @@ export declare const urls: {
|
|
|
5
5
|
oracleProcessors: string;
|
|
6
6
|
relayer: string;
|
|
7
7
|
referrals: string;
|
|
8
|
+
lambda: string;
|
|
8
9
|
liquidationEngine: string;
|
|
10
|
+
leaderboard: string;
|
|
9
11
|
indexers: {
|
|
10
12
|
10143: {
|
|
11
13
|
type: import("../../core").LevrIndexer;
|
|
@@ -19,7 +21,9 @@ export declare const urls: {
|
|
|
19
21
|
oracleProcessors: string;
|
|
20
22
|
relayer: string;
|
|
21
23
|
referrals: string;
|
|
24
|
+
lambda: string;
|
|
22
25
|
liquidationEngine: string;
|
|
26
|
+
leaderboard: string;
|
|
23
27
|
indexers: {
|
|
24
28
|
10143: {
|
|
25
29
|
type: import("../../core").LevrIndexer;
|
|
@@ -33,7 +37,9 @@ export declare const urls: {
|
|
|
33
37
|
oracleProcessors: string;
|
|
34
38
|
relayer: string;
|
|
35
39
|
referrals: string;
|
|
40
|
+
lambda: string;
|
|
36
41
|
liquidationEngine: string;
|
|
42
|
+
leaderboard: string;
|
|
37
43
|
indexers: {
|
|
38
44
|
10143: {
|
|
39
45
|
type: import("../../core").LevrIndexer;
|
|
@@ -47,7 +53,9 @@ export declare const urls: {
|
|
|
47
53
|
oracleProcessors: string;
|
|
48
54
|
relayer: string;
|
|
49
55
|
referrals: string;
|
|
56
|
+
lambda: string;
|
|
50
57
|
liquidationEngine: string;
|
|
58
|
+
leaderboard: string;
|
|
51
59
|
indexers: {
|
|
52
60
|
10143: {
|
|
53
61
|
type: import("../../core").LevrIndexer;
|
|
@@ -1,18 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
2
18
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
19
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
20
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
21
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
22
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
23
|
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
8
41
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
42
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
43
|
};
|
|
11
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
45
|
const relayer_sdk_1 = require("@openzeppelin/relayer-sdk");
|
|
13
|
-
const axios_1 = require("axios");
|
|
46
|
+
const axios_1 = __importStar(require("axios"));
|
|
47
|
+
const axios_retry_1 = __importDefault(require("axios-retry"));
|
|
14
48
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
15
|
-
const ms_1 = __importDefault(require("ms"));
|
|
16
49
|
const typescript_memoize_1 = require("typescript-memoize");
|
|
17
50
|
const viem_1 = require("viem");
|
|
18
51
|
const core_1 = require("../../../core");
|
|
@@ -20,11 +53,34 @@ const config_1 = require("../../config");
|
|
|
20
53
|
class OzRelayerService {
|
|
21
54
|
constructor() {
|
|
22
55
|
this.relayerGroupSizes = {
|
|
23
|
-
[core_1.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
56
|
+
[core_1.LevrEnv.LOCAL]: {
|
|
57
|
+
[core_1.LevrRelayerGroup.GAME_ADMIN]: 3,
|
|
58
|
+
[core_1.LevrRelayerGroup.FEED_PROVIDER]: 3,
|
|
59
|
+
[core_1.LevrRelayerGroup.LIQUIDATOR]: 3,
|
|
60
|
+
[core_1.LevrRelayerGroup.MATCH_MAKER]: 3,
|
|
61
|
+
[core_1.LevrRelayerGroup.POSITION_HANDLER]: 3,
|
|
62
|
+
},
|
|
63
|
+
[core_1.LevrEnv.DEV]: {
|
|
64
|
+
[core_1.LevrRelayerGroup.GAME_ADMIN]: 3,
|
|
65
|
+
[core_1.LevrRelayerGroup.FEED_PROVIDER]: 3,
|
|
66
|
+
[core_1.LevrRelayerGroup.LIQUIDATOR]: 3,
|
|
67
|
+
[core_1.LevrRelayerGroup.MATCH_MAKER]: 3,
|
|
68
|
+
[core_1.LevrRelayerGroup.POSITION_HANDLER]: 3,
|
|
69
|
+
},
|
|
70
|
+
[core_1.LevrEnv.STAGING]: {
|
|
71
|
+
[core_1.LevrRelayerGroup.GAME_ADMIN]: 5,
|
|
72
|
+
[core_1.LevrRelayerGroup.FEED_PROVIDER]: 5,
|
|
73
|
+
[core_1.LevrRelayerGroup.LIQUIDATOR]: 5,
|
|
74
|
+
[core_1.LevrRelayerGroup.MATCH_MAKER]: 5,
|
|
75
|
+
[core_1.LevrRelayerGroup.POSITION_HANDLER]: 5,
|
|
76
|
+
},
|
|
77
|
+
[core_1.LevrEnv.PROD]: {
|
|
78
|
+
[core_1.LevrRelayerGroup.GAME_ADMIN]: 5,
|
|
79
|
+
[core_1.LevrRelayerGroup.FEED_PROVIDER]: 5,
|
|
80
|
+
[core_1.LevrRelayerGroup.LIQUIDATOR]: 5,
|
|
81
|
+
[core_1.LevrRelayerGroup.MATCH_MAKER]: 5,
|
|
82
|
+
[core_1.LevrRelayerGroup.POSITION_HANDLER]: 5,
|
|
83
|
+
},
|
|
28
84
|
};
|
|
29
85
|
this.lastUsedIndexRedisKey = `oz-relayer-last-used-index`;
|
|
30
86
|
this.getWalletClient = async (chainId, relayerGroup) => {
|
|
@@ -59,8 +115,12 @@ class OzRelayerService {
|
|
|
59
115
|
return await this.waitForTxHashOnChain(txHash, chainId, relayerId, txId);
|
|
60
116
|
};
|
|
61
117
|
this.getTxHashFromRelayer = async (relayerId, txId) => {
|
|
62
|
-
|
|
63
|
-
|
|
118
|
+
const maxAttempts = 20;
|
|
119
|
+
const pollIntervals = [2000, 2000, 3000, 3000, 5000]; // First 5 attempts use these intervals
|
|
120
|
+
const defaultInterval = 5000; // Remaining attempts use 5s
|
|
121
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
122
|
+
const delay = pollIntervals[i] ?? defaultInterval;
|
|
123
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
64
124
|
config_1.logger.info(`Attempt ${i + 1}: Fetching tx from relayer...`, { relayerId, txId });
|
|
65
125
|
const { data } = await this.relayersApi().getTransactionById(relayerId, txId);
|
|
66
126
|
const tx = data.data;
|
|
@@ -80,7 +140,24 @@ class OzRelayerService {
|
|
|
80
140
|
}
|
|
81
141
|
config_1.logger.info(`Transaction still not submitted...`, { relayerId, txId, status: tx.status });
|
|
82
142
|
}
|
|
83
|
-
|
|
143
|
+
// Transaction stuck in PENDING - cancel it to unblock the relayer
|
|
144
|
+
config_1.logger.warn(`Transaction ${txId} stuck after ${maxAttempts} attempts. Attempting to cancel...`, { relayerId, txId });
|
|
145
|
+
await this.cancelTransaction(relayerId, txId);
|
|
146
|
+
throw new Error(`Transaction ${txId} cancelled after timeout on relayer ${relayerId}`);
|
|
147
|
+
};
|
|
148
|
+
this.cancelTransaction = async (relayerId, txId) => {
|
|
149
|
+
try {
|
|
150
|
+
await this.relayersApi().cancelTransaction(relayerId, txId);
|
|
151
|
+
config_1.logger.info(`Successfully cancelled transaction.`, { relayerId, txId });
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
config_1.logger.error(`Failed to cancel transaction.`, {
|
|
155
|
+
relayerId,
|
|
156
|
+
txId,
|
|
157
|
+
error: error instanceof Error ? error.message : String(error),
|
|
158
|
+
});
|
|
159
|
+
// Don't throw - cancellation failure shouldn't mask the original timeout error
|
|
160
|
+
}
|
|
84
161
|
};
|
|
85
162
|
this.waitForTxHashOnChain = async (txHash, chainId, relayerId, txId) => {
|
|
86
163
|
const publicClient = core_1.publicClientService.getPublicClient(chainId);
|
|
@@ -100,19 +177,19 @@ class OzRelayerService {
|
|
|
100
177
|
}
|
|
101
178
|
};
|
|
102
179
|
this.proxyTxToRelayer = async ({ request, chainId, relayer }) => {
|
|
103
|
-
config_1.logger.info(`Proxying transaction to relayer.`, { request, chainId, relayer });
|
|
104
180
|
const { data, to } = request;
|
|
181
|
+
config_1.logger.info(`Proxying transaction to relayer.`, { to, chainId, relayerId: relayer.id });
|
|
105
182
|
try {
|
|
106
183
|
const { data: { data: tx }, } = await this.relayersApi().sendTransaction(relayer.id, {
|
|
107
184
|
data,
|
|
108
185
|
to: to ?? undefined,
|
|
109
186
|
value: 0,
|
|
110
187
|
speed: relayer_sdk_1.Speed.FASTEST,
|
|
111
|
-
valid_until: (0, dayjs_1.default)().add(
|
|
188
|
+
valid_until: (0, dayjs_1.default)().add(5, "minutes").toISOString(),
|
|
112
189
|
});
|
|
113
190
|
if (!tx)
|
|
114
191
|
throw new Error(`Failed to send transaction to Relayer ${relayer.id}`);
|
|
115
|
-
config_1.logger.info(`Transaction sent to relayer.`, {
|
|
192
|
+
config_1.logger.info(`Transaction sent to relayer.`, { to, chainId, relayerId: relayer.id, txId: tx.id });
|
|
116
193
|
return tx.id;
|
|
117
194
|
}
|
|
118
195
|
catch (e) {
|
|
@@ -123,9 +200,9 @@ class OzRelayerService {
|
|
|
123
200
|
};
|
|
124
201
|
this.getNextIndex = async (chainId, relayerGroup) => {
|
|
125
202
|
const hashField = `${chainId}-${relayerGroup}`;
|
|
126
|
-
const groupSize = this.relayerGroupSizes[relayerGroup];
|
|
203
|
+
const groupSize = this.relayerGroupSizes[config_1.LEVR_ENV][relayerGroup];
|
|
127
204
|
if (!groupSize)
|
|
128
|
-
throw new Error(`No relayer group size configured for ${relayerGroup}`);
|
|
205
|
+
throw new Error(`No relayer group size configured for ${relayerGroup} in ${config_1.LEVR_ENV}`);
|
|
129
206
|
// Use a Lua script to atomically get and update the index
|
|
130
207
|
const luaScript = `
|
|
131
208
|
local key = KEYS[1]
|
|
@@ -160,8 +237,24 @@ class OzRelayerService {
|
|
|
160
237
|
relayersApi() {
|
|
161
238
|
config_1.logger.info(`Creating Relayers API client`);
|
|
162
239
|
const { RELAYER_ACCESS_TOKEN } = core_1.Config.init(config_1.relayerSchema);
|
|
163
|
-
|
|
164
|
-
|
|
240
|
+
// Create axios instance with retry logic for transient failures
|
|
241
|
+
const axiosInstance = axios_1.default.create();
|
|
242
|
+
(0, axios_retry_1.default)(axiosInstance, {
|
|
243
|
+
retries: 3,
|
|
244
|
+
retryDelay: axios_retry_1.default.exponentialDelay,
|
|
245
|
+
retryCondition: (e) => axios_retry_1.default.isNetworkOrIdempotentRequestError(e) || (e.response?.status ?? 0) >= 500,
|
|
246
|
+
onRetry: (retryCount, error) => {
|
|
247
|
+
config_1.logger.warn(`Retrying relayer API request (attempt ${retryCount})`, {
|
|
248
|
+
error: error.message,
|
|
249
|
+
status: error.response?.status,
|
|
250
|
+
});
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
const config = new relayer_sdk_1.Configuration({
|
|
254
|
+
basePath: config_1.urls.relayer,
|
|
255
|
+
accessToken: RELAYER_ACCESS_TOKEN,
|
|
256
|
+
});
|
|
257
|
+
return new relayer_sdk_1.RelayersApi(config, undefined, axiosInstance);
|
|
165
258
|
}
|
|
166
259
|
async getRelayer(relayerId) {
|
|
167
260
|
const response = await this.relayersApi().getRelayer(relayerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ozRelayerService.js","sourceRoot":"","sources":["../../../../src/server/contracts/clients/ozRelayerService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ozRelayerService.js","sourceRoot":"","sources":["../../../../src/server/contracts/clients/ozRelayerService.ts"],"names":[],"mappings":"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"}
|