Skip to content

Commit

Permalink
Merge pull request #84 from sotatek-dev/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
Sotatek-TanHoang authored Sep 25, 2024
2 parents 733e0a8 + bcb2f4e commit 22a37b1
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 39 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --coverage --config jest.config.cjs",
"test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --config jest.config.cjs",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
Expand Down
3 changes: 0 additions & 3 deletions src/database/repositories/event-log.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,6 @@ export class EventLogRepository extends BaseRepository<EventLog> {
const queryBuilder = this.createQb();
queryBuilder
.where(`${this.alias}.sender_address = :address`, { address })
.andWhere(`${this.alias}.status IN (:...status)`, {
status: [EEventStatus.PROCESSING, EEventStatus.WAITING, EEventStatus.COMPLETED],
})
.orderBy(`${this.alias}.id`, EDirection.DESC)
.select([
`${this.alias}.id`,
Expand Down
4 changes: 2 additions & 2 deletions src/modules/crawler/sender.minabridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,10 @@ export class SenderMinaBridge {
this.tokenPriceRepository.getRateETHToMina(),
]);
if (!dataLock) {
// this.logger.warn('No pending lock transaction!');
return;
}
await this.eventLogRepository.updateLockEvenLog(dataLock.id, EEventStatus.PROCESSING);

await this.eventLogRepository.updateLockEvenLog(dataLock.id, EEventStatus.PROCESSING);
const { tokenReceivedAddress, tokenFromAddress, id, receiveAddress, amountFrom, senderAddress } = dataLock;
const tokenPair = await this.tokenPairRepository.getTokenPair(tokenFromAddress, tokenReceivedAddress);
if (!tokenPair) {
Expand Down Expand Up @@ -151,6 +150,7 @@ export class SenderMinaBridge {
}
return result;
} catch (error) {
console.log(error);
await this.eventLogRepository.updateStatusAndRetryEvenLog({
id: dataLock.id,
retry: Number(dataLock.retry + 1),
Expand Down
40 changes: 14 additions & 26 deletions src/modules/crawler/tests/mina-crawler.spec.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { ConfigModule, ConfigService } from '@nestjs/config';
import { JwtService } from '@nestjs/jwt';
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigurationModule } from 'config/config.module.js';
import { EEventName, EEventStatus, ENetworkName } from 'constants/blockchain.constant.js';
import { EEnvKey } from 'constants/env.constant.js';
import { CrawlContractRepository } from 'database/repositories/crawl-contract.repository';
import { TokenPairRepository } from 'database/repositories/token-pair.repository';
import dayjs from 'dayjs';
import { Field, Mina, provablePure, ProvablePure, PublicKey, UInt32 } from 'o1js';
import { LoggerService } from 'shared/modules/logger/logger.service.js';
import { Web3Module } from 'shared/modules/web3/web3.module.js';
import { Field, ProvablePure, PublicKey, UInt32 } from 'o1js';
import { DataSource, QueryRunner } from 'typeorm';

import { UserRepository } from '../../../database/repositories/user.repository';
import { SCBridgeMinaCrawler } from '../crawler.minabridge';
import { EventLog } from '../entities';
import { Bridge } from '../minaSc/minaBridgeSC';
import { ConfigurationModule } from '../../../config/config.module.js';
import { EEventName, EEventStatus, ENetworkName } from '../../../constants/blockchain.constant.js';
import { EEnvKey } from '../../../constants/env.constant.js';
import { CrawlContractRepository } from '../../../database/repositories/crawl-contract.repository.js';
import { TokenPairRepository } from '../../../database/repositories/token-pair.repository.js';
import { UserRepository } from '../../../database/repositories/user.repository.js';
import { LoggerService } from '../../../shared/modules/logger/logger.service.js';
import { Web3Module } from '../../../shared/modules/web3/web3.module.js';
import { SCBridgeMinaCrawler } from '../crawler.minabridge.js';
import { EventLog } from '../entities/event-logs.entity.js';
import { Bridge } from '../minaSc/Bridge.js';

// Assuming AuthService houses the login function
let minaCrawlerService: SCBridgeMinaCrawler;
Expand Down Expand Up @@ -58,6 +58,7 @@ beforeEach(async () => {
save: jest.fn(),
findOne: jest.fn(),
update: jest.fn(),
findOneBy: jest.fn().mockResolvedValue(null),
},
}),
},
Expand Down Expand Up @@ -131,7 +132,7 @@ describe('handleMinaChainCrawler', () => {
it('should successfully handle events and commit transaction', async () => {
jest
.spyOn(minaCrawlerService as any, 'getFromToBlock')
.mockResolvedValue({ startBlockNumber: configService.get(EEnvKey.MINA_BRIDGE_START_BLOCK), toBlock: 355555 });
.mockResolvedValue({ startBlockNumber: UInt32.from(123), toBlock: UInt32.from(124) });

const fetchEventsMock = jest.fn().mockResolvedValue([transformedUnlockObject, transformedLockObject]);
const zaAppAddress = jest
Expand Down Expand Up @@ -235,19 +236,6 @@ it('should save the correct event log in handlerUnlockEvent', async () => {
expect(queryRunner.manager.findOne).toHaveBeenCalledWith(EventLog, {
where: { id: transformedUnlockObject.event.data.id.toString() },
});

expect(queryRunner.manager.update).toHaveBeenCalledWith(
EventLog,
mockExistingLockTx.id,
expect.objectContaining({
status: EEventStatus.COMPLETED,
txHashUnlock: transformedUnlockObject.event.transactionInfo.transactionHash,
amountReceived: transformedUnlockObject.event.data.amount.toString(),
tokenReceivedAddress: transformedUnlockObject.event.data.tokenAddress,
tokenReceivedName: 'WETH',
}),
);

expect(result.success).toBe(true);
});

Expand Down
33 changes: 26 additions & 7 deletions src/modules/crawler/tests/mina-sender.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const mockEventLogRepository = {
updateStatusAndRetryEvenLog: jest.fn(),
updateLockEvenLog: jest.fn(),
sumAmountBridgeOfUserInDay: jest.fn(),
update: jest.fn(),
};
const mockCommonConfigRepository = {
getCommonConfig: jest.fn(),
Expand All @@ -34,8 +35,9 @@ const mockTokenPriceRepository = {
};
const mockMultiSignatureRepository = {
getRateETHToMina: jest.fn(),
findBy: jest.fn(),
};
describe('AuthService', () => {
describe('MinaSenderService', () => {
let minaCrawlerService: SenderMinaBridge;

beforeEach(async () => {
Expand All @@ -57,12 +59,29 @@ describe('AuthService', () => {

it('should handle lock events', async () => {
mockJwtService.sign.mockResolvedValue('true');
mockMultiSignatureRepository.findBy.mockResolvedValue([
{
id: 1,
validator: 'B62qnqGrRCgzsRTLjvWsaaKuoWmiShmZhJgZ5Km1oef5R4gNh2ZefWw',
signature: `{"r":"2741909212936774907544021372917077044308732996729673336956874680454178204665","s":"22788518411239874148240096978846169204938272426762803263770936708038651664307"}`,
},
{
id: 2,
validator: 'B62qq8614KZCuDM7cVScqBLPiLmqLrhVxBt9mRwy95aCZDsbCjfQx8v',
signature: `{"r":"3438636033281975195816523607371098640098750053457963253301321340385105289889","s":"9711387156003130848729762491878632072833060669134149517867207960037819573927"}`,
},
{
id: 3,
validator: 'B62qkQ96hyWcc5tyjhN2Qda5X2DfFgVC14ELLAaQTjkpQdveZExK5H9',
signature: `{"r":"5570236603572533401994258050414813854840150826583453247540834111404926928692","s":"21736293135419403848339637561979298566104722930867359295319005331842934575203"}`,
},
]);
mockEventLogRepository.getEventLockWithNetwork.mockResolvedValue({
id: 333,
tokenReceivedAddress: 'B62qkuPGhLfrD12buqho48hSnc3DMGQ1d4ugzNjtYuRmSi5vvAjoZRz',
tokenReceivedAddress: 'B62qqKNnNRpCtgcBexw5khZSpk9K2d9Z7Wzcyir3WZcVd15Bz8eShVi',
tokenFromAddress: '0x0000000000000000000000000000000000000000',
receiveAddress: 'B62qrh7E5nXnauXFd9AKcJbicdJsQe2xBA6brG3dNCwW2owtYHm5tLb',
amountFrom: '15690000000000000',
receiveAddress: 'B62qkkjqtrVmRLQhmkCQPw2dwhCZfUsmxCRTSfgdeUPhyTdoMv7h6b9',
amountFrom: '159719371259000000',
senderAddress: '0xb3Edf83eA590F44f5c400077EBd94CCFE10E4Bb0',
});
mockEventLogRepository.sumAmountBridgeOfUserInDay.mockResolvedValue(0);
Expand All @@ -81,11 +100,11 @@ describe('AuthService', () => {
fromSymbol: 'ETH',
toSymbol: 'WETH',
fromAddress: '0x0000000000000000000000000000000000000000',
toAddress: 'B62qkuPGhLfrD12buqho48hSnc3DMGQ1d4ugzNjtYuRmSi5vvAjoZRz',
toAddress: 'B62qqKNnNRpCtgcBexw5khZSpk9K2d9Z7Wzcyir3WZcVd15Bz8eShVi',
fromDecimal: 18,
toDecimal: 9,
fromScAddress: '0x83e21AccD43Bb7C23C51e68fFa345fab3983FfeC',
toScAddress: 'B62qqKFZav5StzHmRkaU21Mw34CgGu5fWCsdGcCuxdgjZb3MSrxo67Q',
fromScAddress: '0xa4045da3c53138F84C97668f6deFDf8f4C9348f6',
toScAddress: 'B62qpeJGDMHp36rqyvfxHmjmHEZk7a7ryq2nCFFHkGHRMqXqkq5F2VS',
status: 'enable',
});
const result = await minaCrawlerService.handleUnlockMina();
Expand Down

0 comments on commit 22a37b1

Please sign in to comment.