Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions proto/dex_state.proto
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,10 @@ message PairsCountResponse {
uint32 count = 1;
}

message IsStateInitializedResponse {
bool initialized = 1;
}

service DexStateService {
rpc GetPairs (GetPairsRequest) returns (Pairs) {}
rpc GetFilteredPairs (GetFilteredPairsRequest) returns (PaginatedPairs) {}
Expand Down Expand Up @@ -351,4 +355,6 @@ service DexStateService {
rpc GetWeeklyTimekeeping (GetWeeklyTimekeepingRequest) returns (WeekTimekeeping) {}

rpc UpdateUsdcPrice (UpdateUsdcPriceRequest) returns (UpdateUsdcPriceResponse) {}

rpc IsStateInitialized (google.protobuf.Empty) returns (IsStateInitializedResponse) {}
}
8 changes: 8 additions & 0 deletions src/microservices/dex-state/dex.state.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
IDexStateService,
InitStateRequest,
InitStateResponse,
IsStateInitializedResponse,
PaginatedPairs,
PaginatedStakingFarms,
PaginatedTokens,
Expand Down Expand Up @@ -229,6 +230,13 @@ export class DexStateController implements IDexStateService {
return this.dexStateService.getWeeklyTimekeeping(request);
}

@GrpcMethod(DEX_STATE_SERVICE_NAME, 'isStateInitialized')
isStateInitialized(): IsStateInitializedResponse {
return {
initialized: this.dexStateService.isReady(),
};
}

private ensureReady() {
if (!this.dexStateService.isReady()) {
throw new RpcException({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,10 @@ export interface PairsCountResponse {
count: number;
}

export interface IsStateInitializedResponse {
initialized: boolean;
}

export const DEX_STATE_PACKAGE_NAME = 'dex_state';

export interface IDexStateServiceClient {
Expand Down Expand Up @@ -390,6 +394,8 @@ export interface IDexStateServiceClient {
updateUsdcPrice(
request: UpdateUsdcPriceRequest,
): Observable<UpdateUsdcPriceResponse>;

isStateInitialized(request: Empty): Observable<IsStateInitializedResponse>;
}

export interface IDexStateService {
Expand Down Expand Up @@ -527,6 +533,8 @@ export interface IDexStateService {
| Promise<UpdateUsdcPriceResponse>
| Observable<UpdateUsdcPriceResponse>
| UpdateUsdcPriceResponse;

isStateInitialized(request: Empty): IsStateInitializedResponse;
}

export const DEX_STATE_SERVICE_NAME = 'DexStateService';
28 changes: 20 additions & 8 deletions src/microservices/dex-state/services/bulk.updates.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,12 @@ export class BulkUpdatesService {
}
}

pairs = pairs.filter((pair) => {
return pair.firstTokenId === id
? this.commonTokenIDs.includes(pair.secondTokenId)
: this.commonTokenIDs.includes(pair.firstTokenId);
});

const tokenPairs: PairModel[] = [];

pairs.forEach((pair) => {
Expand All @@ -211,6 +217,8 @@ export class BulkUpdatesService {
return tokenPairs;
};

const minLiquidity = new BigNumber(`1e${mxConfig.EGLDDecimals}`);

const tokenDerivedEGLD = (tokenID: string): string => {
if (memo.has(tokenID)) {
return memo.get(tokenID);
Expand Down Expand Up @@ -256,7 +264,10 @@ export class BulkUpdatesService {
.times(secondTokenDerivedEGLD)
.times(`1e${mxConfig.EGLDDecimals}`)
.integerValue();
if (egldLocked.isGreaterThan(largestLiquidityEGLD)) {
if (
egldLocked.isGreaterThan(largestLiquidityEGLD) &&
egldLocked.gt(minLiquidity)
) {
largestLiquidityEGLD = egldLocked;
priceSoFar = new BigNumber(pair.firstTokenPrice).times(
secondTokenDerivedEGLD,
Expand All @@ -273,7 +284,10 @@ export class BulkUpdatesService {
.times(firstTokenDerivedEGLD)
.times(`1e${mxConfig.EGLDDecimals}`)
.integerValue();
if (egldLocked.isGreaterThan(largestLiquidityEGLD)) {
if (
egldLocked.isGreaterThan(largestLiquidityEGLD) &&
egldLocked.gt(minLiquidity)
) {
largestLiquidityEGLD = egldLocked;
priceSoFar = new BigNumber(pair.secondTokenPrice).times(
firstTokenDerivedEGLD,
Expand All @@ -296,9 +310,8 @@ export class BulkUpdatesService {
let newLockedValue = new BigNumber(0);
for (const pair of tokenPairs) {
if (
pair.state === 'Active' ||
(this.commonTokenIDs.includes(pair.firstTokenId) &&
this.commonTokenIDs.includes(pair.secondTokenId))
this.commonTokenIDs.includes(pair.firstTokenId) &&
this.commonTokenIDs.includes(pair.secondTokenId)
) {
const tokenLockedValueUSD =
tokenID === pair.firstTokenId
Expand Down Expand Up @@ -360,9 +373,8 @@ export class BulkUpdatesService {
};

if (
pair.state === 'Active' ||
(this.commonTokenIDs.includes(pair.firstTokenId) &&
this.commonTokenIDs.includes(pair.secondTokenId))
this.commonTokenIDs.includes(pair.firstTokenId) &&
this.commonTokenIDs.includes(pair.secondTokenId)
) {
result.lockedValueUSD = firstTokenLockedValueUSD
.plus(secondTokenLockedValueUSD)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
refreshWeekStartAndEndEpochs,
} from '../../utils/rewards.compute.utils';
import { StateStore } from '../state.store';
import { constantsConfig } from 'src/config';

@Injectable()
export class FeesCollectorComputeService {
Expand All @@ -15,6 +16,11 @@ export class FeesCollectorComputeService {
): FeesCollectorModel {
refreshWeekStartAndEndEpochs(feesCollector.time);

feesCollector.startWeek =
feesCollector.time.currentWeek -
constantsConfig.USER_MAX_CLAIM_WEEKS;
feesCollector.endWeek = feesCollector.time.currentWeek;

feesCollector.undistributedRewards.forEach((globalInfo) => {
if (!globalInfo.totalRewardsForWeek) {
globalInfo.totalRewardsForWeek = [];
Expand Down
8 changes: 7 additions & 1 deletion src/microservices/dex-state/services/state.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ export class StateStore {

// Setters for controlled mutation
setToken(identifier: string, token: EsdtToken): void {
if (!identifier) {
throw new Error('Token identifier must not be empty');
}
this._tokens.set(identifier, token);
}

Expand Down Expand Up @@ -144,7 +147,10 @@ export class StateStore {
if (!this._tokenPairs.has(tokenId)) {
this._tokenPairs.set(tokenId, []);
}
this._tokenPairs.get(tokenId).push(pairAddress);
const pairs = this._tokenPairs.get(tokenId);
if (!pairs.includes(pairAddress)) {
pairs.push(pairAddress);
}
}

addTokenByType(type: EsdtTokenType, tokenId: string): void {
Expand Down
Loading
Loading