From 65c21de2ddcd87d38984a17cbb590f5d138aacc6 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Wed, 27 Sep 2023 16:08:09 +0400 Subject: [PATCH 01/47] feat!: added `Integrator` service --- src/Orion/index.ts | 3 + src/Unit/index.ts | 9 +- src/__tests__/basic.test.ts | 3 + src/config/schemas/pureEnvSchema.ts | 3 + src/services/Integrator/constants.ts | 1 + src/services/Integrator/index.ts | 121 ++++++++++++++++++ .../schemas/basic-pool-info-schema.ts | 26 ++++ .../schemas/environment-response-schema.ts | 19 +++ .../schemas/get-pool-response-schema.ts | 21 +++ src/services/Integrator/schemas/index.ts | 4 + .../Integrator/schemas/info-schema.ts | 12 ++ .../schemas/list-nft-order-response-schema.ts | 10 ++ .../schemas/list-pool-response-schema.ts | 26 ++++ .../Integrator/schemas/pool-schema.ts | 33 +++++ .../Integrator/schemas/util-schemas.ts | 14 ++ src/types.ts | 6 + 16 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 src/services/Integrator/constants.ts create mode 100644 src/services/Integrator/index.ts create mode 100644 src/services/Integrator/schemas/basic-pool-info-schema.ts create mode 100644 src/services/Integrator/schemas/environment-response-schema.ts create mode 100644 src/services/Integrator/schemas/get-pool-response-schema.ts create mode 100644 src/services/Integrator/schemas/index.ts create mode 100644 src/services/Integrator/schemas/info-schema.ts create mode 100644 src/services/Integrator/schemas/list-nft-order-response-schema.ts create mode 100644 src/services/Integrator/schemas/list-pool-response-schema.ts create mode 100644 src/services/Integrator/schemas/pool-schema.ts create mode 100644 src/services/Integrator/schemas/util-schemas.ts diff --git a/src/Orion/index.ts b/src/Orion/index.ts index 80dbbf1..b2a6b44 100644 --- a/src/Orion/index.ts +++ b/src/Orion/index.ts @@ -58,6 +58,9 @@ export default class Orion { priceFeed: { api: networkConfig.api + networkConfig.services.priceFeed.all, }, + integrator: { + api: networkConfig.api + networkConfig.services.integrator.http, + } }, }; }) diff --git a/src/Unit/index.ts b/src/Unit/index.ts index c8b4462..c9cc0f4 100644 --- a/src/Unit/index.ts +++ b/src/Unit/index.ts @@ -7,6 +7,7 @@ import Exchange from './Exchange/index.js'; import FarmingManager from './FarmingManager/index.js'; import { chains, envs } from '../config/index.js'; import type { networkCodes } from '../constants/index.js'; +import { IntegratorService } from '../services/Integrator/index.js'; type KnownConfig = { env: KnownEnv @@ -22,6 +23,8 @@ export default class Unit { public readonly blockchainService: BlockchainService; + public readonly integrator: IntegratorService; + public readonly aggregator: Aggregator; public readonly priceFeed: PriceFeed; @@ -58,6 +61,9 @@ export default class Unit { priceFeed: { api: networkConfig.api + networkConfig.services.priceFeed.all, }, + integrator: { + api: networkConfig.api + networkConfig.services.integrator.http, + } }, } } else { @@ -65,7 +71,7 @@ export default class Unit { } const chainInfo = chains[config.chainId]; if (!chainInfo) throw new Error('Chain info is required'); - + this.chainId = config.chainId; this.networkCode = chainInfo.code; this.contracts = chainInfo.contracts @@ -75,6 +81,7 @@ export default class Unit { this.provider.pollingInterval = 1000; this.blockchainService = new BlockchainService(this.config.services.blockchainService.http, this.config.basicAuth); + this.integrator = new IntegratorService(this.config.services.integrator.api, intNetwork); this.aggregator = new Aggregator( this.config.services.aggregator.http, this.config.services.aggregator.ws, diff --git a/src/__tests__/basic.test.ts b/src/__tests__/basic.test.ts index 6f8241b..c3c5c8a 100644 --- a/src/__tests__/basic.test.ts +++ b/src/__tests__/basic.test.ts @@ -177,6 +177,9 @@ describe('Orion', () => { priceFeed: { api: orionPriceFeedAPI + '/price-feed', }, + integrator: { + api: '', + } }, } } diff --git a/src/config/schemas/pureEnvSchema.ts b/src/config/schemas/pureEnvSchema.ts index 8838cd5..854e9f4 100644 --- a/src/config/schemas/pureEnvSchema.ts +++ b/src/config/schemas/pureEnvSchema.ts @@ -14,6 +14,9 @@ export const pureEnvNetworksSchema = z.object({ priceFeed: z.object({ all: z.string(), }), + integrator: z.object({ + http: z.string(), + }), }), rpc: z.string().optional(), liquidityMigratorAddress: z.string().optional(), diff --git a/src/services/Integrator/constants.ts b/src/services/Integrator/constants.ts new file mode 100644 index 0000000..00c0d3d --- /dev/null +++ b/src/services/Integrator/constants.ts @@ -0,0 +1 @@ +export const AVAILABLE_POOL_FEE = ['0.01', '0.05', '0.3', '1'] as const; diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts new file mode 100644 index 0000000..ebb36ce --- /dev/null +++ b/src/services/Integrator/index.ts @@ -0,0 +1,121 @@ +import { + environmentResponseSchema, + getPoolResponseSchema, + listNFTOrderResponseSchema, + listPoolResponseSchema, +} from './schemas/index.js'; +import { fetchWithValidation } from 'simple-typed-fetch'; + +type BasePayload = { + chainId: number + jsonrpc: '1.0' +}; + +type GetEnvironmentPayload = BasePayload & { + model: 'Environment' + method: 'getEnvironment' + params: [] +}; + +type ListNFTOrderPayload = BasePayload & { + model: 'OrionV3NFTManager' + method: 'listNFTOrder' + params: [string] +}; + +type GetPoolInfoPayload = BasePayload & { + model: 'OrionV3Factory' + method: 'getPoolInfo' + params: [string, string, string] +}; + +type ListPoolPayload = BasePayload & { + model: 'OrionFarmV3' + method: 'listPool' + params: [string] +}; + +type Payload = + | GetEnvironmentPayload + | ListNFTOrderPayload + | GetPoolInfoPayload + | ListPoolPayload; + +class IntegratorService { + private readonly apiUrl: string; + + private readonly chainId: number; + + get api() { + return this.apiUrl; + } + + constructor(apiUrl: string, chainId: number) { + this.apiUrl = apiUrl; + this.chainId = chainId; + + this.getEnvironment = this.getEnvironment.bind(this); + this.listNFTOrder = this.listNFTOrder.bind(this); + this.getPoolInfo = this.getPoolInfo.bind(this); + this.listPool = this.listPool.bind(this); + } + + makeRPCPayload = (payload: Omit) => { + return JSON.stringify({ + ...payload, + chainId: this.chainId, + jsonrpc: '1.0', + }); + }; + + private readonly getEnvironment = () => { + return fetchWithValidation(this.apiUrl, environmentResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'Environment', + method: 'getEnvironment', + params: [], + }), + }); + }; + + private readonly listNFTOrder = (address: string) => { + return fetchWithValidation(this.apiUrl, listNFTOrderResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'OrionV3NFTManager', + method: 'listNFTOrder', + params: [address], + }), + }); + }; + + private readonly getPoolInfo = ( + token0: string, + token1: string, + poolAddress: string + ) => { + return fetchWithValidation(this.apiUrl, getPoolResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'OrionV3Factory', + method: 'getPoolInfo', + params: [token0, token1, poolAddress], + }), + }); + } + + private readonly listPool = (address: string) => { + return fetchWithValidation(this.apiUrl, listPoolResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'OrionFarmV3', + method: 'listPool', + params: [address], + }), + }); + } +} + +export * as schemas from './schemas/index.js'; +export { IntegratorService }; diff --git a/src/services/Integrator/schemas/basic-pool-info-schema.ts b/src/services/Integrator/schemas/basic-pool-info-schema.ts new file mode 100644 index 0000000..049c92f --- /dev/null +++ b/src/services/Integrator/schemas/basic-pool-info-schema.ts @@ -0,0 +1,26 @@ +import { z } from 'zod'; +import { evmAddressSchema } from './util-schemas.js'; + +const basicPoolInfo = z.object({ + poolAddress: evmAddressSchema, + isInitialized: z.boolean(), + liquidity: z.number().nonnegative(), + liquidityInUsd: z.number().nonnegative(), + liquidityShare: z.number().nonnegative(), + isFarming: z.boolean(), + rewardsTotal: z.number().nonnegative(), + rewardsPerPeriod: z.number().nonnegative(), + rewardsShare: z.number().nonnegative(), + feePerPeriod: z.number().nonnegative(), + feeTotal: z.number().nonnegative(), + feeShare: z.number().nonnegative(), + tickMultiplier: z.number().nonnegative(), + MAX_TICK: z.number().nonnegative().int(), + minAPR: z.number().nonnegative(), + maxAPR: z.number().nonnegative(), + avgAPR: z.number().nonnegative(), + maxBoost: z.number().nonnegative().int(), + feeRate: z.array(z.number().nonnegative()), +}); + +export default basicPoolInfo; diff --git a/src/services/Integrator/schemas/environment-response-schema.ts b/src/services/Integrator/schemas/environment-response-schema.ts new file mode 100644 index 0000000..5da5cd2 --- /dev/null +++ b/src/services/Integrator/schemas/environment-response-schema.ts @@ -0,0 +1,19 @@ +import { z } from 'zod'; +import { evmAddressSchema } from './util-schemas.js'; +import infoSchema from './info-schema.js'; + +const environmentResponseSchema = z.object({ + result: z.object({ + chainId: z.number().int().nonnegative(), + nativeToken: z.string(), + OrionV3Factory: evmAddressSchema, + OrionV3NFTManager: evmAddressSchema, + SwapRouter: evmAddressSchema, + OrionFarmV3: evmAddressSchema, + OrionVoting: evmAddressSchema, + veORN: evmAddressSchema, + }), + info: infoSchema, +}); + +export default environmentResponseSchema; diff --git a/src/services/Integrator/schemas/get-pool-response-schema.ts b/src/services/Integrator/schemas/get-pool-response-schema.ts new file mode 100644 index 0000000..ee49682 --- /dev/null +++ b/src/services/Integrator/schemas/get-pool-response-schema.ts @@ -0,0 +1,21 @@ +import { z } from 'zod'; +import { evmAddressSchema } from './util-schemas.js'; +import { AVAILABLE_POOL_FEE } from '../constants.js'; +import basicPoolInfo from './basic-pool-info-schema.js'; +import infoSchema from './info-schema.js'; + +const getPoolResponseSchema = z.object({ + result: z.object({ + token0: z.string().nonempty(), + token1: z.string().nonempty(), + token0Address: evmAddressSchema, + token1Address: evmAddressSchema, + + totalLiquidity: z.number().nonnegative(), + WETH9: evmAddressSchema, + pools: z.record(z.enum(AVAILABLE_POOL_FEE), basicPoolInfo.nullable()), + }), + info: infoSchema, +}); + +export default getPoolResponseSchema; diff --git a/src/services/Integrator/schemas/index.ts b/src/services/Integrator/schemas/index.ts new file mode 100644 index 0000000..1d09d6e --- /dev/null +++ b/src/services/Integrator/schemas/index.ts @@ -0,0 +1,4 @@ +export { default as environmentResponseSchema } from './environment-response-schema.js'; +export { default as listNFTOrderResponseSchema } from './list-nft-order-response-schema.js'; +export { default as getPoolResponseSchema } from './get-pool-response-schema.js'; +export { default as listPoolResponseSchema } from './list-pool-response-schema.js'; diff --git a/src/services/Integrator/schemas/info-schema.ts b/src/services/Integrator/schemas/info-schema.ts new file mode 100644 index 0000000..949727e --- /dev/null +++ b/src/services/Integrator/schemas/info-schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod'; +import { hexStringSchema } from './util-schemas.js'; + +const infoSchema = z.object({ + blockNumber: z.number().int().nonnegative(), + blockHash: hexStringSchema, + timeRequest: z.number().int().nonnegative(), + timeAnswer: z.number().int().nonnegative(), + changes: z.number().int().nonnegative(), +}); + +export default infoSchema; diff --git a/src/services/Integrator/schemas/list-nft-order-response-schema.ts b/src/services/Integrator/schemas/list-nft-order-response-schema.ts new file mode 100644 index 0000000..4747ffd --- /dev/null +++ b/src/services/Integrator/schemas/list-nft-order-response-schema.ts @@ -0,0 +1,10 @@ +import { z } from 'zod'; +import poolSchema from './pool-schema.js'; +import infoSchema from './info-schema.js'; + +const listNFTOrderResponseSchema = z.object({ + result: z.array(poolSchema), + info: infoSchema, +}); + +export default listNFTOrderResponseSchema; diff --git a/src/services/Integrator/schemas/list-pool-response-schema.ts b/src/services/Integrator/schemas/list-pool-response-schema.ts new file mode 100644 index 0000000..2e19738 --- /dev/null +++ b/src/services/Integrator/schemas/list-pool-response-schema.ts @@ -0,0 +1,26 @@ +import { z } from 'zod'; +import { evmAddressSchema } from './util-schemas.js'; +import basicPoolInfo from './basic-pool-info-schema.js'; +import infoSchema from './info-schema.js'; + +const poolOfListPoolSchema = z.object({ + token0: z.string().nonempty(), + token1: z.string().nonempty(), + token0Address: evmAddressSchema, + token1Address: evmAddressSchema, + + token0Decimals: z.number().int().nonnegative().max(18), + token1Decimals: z.number().int().nonnegative().max(18), + WETH9: evmAddressSchema, + + ...basicPoolInfo.shape, + + type: z.string().nonempty(), +}); + +const listPoolResponseSchema = z.object({ + result: z.array(poolOfListPoolSchema), + info: infoSchema, +}); + +export default listPoolResponseSchema; diff --git a/src/services/Integrator/schemas/pool-schema.ts b/src/services/Integrator/schemas/pool-schema.ts new file mode 100644 index 0000000..3053734 --- /dev/null +++ b/src/services/Integrator/schemas/pool-schema.ts @@ -0,0 +1,33 @@ +import { z } from 'zod'; +import { evmAddressSchema } from './util-schemas.js'; + +const poolSchema = z.object({ + tokenId: evmAddressSchema, + + token0: z.string().nonempty(), + token1: z.string().nonempty(), + token0Address: evmAddressSchema, + token1Address: evmAddressSchema, + token0Decimals: z.number().int().nonnegative().max(18), + token1Decimals: z.number().int().nonnegative().max(18), + + amount: z.number().nonnegative(), + amount0: z.number().nonnegative(), + amount1: z.number().nonnegative(), + from: z.number().nonnegative(), + to: z.number().nonnegative(), + fee: z.number().nonnegative(), + collectFee: z.number().nonnegative(), + reward: z.number().nonnegative(), + apr: z.number().nonnegative(), + boost: z.number().int().nonnegative(), + isStaked: z.boolean(), + poolFee: z.number().nonnegative(), + poolAddress: evmAddressSchema, + veOrnForMaxBoost: z.number().nonnegative(), + veOrnMaxBoost: z.number().nonnegative(), + veORNCurrent: z.number().nonnegative(), + time: z.number().int().nonnegative(), // tim +}); + +export default poolSchema; diff --git a/src/services/Integrator/schemas/util-schemas.ts b/src/services/Integrator/schemas/util-schemas.ts new file mode 100644 index 0000000..0d58a75 --- /dev/null +++ b/src/services/Integrator/schemas/util-schemas.ts @@ -0,0 +1,14 @@ +import { ethers } from 'ethers'; +import { z } from 'zod'; + +export const evmAddressSchema = z + .string() + .refine(ethers.utils.isAddress, (v) => ({ + message: `${v} is not a valid address`, + })); + +export const hexStringSchema = z + .string() + .refine(ethers.utils.isAddress, (v) => ({ + message: `${v} is not a valid hex string`, + })); diff --git a/src/types.ts b/src/types.ts index 64449e8..88d32ac 100644 --- a/src/types.ts +++ b/src/types.ts @@ -252,6 +252,12 @@ export type VerboseUnitConfig = { // http://10.23.5.11:3003/, // https://price-feed:3003/ } + integrator: { + api: string + // For example: + // http://localhost:3004/, + // http:// + } } basicAuth?: BasicAuthCredentials } From 716762ce118bdccbb4313a161eaf78add5b038b0 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Wed, 27 Sep 2023 15:46:07 +0300 Subject: [PATCH 02/47] create rc --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 23406c1..8f4d0e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.88", + "version": "0.19.89-rc0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.88", + "version": "0.19.89-rc0", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index da99f7a..27749e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.88", + "version": "0.19.89-rc0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From d6b1c625b3dc6e8108e01915f054877ed2062052 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Wed, 27 Sep 2023 16:20:35 +0300 Subject: [PATCH 03/47] add veORN method --- package-lock.json | 4 +-- package.json | 2 +- src/services/Integrator/index.ts | 28 ++++++++++++++++--- src/services/Integrator/schemas/index.ts | 1 + .../Integrator/schemas/veORN-info-schema.ts | 26 +++++++++++++++++ 5 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 src/services/Integrator/schemas/veORN-info-schema.ts diff --git a/package-lock.json b/package-lock.json index 8f4d0e7..f08d407 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc0", + "version": "0.19.89-rc1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc0", + "version": "0.19.89-rc1", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 27749e9..b6df1a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc0", + "version": "0.19.89-rc1", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index ebb36ce..76efab4 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -3,6 +3,7 @@ import { getPoolResponseSchema, listNFTOrderResponseSchema, listPoolResponseSchema, + veORNInfoSchema, } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; @@ -35,11 +36,18 @@ type ListPoolPayload = BasePayload & { params: [string] }; +type VeORNInfoPayload = BasePayload & { + model: 'veORN' + method: 'info' + params: [string] +} + type Payload = - | GetEnvironmentPayload - | ListNFTOrderPayload - | GetPoolInfoPayload - | ListPoolPayload; + | GetEnvironmentPayload + | ListNFTOrderPayload + | GetPoolInfoPayload + | ListPoolPayload + | VeORNInfoPayload; class IntegratorService { private readonly apiUrl: string; @@ -58,6 +66,7 @@ class IntegratorService { this.listNFTOrder = this.listNFTOrder.bind(this); this.getPoolInfo = this.getPoolInfo.bind(this); this.listPool = this.listPool.bind(this); + this.veORNInfo = this.veORNInfo.bind(this); } makeRPCPayload = (payload: Omit) => { @@ -115,6 +124,17 @@ class IntegratorService { }), }); } + + private readonly veORNInfo = (address: string) => { + return fetchWithValidation(this.apiUrl, veORNInfoSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'veORN', + method: 'info', + params: [address] + }) + }) + } } export * as schemas from './schemas/index.js'; diff --git a/src/services/Integrator/schemas/index.ts b/src/services/Integrator/schemas/index.ts index 1d09d6e..a8cca95 100644 --- a/src/services/Integrator/schemas/index.ts +++ b/src/services/Integrator/schemas/index.ts @@ -2,3 +2,4 @@ export { default as environmentResponseSchema } from './environment-response-sch export { default as listNFTOrderResponseSchema } from './list-nft-order-response-schema.js'; export { default as getPoolResponseSchema } from './get-pool-response-schema.js'; export { default as listPoolResponseSchema } from './list-pool-response-schema.js'; +export { default as veORNInfoSchema } from './veORN-info-schema.js'; diff --git a/src/services/Integrator/schemas/veORN-info-schema.ts b/src/services/Integrator/schemas/veORN-info-schema.ts new file mode 100644 index 0000000..67f0602 --- /dev/null +++ b/src/services/Integrator/schemas/veORN-info-schema.ts @@ -0,0 +1,26 @@ +import { z } from 'zod'; +import { evmAddressSchema } from './util-schemas.js'; +import infoSchema from './info-schema.js'; + +const veORNResultSchema = z.object({ + avgAPR: z.number(), + minAPR: z.number(), + maxAPR: z.number(), + veTOKENAddress: evmAddressSchema, + totalORNLocked: z.number(), + totalVeORN: z.number(), + weekly_reward: z.number(), + userAPR: z.number(), + userVeORN: z.number(), + userORNLocked: z.number(), + userPeriodLock: z.number(), + userReward: z.number(), + userWeeklyReward: z.number() +}); + +const veORNInfoSchema = z.object({ + result: veORNResultSchema, + info: infoSchema, +}); + +export default veORNInfoSchema; From b6e6a57d2cb97112b5814432667e2fabcc597270 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Wed, 27 Sep 2023 16:46:57 +0300 Subject: [PATCH 04/47] make veORN method public --- package.json | 2 +- src/services/Integrator/index.ts | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index b6df1a3..04fe10b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc1", + "version": "0.19.89-rc2", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 76efab4..e5a1aa0 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -77,6 +77,17 @@ class IntegratorService { }); }; + veORNInfo = (address: string) => { + return fetchWithValidation(this.apiUrl, veORNInfoSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'veORN', + method: 'info', + params: [address] + }) + }) + } + private readonly getEnvironment = () => { return fetchWithValidation(this.apiUrl, environmentResponseSchema, { method: 'POST', @@ -124,17 +135,6 @@ class IntegratorService { }), }); } - - private readonly veORNInfo = (address: string) => { - return fetchWithValidation(this.apiUrl, veORNInfoSchema, { - method: 'POST', - body: this.makeRPCPayload({ - model: 'veORN', - method: 'info', - params: [address] - }) - }) - } } export * as schemas from './schemas/index.js'; From 8453f92a7f8af560520df2cc00300fc3a2719448 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Wed, 27 Sep 2023 17:28:10 +0300 Subject: [PATCH 05/47] update config --- package-lock.json | 4 +-- package.json | 2 +- src/config/envs.json | 69 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f08d407..0cffd32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc1", + "version": "0.19.89-rc3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc1", + "version": "0.19.89-rc3", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 04fe10b..a89b8e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc2", + "version": "0.19.89-rc3", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/config/envs.json b/src/config/envs.json index fd2bb30..bad0b9d 100644 --- a/src/config/envs.json +++ b/src/config/envs.json @@ -15,6 +15,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } }, "liquidityMigratorAddress": "0x23a1820a47BcD022E29f6058a5FD224242F50D1A" @@ -31,6 +34,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -46,6 +52,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -61,6 +70,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -76,6 +88,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } } @@ -97,6 +112,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } }, "liquidityMigratorAddress": "0x01b10dds12478C88A5E18e2707E729906bC25CfF6" @@ -113,6 +131,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -128,6 +149,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -143,6 +167,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -158,6 +185,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -173,6 +203,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } } @@ -194,6 +227,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -209,6 +245,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -224,6 +263,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -239,6 +281,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -254,6 +299,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } } @@ -275,6 +323,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -290,6 +341,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } } @@ -311,6 +365,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } }, "liquidityMigratorAddress": "0x23a1820a47BcD022E29f6058a5FD224242F50D1A" @@ -327,6 +384,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -342,6 +402,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -357,6 +420,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } }, @@ -372,6 +438,9 @@ }, "priceFeed": { "all": "/price-feed" + }, + "integrator": { + "http": "http://65.109.97.170:33000" } } } From 1227562402d9052d37126238c7c5595f96082112 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Wed, 27 Sep 2023 17:55:01 +0300 Subject: [PATCH 06/47] fix hex validation --- package-lock.json | 4 +- package.json | 2 +- src/config/envs.json | 46 +++++++++---------- .../Integrator/schemas/util-schemas.ts | 2 +- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0cffd32..6df12c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc3", + "version": "0.19.89-rc4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc3", + "version": "0.19.89-rc4", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index a89b8e5..8addc9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc3", + "version": "0.19.89-rc4", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/config/envs.json b/src/config/envs.json index bad0b9d..00e4268 100644 --- a/src/config/envs.json +++ b/src/config/envs.json @@ -17,7 +17,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } }, "liquidityMigratorAddress": "0x23a1820a47BcD022E29f6058a5FD224242F50D1A" @@ -36,7 +36,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -54,7 +54,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -72,7 +72,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -90,7 +90,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } } @@ -114,7 +114,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } }, "liquidityMigratorAddress": "0x01b10dds12478C88A5E18e2707E729906bC25CfF6" @@ -133,7 +133,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -151,7 +151,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -169,7 +169,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -187,7 +187,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -205,7 +205,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } } @@ -229,7 +229,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -247,7 +247,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -265,7 +265,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -283,7 +283,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -301,7 +301,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } } @@ -325,7 +325,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -343,7 +343,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } } @@ -367,7 +367,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } }, "liquidityMigratorAddress": "0x23a1820a47BcD022E29f6058a5FD224242F50D1A" @@ -386,7 +386,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -404,7 +404,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -422,7 +422,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } }, @@ -440,7 +440,7 @@ "all": "/price-feed" }, "integrator": { - "http": "http://65.109.97.170:33000" + "http": "/orion-integrator/" } } } diff --git a/src/services/Integrator/schemas/util-schemas.ts b/src/services/Integrator/schemas/util-schemas.ts index 0d58a75..f0e80b2 100644 --- a/src/services/Integrator/schemas/util-schemas.ts +++ b/src/services/Integrator/schemas/util-schemas.ts @@ -9,6 +9,6 @@ export const evmAddressSchema = z export const hexStringSchema = z .string() - .refine(ethers.utils.isAddress, (v) => ({ + .refine(ethers.utils.isHexString, (v) => ({ message: `${v} is not a valid hex string`, })); From 0b212bbbd9d566e1c5c38e5036963bed226e6030 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Wed, 27 Sep 2023 18:13:37 +0300 Subject: [PATCH 07/47] bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6df12c7..c51fd01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc4", + "version": "0.19.89-rc5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc4", + "version": "0.19.89-rc5", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 8addc9d..6573e2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc4", + "version": "0.19.89-rc5", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From bcf0a3c4d0b04d27c047bc17f255b699e71344f1 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Thu, 28 Sep 2023 10:45:04 +0300 Subject: [PATCH 08/47] fix publishing --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c51fd01..97b6cdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc5", + "version": "0.19.89-rc6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc5", + "version": "0.19.89-rc6", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 6573e2f..fee5419 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc5", + "version": "0.19.89-rc6", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From c2a40841589b8a117cde35123dc30229260a36ac Mon Sep 17 00:00:00 2001 From: Oleg Nechiporenko Date: Thu, 7 Sep 2023 00:12:07 +0300 Subject: [PATCH 09/47] feat: update ethers@6 fix: bigint errors fix: TS errors fix: gasLimit fetch fix: review comments fix: contracts errors chore: bump rc version fix: revert wrong fix fix: ts config fix: ts config fix: ts config feat: update signer --- docs/INTEGRATION.md | 2 +- package-lock.json | 350 ++++-------------- package.json | 4 +- src/BalanceGuard.ts | 46 ++- src/Orion/bridge/getHistory.ts | 4 +- src/Orion/bridge/index.ts | 2 +- src/Orion/bridge/swap.ts | 74 ++-- src/Unit/Exchange/deposit.ts | 28 +- src/Unit/Exchange/generateSwapCalldata.ts | 91 ++--- src/Unit/Exchange/getSwapInfo.ts | 10 +- src/Unit/Exchange/swapLimit.ts | 32 +- src/Unit/Exchange/swapMarket.ts | 36 +- src/Unit/Exchange/withdraw.ts | 26 +- src/Unit/FarmingManager/index.ts | 99 ++--- src/Unit/index.ts | 6 +- src/__tests__/basic.test.ts | 6 +- src/__tests__/fee.test.ts | 2 +- src/addressSchema.ts | 2 +- src/crypt/hashOrder.ts | 2 +- src/crypt/signCancelOrder.ts | 7 +- src/crypt/signCancelOrderPersonal.ts | 7 +- src/crypt/signOrder.ts | 19 +- src/crypt/signOrderPersonal.ts | 8 +- src/services/Aggregator/index.ts | 4 +- .../Aggregator/schemas/orderSchema.ts | 24 +- .../schemas/atomicHistorySchema.ts | 6 +- .../schemas/contractsAddressesSchema.ts | 4 +- src/utils/calculateNetworkFee.ts | 2 +- src/utils/checkIsToken.ts | 6 +- src/utils/denormalizeNumber.ts | 5 +- src/utils/generateSecret.ts | 2 +- src/utils/getAvailableFundsSources.ts | 2 +- src/utils/getBalance.ts | 14 +- src/utils/getBalances.ts | 4 +- src/utils/getNativeCryptocurrencyName.ts | 2 +- src/utils/normalizeNumber.ts | 14 +- src/utils/parseExchangeTradeTransaction.ts | 62 ++-- tsconfig.json | 3 +- 38 files changed, 409 insertions(+), 608 deletions(-) diff --git a/docs/INTEGRATION.md b/docs/INTEGRATION.md index d1110f3..95798ec 100644 --- a/docs/INTEGRATION.md +++ b/docs/INTEGRATION.md @@ -28,7 +28,7 @@ import { BaseProvider } from "@metamask/providers"; import { ethers } from "ethers"; const startApp = async (provider: BaseProvider) => { - const web3Provider = new ethers.providers.Web3Provider(provider); + const web3Provider = new ethers.Web3Provider(provider); await web3Provider.ready; const signer = web3Provider.getSigner(); // ready to go }; diff --git a/package-lock.json b/package-lock.json index 0e30774..52dd706 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.91", + "version": "0.19.92-rc0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.91", + "version": "0.19.92-rc0", "hasInstallScript": true, "license": "ISC", "dependencies": { @@ -17,7 +17,7 @@ "bignumber.js": "^9.1.1", "bson-objectid": "^2.0.4", "buffer": "^6.0.3", - "ethers": "^5.6.2", + "ethers": "^6.7.1", "express": "^4.18.2", "isomorphic-ws": "^5.0.0", "just-clone": "^6.2.0", @@ -76,6 +76,11 @@ "node": ">=0.10.0" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", + "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==" + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -1052,32 +1057,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, "node_modules/@ethersproject/abstract-provider": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", @@ -1239,33 +1218,6 @@ "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, "node_modules/@ethersproject/hash": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", @@ -1292,65 +1244,6 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", @@ -1403,25 +1296,6 @@ "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, "node_modules/@ethersproject/properties": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", @@ -1578,29 +1452,6 @@ "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, "node_modules/@ethersproject/strings": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", @@ -1647,58 +1498,6 @@ "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, "node_modules/@ethersproject/web": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", @@ -1721,28 +1520,6 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, "node_modules/@fastify/deepmerge": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz", @@ -2583,6 +2360,28 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3459,9 +3258,9 @@ } }, "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" }, "node_modules/ajv": { "version": "6.12.6", @@ -5526,13 +5325,13 @@ } }, "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", + "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "url": "https://github.com/sponsors/ethers-io/" }, { "type": "individual", @@ -5540,36 +5339,46 @@ } ], "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "@adraffy/ens-normalize": "1.9.2", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.7.1", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/events": { @@ -10260,11 +10069,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", diff --git a/package.json b/package.json index 4e7d8fc..a99395b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.91", + "version": "0.19.92-rc0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", @@ -91,7 +91,7 @@ "bignumber.js": "^9.1.1", "bson-objectid": "^2.0.4", "buffer": "^6.0.3", - "ethers": "^5.6.2", + "ethers": "^6.7.1", "express": "^4.18.2", "isomorphic-ws": "^5.0.0", "just-clone": "^6.2.0", diff --git a/src/BalanceGuard.ts b/src/BalanceGuard.ts index 42bbb23..9434591 100644 --- a/src/BalanceGuard.ts +++ b/src/BalanceGuard.ts @@ -1,7 +1,7 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; import clone from 'just-clone'; -import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6'; import { APPROVE_ERC20_GAS_LIMIT, NATIVE_CURRENCY_PRECISION } from './constants/index.js'; import type { AggregatedBalanceRequirement, ApproveFix, Asset, BalanceIssue, BalanceRequirement, Source, @@ -24,7 +24,7 @@ export default class BalanceGuard { private readonly nativeCryptocurrency: Asset; - private readonly provider: ethers.providers.Provider; + private readonly provider: ethers.Provider; private readonly signer: ethers.Signer; @@ -33,7 +33,7 @@ export default class BalanceGuard { constructor( balances: Partial>>, nativeCryptocurrency: Asset, - provider: ethers.providers.Provider, + provider: ethers.Provider, signer: ethers.Signer, logger?: (message: string) => void, ) { @@ -62,10 +62,10 @@ export default class BalanceGuard { const walletAddress = await this.signer.getAddress(); const tokenContract = ERC20__factory .connect(assetAddress, this.provider); - const unsignedTx = await tokenContract.populateTransaction - .approve( + const unsignedTx = await tokenContract.approve + .populateTransaction( spenderAddress, - ethers.constants.MaxUint256, + ethers.MaxUint256, ); unsignedTx.from = walletAddress; let resetRequired = false; @@ -117,21 +117,23 @@ export default class BalanceGuard { const approve = async ({ spenderAddress, targetAmount }: ApproveFix) => { const bnTargetAmount = new BigNumber(targetAmount); const unsignedApproveTx = await tokenContract - .populateTransaction - .approve( + .approve.populateTransaction( spenderAddress, bnTargetAmount.isZero() ? '0' // Reset - : ethers.constants.MaxUint256, // Infinite approve + : ethers.MaxUint256, // Infinite approve ); const walletAddress = await this.signer.getAddress(); const nonce = await this.provider.getTransactionCount(walletAddress, 'pending'); - const gasPrice = await this.provider.getGasPrice(); + const { gasPrice, maxFeePerGas } = await this.provider.getFeeData(); const network = await this.provider.getNetwork(); + if (gasPrice !== null && maxFeePerGas !== null) { + unsignedApproveTx.gasPrice = gasPrice; + unsignedApproveTx.maxFeePerGas = maxFeePerGas; + } unsignedApproveTx.chainId = network.chainId; - unsignedApproveTx.gasPrice = gasPrice; unsignedApproveTx.nonce = nonce; unsignedApproveTx.from = walletAddress; const gasLimit = await this.provider.estimateGas(unsignedApproveTx); @@ -139,7 +141,7 @@ export default class BalanceGuard { this.logger?.('Approve transaction signing...'); const signedTx = await this.signer.signTransaction(unsignedApproveTx); - const txResponse = await this.provider.sendTransaction(signedTx); + const txResponse = await this.provider.broadcastTransaction(signedTx); this.logger?.(`${issue.asset.name} approve transaction sent ${txResponse.hash}. Waiting for confirmation...`); await txResponse.wait(); this.logger?.(`${issue.asset.name} approve transaction confirmed.`); @@ -230,7 +232,7 @@ export default class BalanceGuard { const lackAmount = remainingBalance.exchange.abs(); // e.g. -435.234234 to 434.234234 let denormalizedAllowance: BigNumber; - if (asset.address === ethers.constants.AddressZero) { + if (asset.address === ethers.ZeroAddress) { denormalizedAllowance = remainingBalance.wallet; } else { if (spenderAddress === undefined) throw new Error(`Spender address is required for ${asset.name}`); @@ -272,13 +274,11 @@ export default class BalanceGuard { asset.address, spenderAddress, ); - const gasPriceWei = await this.provider.getGasPrice(); - const approveTransactionCost = ethers.BigNumber - .from(APPROVE_ERC20_GAS_LIMIT) - .mul(gasPriceWei); + const { gasPrice: gasPriceWei } = await this.provider.getFeeData(); + const approveTransactionCost = BigInt(APPROVE_ERC20_GAS_LIMIT) * (gasPriceWei ?? 0n); const denormalizedApproveTransactionCost = denormalizeNumber( approveTransactionCost, - NATIVE_CURRENCY_PRECISION + BigInt(NATIVE_CURRENCY_PRECISION) ); requiredApproves.items = { @@ -329,7 +329,7 @@ export default class BalanceGuard { .reduce((p, c) => (c !== undefined ? p.plus(c) : p), new BigNumber(0)); let denormalizedAllowance: BigNumber; - if (asset.address === ethers.constants.AddressZero) { + if (asset.address === ethers.ZeroAddress) { denormalizedAllowance = remainingBalance.wallet; } else { if (spenderAddress === undefined) throw new Error(`Spender address is required for ${asset.name}`); @@ -365,13 +365,11 @@ export default class BalanceGuard { asset.address, spenderAddress, ); - const gasPriceWei = await this.provider.getGasPrice(); - const approveTransactionCost = ethers.BigNumber - .from(APPROVE_ERC20_GAS_LIMIT) - .mul(gasPriceWei); + const { gasPrice: gasPriceWei } = await this.provider.getFeeData(); + const approveTransactionCost = BigInt(APPROVE_ERC20_GAS_LIMIT) * (gasPriceWei ?? 0n); const denormalizedApproveTransactionCost = denormalizeNumber( approveTransactionCost, - NATIVE_CURRENCY_PRECISION + BigInt(NATIVE_CURRENCY_PRECISION) ); requiredApproves.items = { diff --git a/src/Orion/bridge/getHistory.ts b/src/Orion/bridge/getHistory.ts index 0cce384..13da84b 100644 --- a/src/Orion/bridge/getHistory.ts +++ b/src/Orion/bridge/getHistory.ts @@ -5,10 +5,10 @@ import { isValidChainId } from '../../utils/index.js'; import { simpleFetch } from 'simple-typed-fetch'; import bsonObjectId from 'bson-objectid'; -const ObjectID = bsonObjectId.default +const ObjectID = bsonObjectId; const getHistory = async (units: Unit[], address: string, limit = 1000) => { - if (!ethers.utils.isAddress(address)) throw new Error(`Invalid address: ${address}`); + if (!ethers.isAddress(address)) throw new Error(`Invalid address: ${address}`); const data = await Promise.all(units.map(async ({ blockchainService, aggregator, chainId }) => { const sourceNetworkHistory = await simpleFetch(blockchainService.getSourceAtomicSwapHistory)({ limit, diff --git a/src/Orion/bridge/index.ts b/src/Orion/bridge/index.ts index ccadd14..59da9c8 100644 --- a/src/Orion/bridge/index.ts +++ b/src/Orion/bridge/index.ts @@ -229,7 +229,7 @@ export default class Bridge { env?: string | undefined, ) { const secret = generateSecret(); - const secretHash = ethers.utils.keccak256(secret); + const secretHash = ethers.keccak256(secret); const lockExpiration = Date.now() + SECONDS_IN_DAY * EXPIRATION_DAYS * 1000; return { diff --git a/src/Orion/bridge/swap.ts b/src/Orion/bridge/swap.ts index 9fe41be..e9eae6b 100644 --- a/src/Orion/bridge/swap.ts +++ b/src/Orion/bridge/swap.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import getAvailableSources from '../../utils/getAvailableFundsSources.js'; @@ -123,7 +123,7 @@ export default async function swap({ const sourceChainBalances = await getBalances( { [assetName]: sourceChainAssetAddress, - [sourceChainNativeCryptocurrency]: ethers.constants.AddressZero, + [sourceChainNativeCryptocurrency]: ethers.ZeroAddress, }, sourceAggregator, walletAddress, @@ -134,7 +134,7 @@ export default async function swap({ const targetChainBalances = await getBalances( { [assetName]: targetChainAssetAddress, - [targetChainNativeCryptocurrency]: ethers.constants.AddressZero, + [targetChainNativeCryptocurrency]: ethers.ZeroAddress, }, targetAggregator, walletAddress, @@ -146,7 +146,7 @@ export default async function swap({ sourceChainBalances, { name: sourceChainNativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, sourceProvider, signer, @@ -157,7 +157,7 @@ export default async function swap({ targetChainBalances, { name: targetChainNativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, targetProvider, signer, @@ -181,33 +181,33 @@ export default async function swap({ BigNumber.ROUND_FLOOR, ); const secret = generateSecret(); - const secretHash = ethers.utils.keccak256(secret); + const secretHash = ethers.keccak256(secret); options?.logger?.(`Secret is ${secret}`); options?.logger?.(`Secret hash is ${secretHash}`); const secondsInDay = 60 * 60 * 24; const expirationDays = 4; - const expirationEtherBN = ethers.BigNumber.from( + const expirationEtherBN = BigInt( Date.now() + (secondsInDay * expirationDays * 1000), ); - const unsignedLockAtomicTx = await sourceExchangeContract.populateTransaction.lockAtomic({ + const unsignedLockAtomicTx = await sourceExchangeContract.lockAtomic.populateTransaction({ amount: amountBlockchainParam, asset: sourceChainAssetAddress, expiration: expirationEtherBN, secretHash, sender: walletAddress, - targetChainId: ethers.BigNumber.from(targetChain), + targetChainId: BigInt(targetChain), }); - let sourceChainGasPrice: ethers.BigNumber; + let sourceChainGasPrice: bigint; const sourceChainFeeData = await sourceChainUnit.provider.getFeeData(); - if (ethers.BigNumber.isBigNumber(sourceChainFeeData.gasPrice)) { // + if (sourceChainFeeData.gasPrice !== null) { // unsignedLockAtomicTx.gasPrice = sourceChainFeeData.gasPrice; sourceChainGasPrice = sourceChainFeeData.gasPrice; } else if ( - ethers.BigNumber.isBigNumber(sourceChainFeeData.maxFeePerGas) && - ethers.BigNumber.isBigNumber(sourceChainFeeData.maxPriorityFeePerGas) + sourceChainFeeData.maxFeePerGas !== null && + sourceChainFeeData.maxPriorityFeePerGas !== null ) { // EIP-1559 unsignedLockAtomicTx.maxFeePerGas = sourceChainFeeData.maxFeePerGas; unsignedLockAtomicTx.maxPriorityFeePerGas = sourceChainFeeData.maxPriorityFeePerGas; @@ -216,7 +216,7 @@ export default async function swap({ throw new Error('Can\'t get gas price'); } - unsignedLockAtomicTx.chainId = parseInt(chainId, 10); + unsignedLockAtomicTx.chainId = BigInt(chainId); unsignedLockAtomicTx.from = walletAddress; let value = new BigNumber(0); @@ -230,16 +230,16 @@ export default async function swap({ NATIVE_CURRENCY_PRECISION, BigNumber.ROUND_CEIL, ); - unsignedLockAtomicTx.gasLimit = ethers.BigNumber.from(LOCKATOMIC_GAS_LIMIT); + unsignedLockAtomicTx.gasLimit = BigInt(LOCKATOMIC_GAS_LIMIT); - const transactionCost = ethers.BigNumber.from(LOCKATOMIC_GAS_LIMIT).mul(sourceChainGasPrice); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(LOCKATOMIC_GAS_LIMIT) * sourceChainGasPrice; + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); sourceChainBalanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: sourceChainNativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), sources: ['wallet'] @@ -252,7 +252,7 @@ export default async function swap({ options?.logger?.('Signing lock tx transaction...'); const signedTransaction = await signer.signTransaction(unsignedLockAtomicTx); - const lockAtomicTxResponse = await sourceChainUnit.provider.sendTransaction(signedTransaction); + const lockAtomicTxResponse = await sourceChainUnit.provider.broadcastTransaction(signedTransaction); options?.logger?.(`Lock tx sent. Tx hash: ${lockAtomicTxResponse.hash}. Waiting for tx to be mined...`); await lockAtomicTxResponse.wait(); options?.logger?.('Lock tx mined.'); @@ -280,7 +280,7 @@ export default async function swap({ options?.logger?.('Atomic swap placed.'); // const targetChainGasPriceWei = await simpleFetch(targetBlockchainService.getGasPriceWei)(); - const unsignedRedeemAtomicTx = await targetExchangeContract.populateTransaction.redeemAtomic( + const unsignedRedeemAtomicTx = await targetExchangeContract.redeemAtomic.populateTransaction( { amount: amountBlockchainParam, asset: targetChainAssetAddress, @@ -294,14 +294,14 @@ export default async function swap({ secret ) - let targetChainGasPrice: ethers.BigNumber; + let targetChainGasPrice: bigint; const targetChainFeeData = await targetChainUnit.provider.getFeeData(); - if (ethers.BigNumber.isBigNumber(targetChainFeeData.gasPrice)) { // + if (targetChainFeeData.gasPrice !== null) { // unsignedRedeemAtomicTx.gasPrice = targetChainFeeData.gasPrice; targetChainGasPrice = targetChainFeeData.gasPrice; } else if ( - ethers.BigNumber.isBigNumber(targetChainFeeData.maxFeePerGas) && - ethers.BigNumber.isBigNumber(targetChainFeeData.maxPriorityFeePerGas) + targetChainFeeData.maxFeePerGas !== null && + targetChainFeeData.maxPriorityFeePerGas !== null ) { // EIP-1559 unsignedRedeemAtomicTx.maxFeePerGas = targetChainFeeData.maxFeePerGas; unsignedRedeemAtomicTx.maxPriorityFeePerGas = targetChainFeeData.maxPriorityFeePerGas; @@ -310,18 +310,18 @@ export default async function swap({ throw new Error('Can\'t get gas price'); } - unsignedRedeemAtomicTx.chainId = parseInt(targetChain, 10); + unsignedRedeemAtomicTx.chainId = BigInt(parseInt(targetChain, 10)); unsignedRedeemAtomicTx.from = walletAddress; - unsignedRedeemAtomicTx.gasLimit = ethers.BigNumber.from(REDEEMATOMIC_GAS_LIMIT); + unsignedRedeemAtomicTx.gasLimit = BigInt(REDEEMATOMIC_GAS_LIMIT); - const redeemAtomicTransactionCost = ethers.BigNumber.from(REDEEMATOMIC_GAS_LIMIT).mul(targetChainGasPrice); - const targetDenormalizedTransactionCost = denormalizeNumber(redeemAtomicTransactionCost, NATIVE_CURRENCY_PRECISION); + const redeemAtomicTransactionCost = BigInt(REDEEMATOMIC_GAS_LIMIT) * targetChainGasPrice; + const targetDenormalizedTransactionCost = denormalizeNumber(redeemAtomicTransactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); targetChainBalanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: targetChainNativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: targetDenormalizedTransactionCost.toString(), sources: ['wallet'] @@ -334,7 +334,7 @@ export default async function swap({ options?.logger?.('Signing redeem tx transaction...'); const targetSignedTransaction = await signer.signTransaction(unsignedRedeemAtomicTx); - const targetLockAtomicTxResponse = await targetChainUnit.provider.sendTransaction(targetSignedTransaction); + const targetLockAtomicTxResponse = await targetChainUnit.provider.broadcastTransaction(targetSignedTransaction); options?.logger?.(`Redeem tx sent. Tx hash: ${targetLockAtomicTxResponse.hash}. Waiting for tx to be mined...`); await targetLockAtomicTxResponse.wait(); @@ -343,16 +343,16 @@ export default async function swap({ if (options?.withdrawToWallet !== undefined && options.withdrawToWallet) { options.logger?.('Withdrawing to wallet...'); - const unsignedWithdrawTx = await targetExchangeContract.populateTransaction.withdraw( + const unsignedWithdrawTx = await targetExchangeContract.withdraw.populateTransaction( targetChainAssetAddress, amountBlockchainParam, ); - if (ethers.BigNumber.isBigNumber(targetChainFeeData.gasPrice)) { // + if (targetChainFeeData.gasPrice !== null) { // unsignedWithdrawTx.gasPrice = targetChainFeeData.gasPrice; targetChainGasPrice = targetChainFeeData.gasPrice; } else if ( - ethers.BigNumber.isBigNumber(targetChainFeeData.maxFeePerGas) && - ethers.BigNumber.isBigNumber(targetChainFeeData.maxPriorityFeePerGas) + targetChainFeeData.maxFeePerGas !== null && + targetChainFeeData.maxPriorityFeePerGas !== null ) { // EIP-1559 unsignedWithdrawTx.maxFeePerGas = targetChainFeeData.maxFeePerGas; unsignedWithdrawTx.maxPriorityFeePerGas = targetChainFeeData.maxPriorityFeePerGas; @@ -360,12 +360,12 @@ export default async function swap({ } else { throw new Error('Can\'t get gas price'); } - unsignedWithdrawTx.chainId = parseInt(targetChain, 10); - unsignedWithdrawTx.gasLimit = ethers.BigNumber.from(WITHDRAW_GAS_LIMIT); + unsignedWithdrawTx.chainId = BigInt(parseInt(targetChain, 10)); + unsignedWithdrawTx.gasLimit = BigInt(WITHDRAW_GAS_LIMIT); unsignedWithdrawTx.from = walletAddress; unsignedWithdrawTx.nonce = await targetProvider.getTransactionCount(walletAddress, 'pending'); const signedTx = await signer.signTransaction(unsignedWithdrawTx); - const withdrawTx = await targetProvider.sendTransaction(signedTx); + const withdrawTx = await targetProvider.broadcastTransaction(signedTx); options.logger?.(`Withdraw tx sent. Tx hash: ${withdrawTx.hash}. Waiting for tx to be mined...`); await withdrawTx.wait(); options.logger?.('Withdraw tx mined.'); diff --git a/src/Unit/Exchange/deposit.ts b/src/Unit/Exchange/deposit.ts index dd3ebf8..96bcbfe 100644 --- a/src/Unit/Exchange/deposit.ts +++ b/src/Unit/Exchange/deposit.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import type Unit from '../index.js'; @@ -51,7 +51,7 @@ export default async function deposit({ const balances = await getBalances( { [asset]: assetAddress, - [nativeCryptocurrency]: ethers.constants.AddressZero, + [nativeCryptocurrency]: ethers.ZeroAddress, }, aggregator, walletAddress, @@ -63,7 +63,7 @@ export default async function deposit({ balances, { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, provider, signer, @@ -80,34 +80,34 @@ export default async function deposit({ sources: ['wallet'], }); - let unsignedTx: ethers.PopulatedTransaction; + let unsignedTx: ethers.TransactionLike; if (asset === nativeCryptocurrency) { - unsignedTx = await exchangeContract.populateTransaction.deposit(); + unsignedTx = await exchangeContract.deposit.populateTransaction(); unsignedTx.value = normalizeNumber(amount, NATIVE_CURRENCY_PRECISION, BigNumber.ROUND_CEIL); - unsignedTx.gasLimit = ethers.BigNumber.from(DEPOSIT_ETH_GAS_LIMIT); + unsignedTx.gasLimit = BigInt(DEPOSIT_ETH_GAS_LIMIT); } else { - unsignedTx = await exchangeContract.populateTransaction.depositAsset( + unsignedTx = await exchangeContract.depositAsset.populateTransaction( assetAddress, normalizeNumber(amount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_CEIL), ); - unsignedTx.gasLimit = ethers.BigNumber.from(DEPOSIT_ERC20_GAS_LIMIT); + unsignedTx.gasLimit = BigInt(DEPOSIT_ERC20_GAS_LIMIT); } - const transactionCost = ethers.BigNumber.from(unsignedTx.gasLimit).mul(gasPriceWei); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(unsignedTx.gasLimit) * BigInt(gasPriceWei); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); balanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), sources: ['wallet'], }); unsignedTx.chainId = parseInt(chainId, 10); - unsignedTx.gasPrice = ethers.BigNumber.from(gasPriceWei); + unsignedTx.gasPrice = BigInt(gasPriceWei); unsignedTx.from = walletAddress; await balanceGuard.check(true); @@ -117,10 +117,10 @@ export default async function deposit({ const signedTx = await signer.signTransaction(unsignedTx); try { - const txResponse = await provider.sendTransaction(signedTx); + const txResponse = await provider.broadcastTransaction(signedTx); console.log(`Deposit tx sent: ${txResponse.hash}. Waiting for confirmation...`); const txReceipt = await txResponse.wait(); - if (txReceipt.status !== undefined) { + if (txReceipt?.status !== undefined) { console.log('Deposit tx confirmed'); } else { console.log('Deposit tx failed'); diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index c781c28..1664a03 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -1,11 +1,10 @@ -import type { ExchangeWithGenericSwap } from '@orionprotocol/contracts/lib/ethers-v5/Exchange.js'; -import { UniswapV3Pool__factory, ERC20__factory, SwapExecutor__factory, CurveRegistry__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; -import { BigNumber, ethers, type BigNumberish } from 'ethers'; -import { concat, defaultAbiCoder, type BytesLike } from 'ethers/lib/utils.js'; +import type { ExchangeWithGenericSwap } from '@orionprotocol/contracts/lib/ethers-v6/Exchange.js'; +import { UniswapV3Pool__factory, ERC20__factory, SwapExecutor__factory, CurveRegistry__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { ethers, type BigNumberish, type AddressLike, concat, type BytesLike } from 'ethers'; import { safeGet, SafeArray } from '../../utils/safeGetters.js'; import type Unit from '../index.js'; import { simpleFetch } from 'simple-typed-fetch'; -import type { PromiseOrValue } from '@orionprotocol/contracts/lib/ethers-v5/common.js'; +import { BigNumber } from 'bignumber.js'; const EXECUTOR_SWAP_FUNCTION = 'func_70LYiww' @@ -64,20 +63,24 @@ export default async function generateSwapCalldata({ flags: 0 } - const exchangeToNativeDecimals = async (token: PromiseOrValue) => { - token = await token - let decimals = 18 - if (token !== ethers.constants.AddressZero) { + const exchangeToNativeDecimals = async (token: AddressLike) => { + if (typeof token !== 'string' && 'getAddress' in token) { + token = await token.getAddress(); + } else { + token = await token + } + let decimals = 18n + if (token !== ethers.ZeroAddress) { const contract = ERC20__factory.connect(token, unit.provider) decimals = await contract.decimals() } - return BigNumber.from(amount).mul(BigNumber.from(10).pow(decimals)).div(BigNumber.from(10).pow(8)) + return BigNumber(amount.toString()).multipliedBy(BigNumber(10).pow(decimals.toString())).div(BigNumber(10).pow(8)) } const amountNativeDecimals = await exchangeToNativeDecimals(swapDescription.srcToken); path = SafeArray.from(path_).map((swapInfo) => { - if (swapInfo.assetIn == ethers.constants.AddressZero) swapInfo.assetIn = wethAddress - if (swapInfo.assetOut == ethers.constants.AddressZero) swapInfo.assetOut = wethAddress + if (swapInfo.assetIn == ethers.ZeroAddress) swapInfo.assetIn = wethAddress + if (swapInfo.assetOut == ethers.ZeroAddress) swapInfo.assetOut = wethAddress return swapInfo; }); @@ -94,16 +97,16 @@ export default async function generateSwapCalldata({ break; } case 'UniswapV3': { - calldata = await generateUni3Calls(amountNativeDecimals, exchangeContractAddress, path, unit.provider) + calldata = await generateUni3Calls(amountNativeDecimals.toString(), exchangeContractAddress, path, unit.provider) break; } case 'OrionV3': { - calldata = await generateOrion3Calls(amountNativeDecimals, exchangeContractAddress, path, unit.provider) + calldata = await generateOrion3Calls(amountNativeDecimals.toString(), exchangeContractAddress, path, unit.provider) break; } case 'Curve': { calldata = await generateCurveStableSwapCalls( - amountNativeDecimals, + amountNativeDecimals.toString(), exchangeContractAddress, swapExecutorContractAddress ?? '', path, @@ -134,7 +137,7 @@ export async function generateUni2Calls( currentSwap.pool, currentSwap.assetIn, currentSwap.assetOut, - defaultAbiCoder.encode(['uint256'], [concat(['0x03', nextSwap.pool])]), + ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [concat(['0x03', nextSwap.pool])]), ] ) calls.push(addCallParams(calldata)) @@ -145,7 +148,7 @@ export async function generateUni2Calls( lastSwap.pool, lastSwap.assetIn, lastSwap.assetOut, - defaultAbiCoder.encode(['uint256'], [concat(['0x03', exchangeAddress])]), + ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [concat(['0x03', exchangeAddress])]), ]) calls.push(addCallParams(calldata)) @@ -156,22 +159,22 @@ async function generateUni3Calls( amount: BigNumberish, exchangeContractAddress: string, path: SafeArray, - provider: ethers.providers.JsonRpcProvider + provider: ethers.JsonRpcApiProvider ) { - const encodedPools: BytesLike[] = [] + const encodedPools: string[] = [] for (const swap of path) { const pool = UniswapV3Pool__factory.connect(swap.pool, provider) const token0 = await pool.token0() const zeroForOne = token0.toLowerCase() === swap.assetIn.toLowerCase() - const unwrapWETH = swap.assetOut === ethers.constants.AddressZero + const unwrapWETH = swap.assetOut === ethers.ZeroAddress - let encodedPool = ethers.utils.solidityPack(['uint256'], [pool.address]) - encodedPool = ethers.utils.hexDataSlice(encodedPool, 1) + let encodedPool = ethers.solidityPacked(['uint256'], [await pool.getAddress()]) + encodedPool = ethers.dataSlice(encodedPool, 1) let firstByte = 0 if (unwrapWETH) firstByte += 32 if (!zeroForOne) firstByte += 128 - const encodedFirstByte = ethers.utils.solidityPack(['uint8'], [firstByte]) - encodedPool = ethers.utils.hexlify(ethers.utils.concat([encodedFirstByte, encodedPool])) + const encodedFirstByte = ethers.solidityPacked(['uint8'], [firstByte]) + encodedPool = ethers.hexlify(ethers.concat([encodedFirstByte, encodedPool])) encodedPools.push(encodedPool) } const executorInterface = SwapExecutor__factory.createInterface() @@ -185,22 +188,22 @@ async function generateOrion3Calls( amount: BigNumberish, exchangeContractAddress: string, path: SafeArray, - provider: ethers.providers.JsonRpcProvider + provider: ethers.JsonRpcApiProvider ) { - const encodedPools: BytesLike[] = [] + const encodedPools: string[] = [] for (const swap of path) { const pool = UniswapV3Pool__factory.connect(swap.pool, provider) const token0 = await pool.token0() const zeroForOne = token0.toLowerCase() === swap.assetIn.toLowerCase() - const unwrapWETH = swap.assetOut === ethers.constants.AddressZero + const unwrapWETH = swap.assetOut === ethers.ZeroAddress - let encodedPool = ethers.utils.solidityPack(['uint256'], [pool.address]) - encodedPool = ethers.utils.hexDataSlice(encodedPool, 1) + let encodedPool = ethers.solidityPacked(['uint256'], [await pool.getAddress()]) + encodedPool = ethers.dataSlice(encodedPool, 1) let firstByte = 0 if (unwrapWETH) firstByte += 32 if (!zeroForOne) firstByte += 128 - const encodedFirstByte = ethers.utils.solidityPack(['uint8'], [firstByte]) - encodedPool = ethers.utils.hexlify(ethers.utils.concat([encodedFirstByte, encodedPool])) + const encodedFirstByte = ethers.solidityPacked(['uint8'], [firstByte]) + encodedPool = ethers.hexlify(ethers.concat([encodedFirstByte, encodedPool])) encodedPools.push(encodedPool) } const executorInterface = SwapExecutor__factory.createInterface() @@ -215,7 +218,7 @@ async function generateCurveStableSwapCalls( exchangeContractAddress: string, executorAddress: string, path: SafeArray, - provider: ethers.providers.JsonRpcProvider, + provider: ethers.JsonRpcProvider, curveRegistry: string ) { if (path.length > 1) { @@ -231,12 +234,12 @@ async function generateCurveStableSwapCalls( const executorAllowance = await firstToken.allowance(executorAddress, swap.pool) const calls: BytesLike[] = [] - if (executorAllowance.lt(amount)) { + if (executorAllowance < BigInt(amount)) { const calldata = addCallParams( executorInterface.encodeFunctionData('safeApprove', [ swap.assetIn, swap.pool, - ethers.constants.MaxUint256 + ethers.MaxUint256 ]) ) calls.push(calldata) @@ -265,28 +268,28 @@ function addCallParams( if (callParams) { if (callParams.value !== undefined) { firstByte += 16 // 00010000 - const encodedValue = ethers.utils.solidityPack(['uint128'], [callParams.value]) - calldata = ethers.utils.hexlify(ethers.utils.concat([encodedValue, calldata])) + const encodedValue = ethers.solidityPacked(['uint128'], [callParams.value]) + calldata = ethers.hexlify(ethers.concat([encodedValue, calldata])) } if (callParams.target !== undefined) { firstByte += 32 // 00100000 - const encodedAddress = ethers.utils.solidityPack(['address'], [callParams.target]) - calldata = ethers.utils.hexlify(ethers.utils.concat([encodedAddress, calldata])) + const encodedAddress = ethers.solidityPacked(['address'], [callParams.target]) + calldata = ethers.hexlify(ethers.concat([encodedAddress, calldata])) } if (callParams.gaslimit !== undefined) { firstByte += 64 // 01000000 - const encodedGaslimit = ethers.utils.solidityPack(['uint32'], [callParams.gaslimit]) - calldata = ethers.utils.hexlify(ethers.utils.concat([encodedGaslimit, calldata])) + const encodedGaslimit = ethers.solidityPacked(['uint32'], [callParams.gaslimit]) + calldata = ethers.hexlify(ethers.concat([encodedGaslimit, calldata])) } if (callParams.isMandatory !== undefined) firstByte += 128 // 10000000 } - const encodedFirstByte = ethers.utils.solidityPack(['uint8'], [firstByte]) - calldata = ethers.utils.hexlify(ethers.utils.concat([encodedFirstByte, calldata])) + const encodedFirstByte = ethers.solidityPacked(['uint8'], [firstByte]) + calldata = ethers.hexlify(ethers.concat([encodedFirstByte, calldata])) return calldata } -async function generateCalls(calls: BytesLike[]) { +function generateCalls(calls: BytesLike[]) { const executorInterface = SwapExecutor__factory.createInterface() - return '0x' + executorInterface.encodeFunctionData(EXECUTOR_SWAP_FUNCTION, [ethers.constants.AddressZero, calls]).slice(74) + return '0x' + executorInterface.encodeFunctionData(EXECUTOR_SWAP_FUNCTION, [ethers.ZeroAddress, calls]).slice(74) } diff --git a/src/Unit/Exchange/getSwapInfo.ts b/src/Unit/Exchange/getSwapInfo.ts index aa3e315..02cd26d 100644 --- a/src/Unit/Exchange/getSwapInfo.ts +++ b/src/Unit/Exchange/getSwapInfo.ts @@ -51,7 +51,7 @@ export default async function getSwapInfo({ const allPrices = await simpleFetch(blockchainService.getPricesWithQuoteAsset)(); const gasPriceWei = await simpleFetch(blockchainService.getGasPriceWei)(); - const gasPriceGwei = ethers.utils.formatUnits(gasPriceWei, 'gwei').toString(); + const gasPriceGwei = ethers.formatUnits(gasPriceWei, 'gwei').toString(); const assetInAddress = assetToAddress[assetIn]; if (assetInAddress === undefined) throw new Error(`Asset '${assetIn}' not found`); @@ -101,15 +101,15 @@ export default async function getSwapInfo({ } if (route === 'pool') { - const transactionCost = ethers.BigNumber.from(SWAP_THROUGH_ORION_POOL_GAS_LIMIT).mul(gasPriceWei); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT) * BigInt(gasPriceWei); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); return { route, swapInfo, fee: { assetName: nativeCryptocurrencyName, - assetAddress: ethers.constants.AddressZero, + assetAddress: ethers.ZeroAddress, networkFeeInFeeAsset: denormalizedTransactionCost.toString(), protocolFeeInFeeAsset: undefined, }, @@ -134,7 +134,7 @@ export default async function getSwapInfo({ gasPriceGwei, feePercent, baseAssetAddress, - ethers.constants.AddressZero, + ethers.ZeroAddress, feeAssetAddress, allPrices.prices ); diff --git a/src/Unit/Exchange/swapLimit.ts b/src/Unit/Exchange/swapLimit.ts index 11a9d06..e9d7492 100644 --- a/src/Unit/Exchange/swapLimit.ts +++ b/src/Unit/Exchange/swapLimit.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import getAvailableSources from '../../utils/getAvailableFundsSources.js'; @@ -44,7 +44,7 @@ type PoolSwap = { amountOut: number through: 'pool' txHash: string - wait: (confirmations?: number | undefined) => Promise + wait: (confirmations?: number | undefined) => Promise } export type Swap = AggregatorOrder | PoolSwap; @@ -95,7 +95,7 @@ export default async function swapLimit({ const { factories } = await simpleFetch(blockchainService.getPoolsConfig)(); const poolExchangesList = factories !== undefined ? Object.keys(factories) : []; - const gasPriceGwei = ethers.utils.formatUnits(gasPriceWei, 'gwei').toString(); + const gasPriceGwei = ethers.formatUnits(gasPriceWei, 'gwei').toString(); const assetInAddress = assetToAddress[assetIn]; if (assetInAddress === undefined) throw new Error(`Asset '${assetIn}' not found`); @@ -108,7 +108,7 @@ export default async function swapLimit({ { [assetIn]: assetInAddress, [feeAsset]: feeAssetAddress, - [nativeCryptocurrency]: ethers.constants.AddressZero, + [nativeCryptocurrency]: ethers.ZeroAddress, }, aggregator, walletAddress, @@ -120,7 +120,7 @@ export default async function swapLimit({ balances, { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, provider, signer, @@ -271,7 +271,7 @@ export default async function swapLimit({ BigNumber.ROUND_FLOOR, ); - const unsignedSwapThroughOrionPoolTx = await exchangeContract.populateTransaction.swapThroughOrionPool( + const unsignedSwapThroughOrionPoolTx = await exchangeContract.swapThroughOrionPool.populateTransaction( amountSpendBlockchainParam, amountReceiveBlockchainParam, factoryAddress !== undefined @@ -280,8 +280,8 @@ export default async function swapLimit({ type === 'exactSpend', ); - unsignedSwapThroughOrionPoolTx.chainId = parseInt(chainId, 10); - unsignedSwapThroughOrionPoolTx.gasPrice = ethers.BigNumber.from(gasPriceWei); + unsignedSwapThroughOrionPoolTx.chainId = BigInt(parseInt(chainId, 10)); + unsignedSwapThroughOrionPoolTx.gasPrice = BigInt(gasPriceWei); unsignedSwapThroughOrionPoolTx.from = walletAddress; const amountSpendBN = new BigNumber(amountSpend); @@ -297,19 +297,19 @@ export default async function swapLimit({ NATIVE_CURRENCY_PRECISION, BigNumber.ROUND_CEIL, ); - unsignedSwapThroughOrionPoolTx.gasLimit = ethers.BigNumber.from(SWAP_THROUGH_ORION_POOL_GAS_LIMIT); + unsignedSwapThroughOrionPoolTx.gasLimit = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT); - const transactionCost = ethers.BigNumber.from(SWAP_THROUGH_ORION_POOL_GAS_LIMIT).mul(gasPriceWei); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT) * BigInt(gasPriceWei); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); balanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), - sources: getAvailableSources('network_fee', ethers.constants.AddressZero, 'pool'), + sources: getAvailableSources('network_fee', ethers.ZeroAddress, 'pool'), }); // if (value.gt(0)) { @@ -317,10 +317,10 @@ export default async function swapLimit({ // reason: 'Transaction value (extra amount)', // asset: { // name: nativeCryptocurrency, - // address: ethers.constants.AddressZero, + // address: ethers.ZeroAddress, // }, // amount: value.toString(), - // sources: getAvailableSources('amount', ethers.constants.AddressZero, 'pool'), + // sources: getAvailableSources('amount', ethers.ZeroAddress, 'pool'), // }); // } @@ -380,7 +380,7 @@ export default async function swapLimit({ gasPriceGwei, feePercent, baseAssetAddress, - ethers.constants.AddressZero, + ethers.ZeroAddress, feeAssetAddress, allPrices.prices, ); diff --git a/src/Unit/Exchange/swapMarket.ts b/src/Unit/Exchange/swapMarket.ts index 22ceaf1..90c6bd4 100644 --- a/src/Unit/Exchange/swapMarket.ts +++ b/src/Unit/Exchange/swapMarket.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import getAvailableSources from '../../utils/getAvailableFundsSources.js'; @@ -28,7 +28,7 @@ type PoolSwap = { amountOut: number through: 'pool' txHash: string - wait: (confirmations?: number | undefined) => Promise + wait: (confirmations?: number | undefined) => Promise } export type Swap = AggregatorOrder | PoolSwap; @@ -80,7 +80,7 @@ export default async function swapMarket({ const { factories } = await simpleFetch(blockchainService.getPoolsConfig)(); const poolExchangesList = factories !== undefined ? Object.keys(factories) : []; - const gasPriceGwei = ethers.utils.formatUnits(gasPriceWei, 'gwei').toString(); + const gasPriceGwei = ethers.formatUnits(gasPriceWei, 'gwei').toString(); const assetInAddress = assetToAddress[assetIn]; if (assetInAddress === undefined) throw new Error(`Asset '${assetIn}' not found`); @@ -93,7 +93,7 @@ export default async function swapMarket({ { [assetIn]: assetInAddress, [feeAsset]: feeAssetAddress, - [nativeCryptocurrency]: ethers.constants.AddressZero, + [nativeCryptocurrency]: ethers.ZeroAddress, }, aggregator, walletAddress, @@ -105,7 +105,7 @@ export default async function swapMarket({ balances, { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, provider, signer, @@ -221,17 +221,17 @@ export default async function swapMarket({ INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR, ); - const unsignedSwapThroughOrionPoolTx = await exchangeContract.populateTransaction.swapThroughOrionPool( - amountSpendBlockchainParam, - amountReceiveBlockchainParam, + const unsignedSwapThroughOrionPoolTx = await exchangeContract.swapThroughOrionPool.populateTransaction( + amountSpendBlockchainParam.toString(), + amountReceiveBlockchainParam.toString(), factoryAddress !== undefined ? [factoryAddress, ...pathAddresses] : pathAddresses, type === 'exactSpend', ); - unsignedSwapThroughOrionPoolTx.chainId = parseInt(chainId, 10); - unsignedSwapThroughOrionPoolTx.gasPrice = ethers.BigNumber.from(gasPriceWei); + unsignedSwapThroughOrionPoolTx.chainId = BigInt(chainId); + unsignedSwapThroughOrionPoolTx.gasPrice = BigInt(gasPriceWei); unsignedSwapThroughOrionPoolTx.from = walletAddress; const amountSpendBN = new BigNumber(amountSpend); @@ -247,19 +247,19 @@ export default async function swapMarket({ NATIVE_CURRENCY_PRECISION, BigNumber.ROUND_CEIL, ); - unsignedSwapThroughOrionPoolTx.gasLimit = ethers.BigNumber.from(SWAP_THROUGH_ORION_POOL_GAS_LIMIT); + unsignedSwapThroughOrionPoolTx.gasLimit = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT); - const transactionCost = ethers.BigNumber.from(SWAP_THROUGH_ORION_POOL_GAS_LIMIT).mul(gasPriceWei); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT) * BigInt(gasPriceWei); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); balanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), - sources: getAvailableSources('network_fee', ethers.constants.AddressZero, 'pool'), + sources: getAvailableSources('network_fee', ethers.ZeroAddress, 'pool'), }); // if (value.gt(0)) { @@ -267,10 +267,10 @@ export default async function swapMarket({ // reason: 'Transaction value (extra amount)', // asset: { // name: nativeCryptocurrency, - // address: ethers.constants.AddressZero, + // address: ethers.ZeroAddress, // }, // amount: value.toString(), - // sources: getAvailableSources('amount', ethers.constants.AddressZero, 'pool'), + // sources: getAvailableSources('amount', ethers.ZeroAddress, 'pool'), // }); // } @@ -338,7 +338,7 @@ export default async function swapMarket({ gasPriceGwei, feePercent, baseAssetAddress, - ethers.constants.AddressZero, + ethers.ZeroAddress, feeAssetAddress, allPrices.prices, ); diff --git a/src/Unit/Exchange/withdraw.ts b/src/Unit/Exchange/withdraw.ts index 90ac0df..9b5d2d7 100644 --- a/src/Unit/Exchange/withdraw.ts +++ b/src/Unit/Exchange/withdraw.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import type Unit from '../index.js'; @@ -50,7 +50,7 @@ export default async function withdraw({ const balances = await getBalances( { [asset]: assetAddress, - [nativeCryptocurrency]: ethers.constants.AddressZero, + [nativeCryptocurrency]: ethers.ZeroAddress, }, aggregator, walletAddress, @@ -62,7 +62,7 @@ export default async function withdraw({ balances, { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, provider, signer, @@ -78,27 +78,27 @@ export default async function withdraw({ sources: ['exchange'], }); - const unsignedTx = await exchangeContract.populateTransaction.withdraw( + const unsignedTx = await exchangeContract.withdraw.populateTransaction( assetAddress, - normalizeNumber(amount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR), + normalizeNumber(amount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString(), ); - unsignedTx.gasLimit = ethers.BigNumber.from(WITHDRAW_GAS_LIMIT); + unsignedTx.gasLimit = BigInt(WITHDRAW_GAS_LIMIT); - const transactionCost = ethers.BigNumber.from(unsignedTx.gasLimit).mul(gasPriceWei); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(unsignedTx.gasLimit) * BigInt(gasPriceWei); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); balanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), sources: ['wallet'], }); - unsignedTx.chainId = parseInt(chainId, 10); - unsignedTx.gasPrice = ethers.BigNumber.from(gasPriceWei); + unsignedTx.chainId = BigInt(chainId); + unsignedTx.gasPrice = BigInt(gasPriceWei); unsignedTx.from = walletAddress; await balanceGuard.check(true); @@ -107,11 +107,11 @@ export default async function withdraw({ unsignedTx.nonce = nonce; const signedTx = await signer.signTransaction(unsignedTx); - const txResponse = await provider.sendTransaction(signedTx); + const txResponse = await provider.broadcastTransaction(signedTx); console.log(`Withdraw tx sent: ${txResponse.hash}. Waiting for confirmation...`); try { const txReceipt = await txResponse.wait(); - if (txReceipt.status !== undefined) { + if (txReceipt?.status !== undefined) { console.log('Withdraw tx confirmed'); } else { console.log('Withdraw tx failed'); diff --git a/src/Unit/FarmingManager/index.ts b/src/Unit/FarmingManager/index.ts index a650d60..f4f7fbb 100644 --- a/src/Unit/FarmingManager/index.ts +++ b/src/Unit/FarmingManager/index.ts @@ -1,4 +1,4 @@ -import { Exchange__factory, IUniswapV2Pair__factory, IUniswapV2Router__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { Exchange__factory, IUniswapV2Pair__factory, IUniswapV2Router__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; import { simpleFetch } from 'simple-typed-fetch'; @@ -71,7 +71,7 @@ export default class FarmingManager { { [assetA]: assetAAddress, [assetB]: assetBAddress, - [nativeCryptocurrency]: ethers.constants.AddressZero, + [nativeCryptocurrency]: ethers.ZeroAddress, }, this.unit.aggregator, walletAddress, @@ -81,7 +81,7 @@ export default class FarmingManager { const balanceGuard = new BalanceGuard( balances, { - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, name: nativeCryptocurrency, }, this.unit.provider, @@ -109,13 +109,13 @@ export default class FarmingManager { const assetAReserve = pairTokensIsInversed ? _reserve1 : _reserve0; const assetBReserve = pairTokensIsInversed ? _reserve0 : _reserve1; - const denormalizedAssetAReserve = denormalizeNumber(assetAReserve, assetADecimals); - const denormalizedAssetBReserve = denormalizeNumber(assetBReserve, assetBDecimals); + const denormalizedAssetAReserve = denormalizeNumber(assetAReserve, BigInt(assetADecimals)); + const denormalizedAssetBReserve = denormalizeNumber(assetBReserve, BigInt(assetBDecimals)); const price = denormalizedAssetBReserve.div(denormalizedAssetAReserve); - const assetAIsNativeCurrency = assetAAddress === ethers.constants.AddressZero; - const assetBIsNativeCurrency = assetBAddress === ethers.constants.AddressZero; + const assetAIsNativeCurrency = assetAAddress === ethers.ZeroAddress; + const assetBIsNativeCurrency = assetBAddress === ethers.ZeroAddress; const assetAAmount = assetA === amountAsset ? amountBN : amountBN.div(price); const assetBAmount = assetA === amountAsset ? amountBN.multipliedBy(price) : amountBN; @@ -145,33 +145,33 @@ export default class FarmingManager { sources: ['exchange', 'wallet'], }); - const unsignedTx = await exchangeContract.populateTransaction.withdrawToPool( + const unsignedTx = await exchangeContract.withdrawToPool.populateTransaction( assetBIsNativeCurrency ? assetBAddress : assetAAddress, assetBIsNativeCurrency ? assetAAddress : assetBAddress, assetBIsNativeCurrency - ? normalizeNumber(assetBAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR) - : normalizeNumber(assetAAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR), + ? normalizeNumber(assetBAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString() + : normalizeNumber(assetAAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString(), assetBIsNativeCurrency - ? normalizeNumber(assetAAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR) - : normalizeNumber(assetBAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR), + ? normalizeNumber(assetAAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString() + : normalizeNumber(assetBAmount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString(), assetBIsNativeCurrency - ? normalizeNumber(assetBAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR) - : normalizeNumber(assetAAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR), + ? normalizeNumber(assetBAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString() + : normalizeNumber(assetAAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString(), assetBIsNativeCurrency - ? normalizeNumber(assetAAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR) - : normalizeNumber(assetBAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR), + ? normalizeNumber(assetAAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString() + : normalizeNumber(assetBAmountWithSlippage, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString(), ); - const gasPrice = await this.unit.provider.getGasPrice(); + const { gasPrice, maxFeePerGas } = await this.unit.provider.getFeeData(); - const transactionCost = ethers.BigNumber.from(ADD_LIQUIDITY_GAS_LIMIT).mul(gasPrice); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(ADD_LIQUIDITY_GAS_LIMIT) * (gasPrice ?? 0n); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); balanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), sources: ['wallet'], @@ -195,8 +195,11 @@ export default class FarmingManager { } } + if (gasPrice !== null && maxFeePerGas !== null) { + unsignedTx.gasPrice = gasPrice; + unsignedTx.maxFeePerGas = maxFeePerGas; + } unsignedTx.chainId = network.chainId; - unsignedTx.gasPrice = gasPrice; unsignedTx.nonce = nonce; unsignedTx.from = walletAddress; const gasLimit = await this.unit.provider.estimateGas(unsignedTx); @@ -205,13 +208,13 @@ export default class FarmingManager { await balanceGuard.check(true); const signedTx = await signer.signTransaction(unsignedTx); - const txResponse = await this.unit.provider.sendTransaction(signedTx); + const txResponse = await this.unit.provider.broadcastTransaction(signedTx); console.log(`Add liquidity tx sent: ${txResponse.hash}. Waiting for confirmation...`); const txReceipt = await txResponse.wait(); - if (txReceipt.status === 1) { - console.log(`Add liquidity tx confirmed: ${txReceipt.transactionHash}`); + if (txReceipt?.status === 1) { + console.log(`Add liquidity tx confirmed: ${txReceipt.hash}`); } else { - console.log(`Add liquidity tx failed: ${txReceipt.transactionHash}`); + console.log(`Add liquidity tx failed: ${txReceipt?.hash}`); } } @@ -254,7 +257,7 @@ export default class FarmingManager { [assetA]: assetAAddress, [assetB]: assetBAddress, [`${poolName} LP Token`]: pool.lpTokenAddress, - [nativeCryptocurrency]: ethers.constants.AddressZero, + [nativeCryptocurrency]: ethers.ZeroAddress, }, this.unit.aggregator, walletAddress, @@ -265,7 +268,7 @@ export default class FarmingManager { const balanceGuard = new BalanceGuard( balances, { - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, name: nativeCryptocurrency, }, this.unit.provider, @@ -298,8 +301,8 @@ export default class FarmingManager { const assetAReserve = pairTokensIsInversed ? _reserve1 : _reserve0; const assetBReserve = pairTokensIsInversed ? _reserve0 : _reserve1; - const denormalizedAssetAReserve = denormalizeNumber(assetAReserve, assetADecimals); - const denormalizedAssetBReserve = denormalizeNumber(assetBReserve, assetBDecimals); + const denormalizedAssetAReserve = denormalizeNumber(assetAReserve, BigInt(assetADecimals)); + const denormalizedAssetBReserve = denormalizeNumber(assetBReserve, BigInt(assetBDecimals)); const denormalizedUserPooledAssetA = denormalizedAssetAReserve.multipliedBy(userShare); const denormalizedUserPooledAssetB = denormalizedAssetBReserve.multipliedBy(userShare); @@ -307,8 +310,8 @@ export default class FarmingManager { const denormalizedUserPooledAssetAWithSlippage = denormalizedUserPooledAssetA.multipliedBy(1 - ADD_LIQUIDITY_SLIPPAGE); const denormalizedUserPooledAssetBWithSlippage = denormalizedUserPooledAssetB.multipliedBy(1 - ADD_LIQUIDITY_SLIPPAGE); - const assetAIsNativeCurrency = assetAAddress === ethers.constants.AddressZero; - const assetBIsNativeCurrency = assetBAddress === ethers.constants.AddressZero; + const assetAIsNativeCurrency = assetAAddress === ethers.ZeroAddress; + const assetBIsNativeCurrency = assetBAddress === ethers.ZeroAddress; balanceGuard.registerRequirement({ reason: `${poolName} liquidity`, @@ -321,9 +324,9 @@ export default class FarmingManager { sources: ['wallet'], }); - let unsignedTx: ethers.PopulatedTransaction; + let unsignedTx: ethers.TransactionLike; if (assetAIsNativeCurrency || assetBIsNativeCurrency) { - unsignedTx = await routerContract.populateTransaction.removeLiquidityETH( + unsignedTx = await routerContract.removeLiquidityETH.populateTransaction( assetBIsNativeCurrency ? assetAAddress : assetBAddress, // token lpTokenUserBalance, assetBIsNativeCurrency @@ -331,28 +334,28 @@ export default class FarmingManager { denormalizedUserPooledAssetAWithSlippage, assetADecimals, BigNumber.ROUND_FLOOR, - ) + ).toString() : normalizeNumber( denormalizedUserPooledAssetBWithSlippage, assetBDecimals, BigNumber.ROUND_FLOOR, - ), // token min + ).toString(), // token min assetBIsNativeCurrency ? normalizeNumber( denormalizedUserPooledAssetBWithSlippage, assetBDecimals, BigNumber.ROUND_FLOOR, - ) + ).toString() : normalizeNumber( denormalizedUserPooledAssetAWithSlippage, assetADecimals, BigNumber.ROUND_FLOOR, - ), // eth min + ).toString(), // eth min walletAddress, Math.floor(Date.now() / 1000) + 60 * 20, ); } else { - unsignedTx = await routerContract.populateTransaction.removeLiquidity( + unsignedTx = await routerContract.removeLiquidity.populateTransaction( assetAAddress, assetBAddress, lpTokenUserBalance, @@ -360,27 +363,27 @@ export default class FarmingManager { denormalizedUserPooledAssetAWithSlippage, assetADecimals, BigNumber.ROUND_FLOOR, - ), + ).toString(), normalizeNumber( denormalizedUserPooledAssetBWithSlippage, assetBDecimals, BigNumber.ROUND_FLOOR, - ), + ).toString(), walletAddress, Math.floor(Date.now() / 1000) + 60 * 20, ); } - const gasPrice = await this.unit.provider.getGasPrice(); + const { gasPrice } = await this.unit.provider.getFeeData() - const transactionCost = ethers.BigNumber.from(ADD_LIQUIDITY_GAS_LIMIT).mul(gasPrice); - const denormalizedTransactionCost = denormalizeNumber(transactionCost, NATIVE_CURRENCY_PRECISION); + const transactionCost = BigInt(ADD_LIQUIDITY_GAS_LIMIT) * (gasPrice ?? 0n); + const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION)); balanceGuard.registerRequirement({ reason: 'Network fee', asset: { name: nativeCryptocurrency, - address: ethers.constants.AddressZero, + address: ethers.ZeroAddress, }, amount: denormalizedTransactionCost.toString(), sources: ['wallet'], @@ -398,13 +401,13 @@ export default class FarmingManager { unsignedTx.gasLimit = gasLimit; const signedTx = await signer.signTransaction(unsignedTx); - const txResponse = await this.unit.provider.sendTransaction(signedTx); + const txResponse = await this.unit.provider.broadcastTransaction(signedTx); console.log(`Remove all liquidity tx sent: ${txResponse.hash}. Waiting for confirmation...`); const txReceipt = await txResponse.wait(); - if (txReceipt.status === 1) { - console.log(`Remove all liquidity tx confirmed: ${txReceipt.transactionHash}`); + if (txReceipt?.status === 1) { + console.log(`Remove all liquidity tx confirmed: ${txReceipt.hash}`); } else { - console.log(`Remove all liquidity tx failed: ${txReceipt.transactionHash}`); + console.log(`Remove all liquidity tx failed: ${txReceipt?.hash}`); } } } diff --git a/src/Unit/index.ts b/src/Unit/index.ts index c8b4462..e0ea40f 100644 --- a/src/Unit/index.ts +++ b/src/Unit/index.ts @@ -7,6 +7,7 @@ import Exchange from './Exchange/index.js'; import FarmingManager from './FarmingManager/index.js'; import { chains, envs } from '../config/index.js'; import type { networkCodes } from '../constants/index.js'; +import type { JsonRpcProvider } from 'ethers'; type KnownConfig = { env: KnownEnv @@ -18,7 +19,7 @@ export default class Unit { public readonly chainId: SupportedChainId; - public readonly provider: ethers.providers.StaticJsonRpcProvider; + public readonly provider: JsonRpcProvider; public readonly blockchainService: BlockchainService; @@ -65,13 +66,12 @@ export default class Unit { } const chainInfo = chains[config.chainId]; if (!chainInfo) throw new Error('Chain info is required'); - this.chainId = config.chainId; this.networkCode = chainInfo.code; this.contracts = chainInfo.contracts const intNetwork = parseInt(this.chainId, 10); if (Number.isNaN(intNetwork)) throw new Error('Invalid chainId (not a number)' + this.chainId); - this.provider = new ethers.providers.StaticJsonRpcProvider(this.config.nodeJsonRpc, intNetwork); + this.provider = new ethers.JsonRpcProvider(this.config.nodeJsonRpc, intNetwork); this.provider.pollingInterval = 1000; this.blockchainService = new BlockchainService(this.config.services.blockchainService.http, this.config.basicAuth); diff --git a/src/__tests__/basic.test.ts b/src/__tests__/basic.test.ts index 6f8241b..0643669 100644 --- a/src/__tests__/basic.test.ts +++ b/src/__tests__/basic.test.ts @@ -195,7 +195,7 @@ describe('Orion', () => { expect(unit.aggregator.ws.api).toBe(`ws://localhost:${server1.port}/v1`); expect(unit.blockchainService.api).toBe(blockchainServiceAPI); expect(unit.priceFeed.api).toBe(orionPriceFeedAPI + '/price-feed'); - expect(unit.provider.connection.url).toBe('https://cloudflare-eth.com/'); + expect(unit.provider._getConnection().url).toBe('https://cloudflare-eth.com/'); const info = await simpleFetch(unit.blockchainService.getInfo)(); expect(info).toBeDefined(); @@ -246,7 +246,7 @@ describe('Orion', () => { }); const bscUnit = orion.units[SupportedChainId.BSC_TESTNET] - expect(bscUnit?.provider.connection.url).toBe('https://data-seed-prebsc-1-s1.binance.org:8545/'); + expect(bscUnit?.provider._getConnection().url).toBe('https://data-seed-prebsc-1-s1.binance.org:8545/'); expect(orion.referralSystem.api).toBe('https://zxczxc.orionprotocol.io'); }); @@ -312,7 +312,7 @@ describe('Orion', () => { const network = await unitBSC.provider.getNetwork(); expect(network.chainId).toBe(97); - const zeroAddressWithout0x = ethers.constants.AddressZero.slice(2); + const zeroAddressWithout0x = ethers.ZeroAddress.slice(2); expect(simpleFetch(orion.referralSystem.getMiniStats)(zeroAddressWithout0x)) .rejects .toThrow('empty reward history'); diff --git a/src/__tests__/fee.test.ts b/src/__tests__/fee.test.ts index eec8eeb..1cf8b14 100644 --- a/src/__tests__/fee.test.ts +++ b/src/__tests__/fee.test.ts @@ -83,7 +83,7 @@ describe('Fee calculation', () => { const gasPriceGwei = 3; const feePercent = 0.2; const baseAssetAddress = '0xcb2951e90d8dcf16e1fa84ac0c83f48906d6a744'; - const baseCurrencyAddress = ethers.constants.AddressZero; + const baseCurrencyAddress = ethers.ZeroAddress; const feeAssetAddress = '0xf223eca06261145b3287a0fefd8cfad371c7eb34'; const { totalFeeInFeeAsset: ornTotalFee } = calculateFeeInFeeAsset( amount, diff --git a/src/addressSchema.ts b/src/addressSchema.ts index 982eda1..2eb9262 100644 --- a/src/addressSchema.ts +++ b/src/addressSchema.ts @@ -1,7 +1,7 @@ import { ethers } from 'ethers'; import { z } from 'zod'; -const addressSchema = z.string().refine(ethers.utils.isAddress, (value) => ({ +const addressSchema = z.string().refine(ethers.isAddress, (value) => ({ message: `Should be an address, got ${value}`, })); diff --git a/src/crypt/hashOrder.ts b/src/crypt/hashOrder.ts index 2106514..23bc474 100644 --- a/src/crypt/hashOrder.ts +++ b/src/crypt/hashOrder.ts @@ -1,7 +1,7 @@ import { ethers } from 'ethers'; import type { Order } from '../types.js'; -const hashOrder = (order: Order) => ethers.utils.solidityKeccak256( +const hashOrder = (order: Order) => ethers.solidityPackedKeccak256( [ 'uint8', 'address', diff --git a/src/crypt/signCancelOrder.ts b/src/crypt/signCancelOrder.ts index 1ed3cd1..ff49d22 100644 --- a/src/crypt/signCancelOrder.ts +++ b/src/crypt/signCancelOrder.ts @@ -1,6 +1,5 @@ import type { TypedDataSigner } from '@ethersproject/abstract-signer'; -import type { ethers } from 'ethers'; -import { joinSignature, splitSignature } from 'ethers/lib/utils.js'; +import { ethers } from 'ethers'; import CANCEL_ORDER_TYPES from '../constants/cancelOrderTypes.js'; import type { CancelOrderRequest, SignedCancelOrderRequest, SupportedChainId } from '../types.js'; import getDomainData from './getDomainData.js'; @@ -26,7 +25,7 @@ const signCancelOrder = async ( const signature = usePersonalSign ? await signCancelOrderPersonal(cancelOrderRequest, signer) // https://docs.ethers.io/v5/api/signer/#Signer-signTypedData - : await typedDataSigner._signTypedData( + : await typedDataSigner.signTypedData( getDomainData(chainId), CANCEL_ORDER_TYPES, cancelOrderRequest, @@ -34,7 +33,7 @@ const signCancelOrder = async ( // https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265 // "Signature's v was always send as 27 or 28, but from Ledger was 0 or 1" - const fixedSignature = joinSignature(splitSignature(signature)); + const fixedSignature = ethers.Signature.from(signature).serialized; // if (!fixedSignature) throw new Error("Can't sign order cancel"); diff --git a/src/crypt/signCancelOrderPersonal.ts b/src/crypt/signCancelOrderPersonal.ts index c53975a..2837c3b 100644 --- a/src/crypt/signCancelOrderPersonal.ts +++ b/src/crypt/signCancelOrderPersonal.ts @@ -1,5 +1,4 @@ import { ethers } from 'ethers'; -import { arrayify, joinSignature, splitSignature } from 'ethers/lib/utils.js'; import type { CancelOrderRequest } from '../types.js'; const signCancelOrderPersonal = async ( @@ -7,14 +6,14 @@ const signCancelOrderPersonal = async ( signer: ethers.Signer, ) => { const types = ['string', 'string', 'address']; - const message = ethers.utils.solidityKeccak256( + const message = ethers.solidityPackedKeccak256( types, ['cancelOrder', cancelOrderRequest.id, cancelOrderRequest.senderAddress], ); - const signature = await signer.signMessage(arrayify(message)); + const signature = await signer.signMessage(ethers.getBytes(message)); // NOTE: metamask broke sig.v value and we fix it in next line - return joinSignature(splitSignature(signature)); + return ethers.Signature.from(signature).serialized; }; export default signCancelOrderPersonal; diff --git a/src/crypt/signOrder.ts b/src/crypt/signOrder.ts index 8df5414..90e59df 100644 --- a/src/crypt/signOrder.ts +++ b/src/crypt/signOrder.ts @@ -1,7 +1,6 @@ import type { TypedDataSigner } from '@ethersproject/abstract-signer'; import { BigNumber } from 'bignumber.js'; -import type { ethers } from 'ethers'; -import { joinSignature, splitSignature } from 'ethers/lib/utils.js'; +import { ethers } from 'ethers'; import { INTERNAL_PROTOCOL_PRECISION } from '../constants/index.js'; import ORDER_TYPES from '../constants/orderTypes.js'; import type { Order, SignedOrder, SupportedChainId } from '../types.js'; @@ -37,21 +36,21 @@ export const signOrder = async ( baseAsset: baseAssetAddr, quoteAsset: quoteAssetAddr, matcherFeeAsset: serviceFeeAssetAddr, - amount: normalizeNumber( + amount: Number(normalizeNumber( amount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR, - ).toNumber(), - price: normalizeNumber( + )), + price: Number(normalizeNumber( price, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR, - ).toNumber(), - matcherFee: normalizeNumber( + )), + matcherFee: Number(normalizeNumber( matcherFee, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_CEIL, // ROUND_CEIL because we don't want get "not enough fee" error - ).toNumber(), + )), nonce, expiration, buySide: side === 'BUY' ? 1 : 0, @@ -63,7 +62,7 @@ export const signOrder = async ( const signature = usePersonalSign ? await signOrderPersonal(order, signer) - : await typedDataSigner._signTypedData( + : await typedDataSigner.signTypedData( getDomainData(chainId), ORDER_TYPES, order, @@ -71,7 +70,7 @@ export const signOrder = async ( // https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265 // "Signature's v was always send as 27 or 28, but from Ledger was 0 or 1" - const fixedSignature = joinSignature(splitSignature(signature)); + const fixedSignature = ethers.Signature.from(signature).serialized; // if (!fixedSignature) throw new Error("Can't sign order"); diff --git a/src/crypt/signOrderPersonal.ts b/src/crypt/signOrderPersonal.ts index 82c163d..4573e96 100644 --- a/src/crypt/signOrderPersonal.ts +++ b/src/crypt/signOrderPersonal.ts @@ -1,10 +1,8 @@ import { ethers } from 'ethers'; import type { Order } from '../types.js'; -const { arrayify, joinSignature, splitSignature } = ethers.utils; - const signOrderPersonal = async (order: Order, signer: ethers.Signer) => { - const message = ethers.utils.solidityKeccak256( + const message = ethers.solidityPackedKeccak256( [ 'string', 'address', 'address', 'address', 'address', 'address', 'uint64', 'uint64', 'uint64', 'uint64', 'uint64', 'uint8', @@ -24,10 +22,10 @@ const signOrderPersonal = async (order: Order, signer: ethers.Signer) => { order.buySide, ], ); - const signature = await signer.signMessage(arrayify(message)); + const signature = await signer.signMessage(ethers.getBytes(message)); // NOTE: metamask broke sig.v value and we fix it in next line - return joinSignature(splitSignature(signature)); + return ethers.Signature.from(signature).serialized; }; export default signOrderPersonal; diff --git a/src/services/Aggregator/index.ts b/src/services/Aggregator/index.ts index 6da1b14..f30d7cf 100644 --- a/src/services/Aggregator/index.ts +++ b/src/services/Aggregator/index.ts @@ -74,13 +74,13 @@ class Aggregator { } getOrder = (orderId: string, owner?: string) => { - if (!ethers.utils.isHexString(orderId)) { + if (!ethers.isHexString(orderId)) { throw new Error(`Invalid order id: ${orderId}. Must be a hex string`); } const url = new URL(`${this.apiUrl}/api/v1/order`); url.searchParams.append('orderId', orderId); if (owner !== undefined) { - if (!ethers.utils.isAddress(owner)) { + if (!ethers.isAddress(owner)) { throw new Error(`Invalid owner address: ${owner}`); } url.searchParams.append('owner', owner); diff --git a/src/services/Aggregator/schemas/orderSchema.ts b/src/services/Aggregator/schemas/orderSchema.ts index 0f2accf..77d2347 100644 --- a/src/services/Aggregator/schemas/orderSchema.ts +++ b/src/services/Aggregator/schemas/orderSchema.ts @@ -3,22 +3,22 @@ import { z } from 'zod'; import { exchanges, orderStatuses, subOrderStatuses } from '../../../constants/index.js'; const blockchainOrderSchema = z.object({ - id: z.string().refine(ethers.utils.isHexString, (value) => ({ + id: z.string().refine(ethers.isHexString, (value) => ({ message: `blockchainOrder.id must be a hex string, got ${value}`, })), - senderAddress: z.string().refine(ethers.utils.isAddress, (value) => ({ + senderAddress: z.string().refine(ethers.isAddress, (value) => ({ message: `blockchainOrder.senderAddress must be an address, got ${value}`, })), - matcherAddress: z.string().refine(ethers.utils.isAddress, (value) => ({ + matcherAddress: z.string().refine(ethers.isAddress, (value) => ({ message: `blockchainOrder.matcherAddress must be an address, got ${value}`, })), - baseAsset: z.string().refine(ethers.utils.isAddress, (value) => ({ + baseAsset: z.string().refine(ethers.isAddress, (value) => ({ message: `blockchainOrder.baseAsset must be an address, got ${value}`, })), - quoteAsset: z.string().refine(ethers.utils.isAddress, (value) => ({ + quoteAsset: z.string().refine(ethers.isAddress, (value) => ({ message: `blockchainOrder.quoteAsset must be an address, got ${value}`, })), - matcherFeeAsset: z.string().refine(ethers.utils.isAddress, (value) => ({ + matcherFeeAsset: z.string().refine(ethers.isAddress, (value) => ({ message: `blockchainOrder.matcherFeeAsset must be an address, got ${value}`, })), amount: z.number().int().nonnegative(), @@ -27,7 +27,7 @@ const blockchainOrderSchema = z.object({ nonce: z.number(), expiration: z.number(), buySide: z.union([z.literal(1), z.literal(0)]), - signature: z.string().refine(ethers.utils.isHexString, (value) => ({ + signature: z.string().refine(ethers.isHexString, (value) => ({ message: `blockchainOrder.signature must be a hex string, got ${value}`, })).nullable(), isPersonalSign: z.boolean(), @@ -53,7 +53,7 @@ const baseOrderSchema = z.object({ amount: z.number().nonnegative(), remainingAmount: z.number().nonnegative(), price: z.number().nonnegative(), - sender: z.string().refine(ethers.utils.isAddress, (value) => ({ + sender: z.string().refine(ethers.isAddress, (value) => ({ message: `order.sender must be an address, got ${value}`, })), filledAmount: z.number().nonnegative(), @@ -77,13 +77,13 @@ const brokerAddressSchema = z.enum([ 'SELF_BROKER' ]) .or(selfBrokerSchema) - .or(z.string().refine(ethers.utils.isAddress, (value) => ({ + .or(z.string().refine(ethers.isAddress, (value) => ({ message: `subOrder.subOrders.[n].brokerAddress must be an address, got ${value}`, }))); const subOrderSchema = baseOrderSchema.extend({ price: z.number(), id: z.number(), - parentOrderId: z.string().refine(ethers.utils.isHexString, (value) => ({ + parentOrderId: z.string().refine(ethers.isHexString, (value) => ({ message: `subOrder.parentOrderId must be a hex string, got ${value}`, })), exchange: z.string(), @@ -98,11 +98,11 @@ const subOrderSchema = baseOrderSchema.extend({ }); const orderSchema = z.object({ - orderId: z.string().refine(ethers.utils.isHexString, (value) => ({ + orderId: z.string().refine(ethers.isHexString, (value) => ({ message: `orderId must be a hex string, got ${value}`, })), order: baseOrderSchema.extend({ - id: z.string().refine(ethers.utils.isHexString, (value) => ({ + id: z.string().refine(ethers.isHexString, (value) => ({ message: `order.id must be a hex string, got ${value}`, })), fee: z.number().nonnegative(), diff --git a/src/services/BlockchainService/schemas/atomicHistorySchema.ts b/src/services/BlockchainService/schemas/atomicHistorySchema.ts index 504145b..0123c1a 100644 --- a/src/services/BlockchainService/schemas/atomicHistorySchema.ts +++ b/src/services/BlockchainService/schemas/atomicHistorySchema.ts @@ -16,9 +16,9 @@ const baseAtomicHistoryItem = z.object({ _id: z.string(), __v: z.number(), asset: z.string(), - sender: z.string().refine(ethers.utils.isAddress), - secretHash: z.string().refine(ethers.utils.isHexString), - receiver: z.string().refine(ethers.utils.isAddress).optional(), + sender: z.string().refine(ethers.isAddress), + secretHash: z.string().refine(ethers.isHexString), + receiver: z.string().refine(ethers.isAddress).optional(), secret: z.string().optional(), }); diff --git a/src/services/ReferralSystem/schemas/contractsAddressesSchema.ts b/src/services/ReferralSystem/schemas/contractsAddressesSchema.ts index caa3a85..5004366 100644 --- a/src/services/ReferralSystem/schemas/contractsAddressesSchema.ts +++ b/src/services/ReferralSystem/schemas/contractsAddressesSchema.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; import { SupportedChainId } from '../../../types.js'; -import { isAddress } from 'ethers/lib/utils.js'; +import { ethers } from 'ethers'; const contractsAddressesSchema = z.record( z.nativeEnum(SupportedChainId), - z.string().refine(isAddress) + z.string().refine(ethers.isAddress) ); export default contractsAddressesSchema; diff --git a/src/utils/calculateNetworkFee.ts b/src/utils/calculateNetworkFee.ts index 8f348e9..5a84809 100644 --- a/src/utils/calculateNetworkFee.ts +++ b/src/utils/calculateNetworkFee.ts @@ -8,6 +8,6 @@ export default function calculateNetworkFee( ) { const networkFeeGwei = new BigNumber(gasPriceGwei).multipliedBy(gasLimit); - const bn = new BigNumber(ethers.utils.parseUnits(networkFeeGwei.toString(), 'gwei').toString()); + const bn = new BigNumber(ethers.parseUnits(networkFeeGwei.toString(), 'gwei').toString()); return bn.div(new BigNumber(10).pow(NATIVE_CURRENCY_PRECISION)).toString(); } diff --git a/src/utils/checkIsToken.ts b/src/utils/checkIsToken.ts index 20d1f5d..5be176a 100644 --- a/src/utils/checkIsToken.ts +++ b/src/utils/checkIsToken.ts @@ -1,8 +1,8 @@ -import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import { ethers } from 'ethers'; import invariant from 'tiny-invariant'; -const checkIsToken = async (address: string, provider?: ethers.providers.Provider) => { +const checkIsToken = async (address: string, provider?: ethers.Provider) => { invariant(provider, 'No provider for token checking'); const tokenContract = ERC20__factory.connect(address, provider); try { @@ -12,7 +12,7 @@ const checkIsToken = async (address: string, provider?: ethers.providers.Provide tokenContract.symbol(), tokenContract.decimals(), tokenContract.totalSupply(), - tokenContract.balanceOf(ethers.constants.AddressZero), + tokenContract.balanceOf(ethers.ZeroAddress), ], ); diff --git a/src/utils/denormalizeNumber.ts b/src/utils/denormalizeNumber.ts index 6ebffd9..86bce3c 100644 --- a/src/utils/denormalizeNumber.ts +++ b/src/utils/denormalizeNumber.ts @@ -1,5 +1,4 @@ import { BigNumber } from 'bignumber.js'; -import type { ethers } from 'ethers'; /** * Converts normalized blockchain ("machine-readable") number to denormalized ("human-readable") number. @@ -7,8 +6,8 @@ import type { ethers } from 'ethers'; * @param decimals Blockchain asset precision * @returns BigNumber */ -export default function denormalizeNumber(input: ethers.BigNumber, decimals: BigNumber.Value) { - const decimalsBN = new BigNumber(decimals); +export default function denormalizeNumber(input: bigint, decimals: bigint) { + const decimalsBN = new BigNumber(decimals.toString()); if (!decimalsBN.isInteger()) throw new Error(`Decimals '${decimalsBN.toString()}' is not an integer`); return new BigNumber(input.toString()).div(new BigNumber(10).pow(decimalsBN)); } diff --git a/src/utils/generateSecret.ts b/src/utils/generateSecret.ts index d1ff475..7caabca 100644 --- a/src/utils/generateSecret.ts +++ b/src/utils/generateSecret.ts @@ -45,7 +45,7 @@ function isomorphicCryptoRandomBytes(size: number): Uint8Array { const generateSecret = () => { const RANDOM_BITS = 256; const rand = isomorphicCryptoRandomBytes(RANDOM_BITS); - const secret = ethers.utils.keccak256(rand); + const secret = ethers.keccak256(rand); return secret; }; diff --git a/src/utils/getAvailableFundsSources.ts b/src/utils/getAvailableFundsSources.ts index e552576..4b490ec 100644 --- a/src/utils/getAvailableFundsSources.ts +++ b/src/utils/getAvailableFundsSources.ts @@ -8,7 +8,7 @@ export default function getAvailableFundsSources( ): Source[] { switch (route) { case 'aggregator': - if (assetAddress === ethers.constants.AddressZero) return ['exchange']; // We can't take native crypto from wallet + if (assetAddress === ethers.ZeroAddress) return ['exchange']; // We can't take native crypto from wallet return ['exchange', 'wallet']; // We can take any token amount from exchange + wallet. Order is important! case 'pool': if (expenseType === 'network_fee') return ['wallet']; // Network fee is always taken from wallet diff --git a/src/utils/getBalance.ts b/src/utils/getBalance.ts index f63b28c..861d0d8 100644 --- a/src/utils/getBalance.ts +++ b/src/utils/getBalance.ts @@ -1,5 +1,5 @@ -import type { Exchange } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; -import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import type { Exchange } from '@orionprotocol/contracts/lib/ethers-v6'; +import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6'; import type { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; import { INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION } from '../constants/index.js'; @@ -12,11 +12,11 @@ export default async function getBalance( assetAddress: string, walletAddress: string, exchangeContract: Exchange, - provider: ethers.providers.Provider, + provider: ethers.Provider, ) { - const assetIsNativeCryptocurrency = assetAddress === ethers.constants.AddressZero; + const assetIsNativeCryptocurrency = assetAddress === ethers.ZeroAddress; - let assetWalletBalance: ethers.BigNumber | undefined; + let assetWalletBalance: bigint | undefined; let denormalizedAssetInWalletBalance: BigNumber | undefined; @@ -28,10 +28,10 @@ export default async function getBalance( denormalizedAssetInWalletBalance = denormalizeNumber(assetWalletBalance, assetDecimals); } else { assetWalletBalance = await provider.getBalance(walletAddress); - denormalizedAssetInWalletBalance = denormalizeNumber(assetWalletBalance, NATIVE_CURRENCY_PRECISION); + denormalizedAssetInWalletBalance = denormalizeNumber(assetWalletBalance, BigInt(NATIVE_CURRENCY_PRECISION)); } const assetContractBalance = await exchangeContract.getBalance(assetAddress, walletAddress); - const denormalizedAssetInContractBalance = denormalizeNumber(assetContractBalance, INTERNAL_PROTOCOL_PRECISION); + const denormalizedAssetInContractBalance = denormalizeNumber(assetContractBalance, BigInt(INTERNAL_PROTOCOL_PRECISION)); const denormalizedAssetLockedBalanceResult = await aggregator.getLockedBalance(walletAddress, assetName); if (denormalizedAssetLockedBalanceResult.isErr()) { throw new Error(denormalizedAssetLockedBalanceResult.error.message); diff --git a/src/utils/getBalances.ts b/src/utils/getBalances.ts index 8475b1c..f9e5390 100644 --- a/src/utils/getBalances.ts +++ b/src/utils/getBalances.ts @@ -1,4 +1,4 @@ -import type { Exchange } from '@orionprotocol/contracts/lib/ethers-v5/index.js'; +import type { Exchange } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import type { BigNumber } from 'bignumber.js'; import type { ethers } from 'ethers'; import type { Aggregator } from '../services/Aggregator/index.js'; @@ -9,7 +9,7 @@ export default async ( aggregator: Aggregator, walletAddress: string, exchangeContract: Exchange, - provider: ethers.providers.Provider, + provider: ethers.Provider, ) => { const balances = await Promise.all( Object.entries(balancesRequired) diff --git a/src/utils/getNativeCryptocurrencyName.ts b/src/utils/getNativeCryptocurrencyName.ts index 67c3fec..fa12251 100644 --- a/src/utils/getNativeCryptocurrencyName.ts +++ b/src/utils/getNativeCryptocurrencyName.ts @@ -11,7 +11,7 @@ const getNativeCryptocurrencyName = (assetToAddress: Partial ({ @@ -21,34 +21,34 @@ const swapThroughOrionPoolSchema = z.object({ })); const buyOrderSchema = z.tuple([ // buy order - z.string().refine(ethers.utils.isAddress), // senderAddress - z.string().refine(ethers.utils.isAddress), // matcherAddress - z.string().refine(ethers.utils.isAddress), // baseAsset - z.string().refine(ethers.utils.isAddress), // quoteAsset - z.string().refine(ethers.utils.isAddress), // matcherFeeAsset - z.instanceof(ethers.BigNumber), // amount - z.instanceof(ethers.BigNumber), // price - z.instanceof(ethers.BigNumber), // matcherFee - z.instanceof(ethers.BigNumber), // nonce - z.instanceof(ethers.BigNumber), // expiration + z.string().refine(ethers.isAddress), // senderAddress + z.string().refine(ethers.isAddress), // matcherAddress + z.string().refine(ethers.isAddress), // baseAsset + z.string().refine(ethers.isAddress), // quoteAsset + z.string().refine(ethers.isAddress), // matcherFeeAsset + z.bigint(), // amount + z.bigint(), // price + z.bigint(), // matcherFee + z.bigint(), // nonce + z.bigint(), // expiration z.literal(1), // buySide z.boolean(), // isPersonalSign - z.string().refine(ethers.utils.isHexString), // signature + z.string().refine(ethers.isHexString), // signature ]); const sellOrderSchema = z.tuple([ // sell orer - z.string().refine(ethers.utils.isAddress), // senderAddress - z.string().refine(ethers.utils.isAddress), // matcherAddress - z.string().refine(ethers.utils.isAddress), // baseAsset - z.string().refine(ethers.utils.isAddress), // quoteAsset - z.string().refine(ethers.utils.isAddress), // matcherFeeAsset - z.instanceof(ethers.BigNumber), // amount - z.instanceof(ethers.BigNumber), // price - z.instanceof(ethers.BigNumber), // matcherFee - z.instanceof(ethers.BigNumber), // nonce - z.instanceof(ethers.BigNumber), // expiration + z.string().refine(ethers.isAddress), // senderAddress + z.string().refine(ethers.isAddress), // matcherAddress + z.string().refine(ethers.isAddress), // baseAsset + z.string().refine(ethers.isAddress), // quoteAsset + z.string().refine(ethers.isAddress), // matcherFeeAsset + z.bigint(), // amount + z.bigint(), // price + z.bigint(), // matcherFee + z.bigint(), // nonce + z.bigint(), // expiration z.literal(0), // buySide z.boolean(), // isPersonalSign - z.string().refine(ethers.utils.isHexString), // signature + z.string().refine(ethers.isHexString), // signature ]); const toOrder = | z.infer>(data: T) => ({ @@ -71,9 +71,9 @@ const fillThroughOrionPoolSchema = z.object({ name: z.literal('fillThroughOrionPool'), args: z.tuple([ sellOrderSchema, - z.instanceof(ethers.BigNumber), // filled amount - z.instanceof(ethers.BigNumber), // blockchainFee - z.string().refine(ethers.utils.isAddress).array().nonempty(), // path + z.bigint(), // filled amount + z.bigint(), // blockchainFee + z.string().refine(ethers.isAddress).array().nonempty(), // path ]), }).transform((data) => ({ name: data.name, @@ -90,8 +90,8 @@ const fillOrdersSchema = z.object({ args: z.tuple([ buyOrderSchema, sellOrderSchema, - z.instanceof(ethers.BigNumber), // filledPrice - z.instanceof(ethers.BigNumber), // filledAmount + z.bigint(), // filledPrice + z.bigint(), // filledAmount ]), }).transform((data) => ({ name: data.name, diff --git a/tsconfig.json b/tsconfig.json index 37764ec..2bbded1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,8 +12,7 @@ ], "compilerOptions": { "target": "esnext", - "module": "NodeNext", - "moduleResolution": "NodeNext", + "module": "ESNext", "esModuleInterop": true, "resolveJsonModule": true /* Enable importing .json files */, "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, From 9b178c87ad4ce5a1bbcd168312bcfb081dd60737 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Thu, 28 Sep 2023 12:55:37 +0300 Subject: [PATCH 10/47] update model --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Integrator/schemas/veORN-info-schema.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97b6cdc..d5c6f7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc6", + "version": "0.19.89-rc7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc6", + "version": "0.19.89-rc7", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index fee5419..4e46f46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc6", + "version": "0.19.89-rc7", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/schemas/veORN-info-schema.ts b/src/services/Integrator/schemas/veORN-info-schema.ts index 67f0602..46933b1 100644 --- a/src/services/Integrator/schemas/veORN-info-schema.ts +++ b/src/services/Integrator/schemas/veORN-info-schema.ts @@ -6,10 +6,10 @@ const veORNResultSchema = z.object({ avgAPR: z.number(), minAPR: z.number(), maxAPR: z.number(), - veTOKENAddress: evmAddressSchema, + veTokenAddress: evmAddressSchema, totalORNLocked: z.number(), totalVeORN: z.number(), - weekly_reward: z.number(), + weeklyReward: z.number(), userAPR: z.number(), userVeORN: z.number(), userORNLocked: z.number(), From e868711374843e02595e45b50812ec15e041d7ea Mon Sep 17 00:00:00 2001 From: TheJuze Date: Thu, 28 Sep 2023 13:23:19 +0300 Subject: [PATCH 11/47] update model veORNInfo --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Integrator/schemas/veORN-info-schema.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d5c6f7d..32e2175 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc7", + "version": "0.19.89-rc8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc7", + "version": "0.19.89-rc8", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 4e46f46..d0e0fa5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc7", + "version": "0.19.89-rc8", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/schemas/veORN-info-schema.ts b/src/services/Integrator/schemas/veORN-info-schema.ts index 46933b1..1e05026 100644 --- a/src/services/Integrator/schemas/veORN-info-schema.ts +++ b/src/services/Integrator/schemas/veORN-info-schema.ts @@ -13,7 +13,7 @@ const veORNResultSchema = z.object({ userAPR: z.number(), userVeORN: z.number(), userORNLocked: z.number(), - userPeriodLock: z.number(), + userLockEndDate: z.number(), userReward: z.number(), userWeeklyReward: z.number() }); From d5a3e1d64e8a2571901b6b60eff21948290ab316 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Thu, 28 Sep 2023 18:31:54 +0400 Subject: [PATCH 12/47] fix: getPlatformFees inputs --- src/services/BlockchainService/index.ts | 29 +++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/services/BlockchainService/index.ts b/src/services/BlockchainService/index.ts index 8ac862e..6c43a0a 100644 --- a/src/services/BlockchainService/index.ts +++ b/src/services/BlockchainService/index.ts @@ -59,6 +59,13 @@ type AtomicSwapHistoryTargetQuery = AtomicSwapHistoryBaseQuery & { expiredRedeem?: 0 | 1 state?: 'REDEEMED' | 'BEFORE-REDEEM' } + +type PlatformFees = { + assetIn: string + assetOut: string + walletAddress?: string | undefined + fromWidget?: string | undefined +} class BlockchainService { private readonly apiUrl: string; @@ -231,23 +238,17 @@ class BlockchainService { { headers: this.basicAuthHeaders } ); - getPlatformFees = ( - { assetIn, assetOut, walletAddress, fromWidget }: { - assetIn?: string | undefined, - assetOut?: string | undefined, - walletAddress?: string | undefined, - fromWidget?: string | undefined - } + getPlatformFees = ({ + assetIn, + assetOut, + walletAddress, + fromWidget + }: PlatformFees ) => { const url = new URL(`${this.apiUrl}/api/platform-fees`); - if (assetIn !== undefined) { - url.searchParams.append('assetIn', assetIn); - } - - if (assetOut !== undefined) { - url.searchParams.append('assetOut', assetOut); - } + url.searchParams.append('assetIn', assetIn); + url.searchParams.append('assetOut', assetOut); if (walletAddress !== undefined) { url.searchParams.append('walletAddress', walletAddress); From 1441b51e0d4ea776e8f968223eac33f42cb2c6ad Mon Sep 17 00:00:00 2001 From: TheJuze Date: Thu, 28 Sep 2023 17:36:08 +0300 Subject: [PATCH 13/47] add more methods to integrator --- package-lock.json | 4 +- package.json | 2 +- src/services/Integrator/index.ts | 78 ++++++++++++++++++- src/services/Integrator/schemas/index.ts | 4 +- .../Integrator/schemas/list-amount-schema.ts | 5 ++ .../Integrator/schemas/voting-info-schema.ts | 21 +++++ 6 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 src/services/Integrator/schemas/list-amount-schema.ts create mode 100644 src/services/Integrator/schemas/voting-info-schema.ts diff --git a/package-lock.json b/package-lock.json index 32e2175..971de74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc8", + "version": "0.19.89-rc9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc8", + "version": "0.19.89-rc9", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index d0e0fa5..4c48fb6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc8", + "version": "0.19.89-rc9", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index e5a1aa0..250a271 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -1,11 +1,14 @@ import { environmentResponseSchema, getPoolResponseSchema, + listAmountResponseSchema, listNFTOrderResponseSchema, listPoolResponseSchema, - veORNInfoSchema, + veORNInfoResponseSchema, + votingInfoResponseSchema } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; +import { BigNumber } from 'bignumber.js'; type BasePayload = { chainId: number @@ -42,12 +45,29 @@ type VeORNInfoPayload = BasePayload & { params: [string] } +type ListAmountPayload = BasePayload & { + model: string + method: 'listAmount' + params: [] +} + +type GetAmountByORNPayload = BasePayload & { + amountToken: number + timeLock: number +} + type Payload = | GetEnvironmentPayload | ListNFTOrderPayload | GetPoolInfoPayload | ListPoolPayload - | VeORNInfoPayload; + | VeORNInfoPayload + | ListAmountPayload + | GetAmountByORNPayload; + +const START_TIME = 1690848000;// Aug 01 2023 00:00:00 UTC +const DAY = 86400 +const YEAR = 365 * DAY class IntegratorService { private readonly apiUrl: string; @@ -67,6 +87,10 @@ class IntegratorService { this.getPoolInfo = this.getPoolInfo.bind(this); this.listPool = this.listPool.bind(this); this.veORNInfo = this.veORNInfo.bind(this); + this.listAmount = this.listAmount.bind(this); + this.getAmountByORN = this.getAmountByORN.bind(this); + this.getAmountAtCurrent = this.getAmountAtCurrent.bind(this); + this.getVotingInfo = this.getVotingInfo.bind(this); } makeRPCPayload = (payload: Omit) => { @@ -78,7 +102,7 @@ class IntegratorService { }; veORNInfo = (address: string) => { - return fetchWithValidation(this.apiUrl, veORNInfoSchema, { + return fetchWithValidation(this.apiUrl, veORNInfoResponseSchema, { method: 'POST', body: this.makeRPCPayload({ model: 'veORN', @@ -88,6 +112,13 @@ class IntegratorService { }) } + getAmountAtCurrent = (amount: number) => { + const timestamp = Date.now() / 1000; + + // sqrt + return BigNumber(amount).dividedBy(this.getK(timestamp)); + } + private readonly getEnvironment = () => { return fetchWithValidation(this.apiUrl, environmentResponseSchema, { method: 'POST', @@ -135,6 +166,47 @@ class IntegratorService { }), }); } + + private readonly listAmount = (poolKey: string) => { + return fetchWithValidation(this.apiUrl, listAmountResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: poolKey, + method: 'listAmount', + params: [], + }), + }); + } + + private readonly getK = (time: number) => { + const currentTime = time < START_TIME ? START_TIME : time; + + const deltaYears = BigNumber(currentTime).minus(START_TIME).dividedBy(YEAR); + return BigNumber(2).pow(BigNumber(deltaYears).pow(2)); + } + + private readonly getAmountByORN = (amountToken: number, timeLock: number) => { + const timestamp = Date.now() / 1000; + + const deltaDays = BigNumber(timeLock).minus(timestamp).dividedBy(DAY); + if (deltaDays.lt(0)) { + return 0; + } + + // sqrt + return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(5); + } + + private readonly getVotingInfo = (userAddress: number) => { + return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'OrionVoting', + method: 'info', + params: [userAddress], + }), + }); + } } export * as schemas from './schemas/index.js'; diff --git a/src/services/Integrator/schemas/index.ts b/src/services/Integrator/schemas/index.ts index a8cca95..ebd913d 100644 --- a/src/services/Integrator/schemas/index.ts +++ b/src/services/Integrator/schemas/index.ts @@ -2,4 +2,6 @@ export { default as environmentResponseSchema } from './environment-response-sch export { default as listNFTOrderResponseSchema } from './list-nft-order-response-schema.js'; export { default as getPoolResponseSchema } from './get-pool-response-schema.js'; export { default as listPoolResponseSchema } from './list-pool-response-schema.js'; -export { default as veORNInfoSchema } from './veORN-info-schema.js'; +export { default as veORNInfoResponseSchema } from './veORN-info-schema.js'; +export { default as listAmountResponseSchema } from './list-amount-schema.js'; +export { default as votingInfoResponseSchema } from './voting-info-schema.js'; diff --git a/src/services/Integrator/schemas/list-amount-schema.ts b/src/services/Integrator/schemas/list-amount-schema.ts new file mode 100644 index 0000000..c4bf3b1 --- /dev/null +++ b/src/services/Integrator/schemas/list-amount-schema.ts @@ -0,0 +1,5 @@ +import { z } from 'zod'; + +const listAmountSchema = z.record(z.number(), z.number()) + +export default listAmountSchema; diff --git a/src/services/Integrator/schemas/voting-info-schema.ts b/src/services/Integrator/schemas/voting-info-schema.ts new file mode 100644 index 0000000..74c05dc --- /dev/null +++ b/src/services/Integrator/schemas/voting-info-schema.ts @@ -0,0 +1,21 @@ +import { z } from 'zod'; + +const poolSchema = z.object({ + allVote: z.number(), + name: z.string(), + poolAddress: z.string(), + type: z.string(), + userVote: z.number() +}) + +const votingInfoSchema = z.object({ + absoluteVeTokenInVoting: z.number(), + pools: z.array(poolSchema), + userVeTokenBalance: z.number(), + userVeTokenInVoting: z.number(), + veTokenAddress: z.string(), + votingAddress: z.string(), + weeklyReward: z.number() +}) + +export default votingInfoSchema; From 020b153597534748e915e3d313388e39ef561792 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Fri, 29 Sep 2023 10:56:55 +0300 Subject: [PATCH 14/47] move constants --- package-lock.json | 4 ++-- package.json | 2 +- src/constants/index.ts | 1 + src/constants/timings.ts | 3 +++ src/services/Integrator/index.ts | 9 +++------ 5 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 src/constants/timings.ts diff --git a/package-lock.json b/package-lock.json index e241e30..b16089f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc9", + "version": "0.19.89-rc11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc9", + "version": "0.19.89-rc11", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 54faf66..dc30e31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc10", + "version": "0.19.89-rc11", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/constants/index.ts b/src/constants/index.ts index c414279..efe47f0 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -9,5 +9,6 @@ export { default as exchangesMap } from './exchangesMap.js'; export * from './chains.js'; export * from './precisions.js'; export * from './gasLimits.js'; +export * from './timings.js'; export const SERVICE_TOKEN = 'ORN'; diff --git a/src/constants/timings.ts b/src/constants/timings.ts new file mode 100644 index 0000000..e92fc85 --- /dev/null +++ b/src/constants/timings.ts @@ -0,0 +1,3 @@ +export const LOCK_START_TIME = 1690848000;// Aug 01 2023 00:00:00 UTC +export const DAY = 86400 +export const YEAR = 365 * DAY diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 250a271..8f06bfd 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -9,6 +9,7 @@ import { } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; import { BigNumber } from 'bignumber.js'; +import { DAY, LOCK_START_TIME, YEAR } from '../../constants/index.js'; type BasePayload = { chainId: number @@ -65,10 +66,6 @@ type Payload = | ListAmountPayload | GetAmountByORNPayload; -const START_TIME = 1690848000;// Aug 01 2023 00:00:00 UTC -const DAY = 86400 -const YEAR = 365 * DAY - class IntegratorService { private readonly apiUrl: string; @@ -179,9 +176,9 @@ class IntegratorService { } private readonly getK = (time: number) => { - const currentTime = time < START_TIME ? START_TIME : time; + const currentTime = time < LOCK_START_TIME ? LOCK_START_TIME : time; - const deltaYears = BigNumber(currentTime).minus(START_TIME).dividedBy(YEAR); + const deltaYears = BigNumber(currentTime).minus(LOCK_START_TIME).dividedBy(YEAR); return BigNumber(2).pow(BigNumber(deltaYears).pow(2)); } From 6edb6f3c0cb34b0da8158f16df97e8342094ba2c Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Fri, 29 Sep 2023 17:58:01 +0400 Subject: [PATCH 15/47] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e7d8fc..7cfb7fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.91", + "version": "0.19.92", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From bed0aac578d07ec181ec8e5aa6163f5cfc0a307f Mon Sep 17 00:00:00 2001 From: TheJuze Date: Fri, 29 Sep 2023 17:01:22 +0300 Subject: [PATCH 16/47] make PlatformFees fields optional. temporary solution --- package-lock.json | 4 ++-- package.json | 2 +- src/constants/index.ts | 1 + src/services/BlockchainService/index.ts | 13 +++++++++---- src/services/Integrator/index.ts | 6 +++--- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index b16089f..74382d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc11", + "version": "0.19.89-rc12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc11", + "version": "0.19.89-rc12", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index dc30e31..ab14ecd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc11", + "version": "0.19.89-rc12", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/constants/index.ts b/src/constants/index.ts index efe47f0..1651be1 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -12,3 +12,4 @@ export * from './gasLimits.js'; export * from './timings.js'; export const SERVICE_TOKEN = 'ORN'; +export const INITIAL_VEORN_ADJUSTMENT_FACTOR = 5; diff --git a/src/services/BlockchainService/index.ts b/src/services/BlockchainService/index.ts index 6c43a0a..e301615 100644 --- a/src/services/BlockchainService/index.ts +++ b/src/services/BlockchainService/index.ts @@ -61,8 +61,8 @@ type AtomicSwapHistoryTargetQuery = AtomicSwapHistoryBaseQuery & { } type PlatformFees = { - assetIn: string - assetOut: string + assetIn?: string // TODO: return types from main branch + assetOut?: string walletAddress?: string | undefined fromWidget?: string | undefined } @@ -247,8 +247,13 @@ class BlockchainService { ) => { const url = new URL(`${this.apiUrl}/api/platform-fees`); - url.searchParams.append('assetIn', assetIn); - url.searchParams.append('assetOut', assetOut); + if (assetIn !== undefined) { // TODO: make same as in main branch + url.searchParams.append('assetIn', assetIn); + } + + if (assetOut !== undefined) { + url.searchParams.append('assetOut', assetOut); + } if (walletAddress !== undefined) { url.searchParams.append('walletAddress', walletAddress); diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 8f06bfd..4b050ed 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -9,7 +9,7 @@ import { } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; import { BigNumber } from 'bignumber.js'; -import { DAY, LOCK_START_TIME, YEAR } from '../../constants/index.js'; +import { DAY, INITIAL_VEORN_ADJUSTMENT_FACTOR, LOCK_START_TIME, YEAR } from '../../constants/index.js'; type BasePayload = { chainId: number @@ -109,7 +109,7 @@ class IntegratorService { }) } - getAmountAtCurrent = (amount: number) => { + getAmountAtCurrent = async (amount: number) => { const timestamp = Date.now() / 1000; // sqrt @@ -191,7 +191,7 @@ class IntegratorService { } // sqrt - return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(5); + return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(INITIAL_VEORN_ADJUSTMENT_FACTOR); } private readonly getVotingInfo = (userAddress: number) => { From ffa4d8b9d64613dc8673372d855485cc5c34f4f4 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Fri, 29 Sep 2023 17:16:55 +0300 Subject: [PATCH 17/47] fix getAmountAtCurrent return type --- package-lock.json | 4 ++-- package.json | 2 +- src/constants/index.ts | 1 - src/constants/timings.ts | 1 - src/services/Integrator/constants.ts | 2 ++ src/services/Integrator/index.ts | 5 +++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 74382d0..542573d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc12", + "version": "0.19.89-rc13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc12", + "version": "0.19.89-rc13", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index ab14ecd..c84fa96 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc12", + "version": "0.19.89-rc13", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/constants/index.ts b/src/constants/index.ts index 1651be1..efe47f0 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -12,4 +12,3 @@ export * from './gasLimits.js'; export * from './timings.js'; export const SERVICE_TOKEN = 'ORN'; -export const INITIAL_VEORN_ADJUSTMENT_FACTOR = 5; diff --git a/src/constants/timings.ts b/src/constants/timings.ts index e92fc85..a5ee04b 100644 --- a/src/constants/timings.ts +++ b/src/constants/timings.ts @@ -1,3 +1,2 @@ -export const LOCK_START_TIME = 1690848000;// Aug 01 2023 00:00:00 UTC export const DAY = 86400 export const YEAR = 365 * DAY diff --git a/src/services/Integrator/constants.ts b/src/services/Integrator/constants.ts index 00c0d3d..8ec49a1 100644 --- a/src/services/Integrator/constants.ts +++ b/src/services/Integrator/constants.ts @@ -1 +1,3 @@ export const AVAILABLE_POOL_FEE = ['0.01', '0.05', '0.3', '1'] as const; +export const INITIAL_VEORN_ADJUSTMENT_FACTOR = 5; +export const LOCK_START_TIME = 1690848000;// Aug 01 2023 00:00:00 UTC diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 4b050ed..01e27e5 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -9,7 +9,8 @@ import { } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; import { BigNumber } from 'bignumber.js'; -import { DAY, INITIAL_VEORN_ADJUSTMENT_FACTOR, LOCK_START_TIME, YEAR } from '../../constants/index.js'; +import { DAY, YEAR } from '../../constants/index.js'; +import { INITIAL_VEORN_ADJUSTMENT_FACTOR, LOCK_START_TIME } from './constants.js'; type BasePayload = { chainId: number @@ -109,7 +110,7 @@ class IntegratorService { }) } - getAmountAtCurrent = async (amount: number) => { + getAmountAtCurrent = (amount: number) => { const timestamp = Date.now() / 1000; // sqrt From d0eb2288c040b8fd9fca0903ab03d6976b88e406 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Sun, 1 Oct 2023 17:42:36 +0300 Subject: [PATCH 18/47] update formulas --- package-lock.json | 4 ++-- package.json | 2 +- src/constants/timings.ts | 1 + src/services/Integrator/index.ts | 12 ++++++------ 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 542573d..2fa1e5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc13", + "version": "0.19.89-rc14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc13", + "version": "0.19.89-rc14", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index c84fa96..5d5157e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc13", + "version": "0.19.89-rc14", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/constants/timings.ts b/src/constants/timings.ts index a5ee04b..471091e 100644 --- a/src/constants/timings.ts +++ b/src/constants/timings.ts @@ -1,2 +1,3 @@ export const DAY = 86400 +export const WEEK_DAYS = 7; export const YEAR = 365 * DAY diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 01e27e5..2c00111 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -9,8 +9,8 @@ import { } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; import { BigNumber } from 'bignumber.js'; -import { DAY, YEAR } from '../../constants/index.js'; -import { INITIAL_VEORN_ADJUSTMENT_FACTOR, LOCK_START_TIME } from './constants.js'; +import { DAY, WEEK_DAYS, YEAR } from '../../constants/index.js'; +import { LOCK_START_TIME } from './constants.js'; type BasePayload = { chainId: number @@ -110,7 +110,7 @@ class IntegratorService { }) } - getAmountAtCurrent = (amount: number) => { + getAmountAtCurrent = (amount: number): BigNumber => { const timestamp = Date.now() / 1000; // sqrt @@ -176,11 +176,11 @@ class IntegratorService { }); } - private readonly getK = (time: number) => { + private readonly getK = (time: number): BigNumber => { const currentTime = time < LOCK_START_TIME ? LOCK_START_TIME : time; const deltaYears = BigNumber(currentTime).minus(LOCK_START_TIME).dividedBy(YEAR); - return BigNumber(2).pow(BigNumber(deltaYears).pow(2)); + return BigNumber(2).pow(BigNumber(deltaYears).multipliedBy(2)); } private readonly getAmountByORN = (amountToken: number, timeLock: number) => { @@ -192,7 +192,7 @@ class IntegratorService { } // sqrt - return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(INITIAL_VEORN_ADJUSTMENT_FACTOR); + return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(BigNumber(WEEK_DAYS).sqrt()); } private readonly getVotingInfo = (userAddress: number) => { From 3b784906cbe20350d5b1a7f9c89397dd52b00e45 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Sun, 1 Oct 2023 17:53:51 +0300 Subject: [PATCH 19/47] change pow method --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Integrator/index.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2fa1e5e..864da52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc14", + "version": "0.19.89-rc15", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc14", + "version": "0.19.89-rc15", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 5d5157e..b4effed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc14", + "version": "0.19.89-rc15", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 2c00111..8cdd0d6 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -176,11 +176,11 @@ class IntegratorService { }); } - private readonly getK = (time: number): BigNumber => { + private readonly getK = (time: number) => { const currentTime = time < LOCK_START_TIME ? LOCK_START_TIME : time; const deltaYears = BigNumber(currentTime).minus(LOCK_START_TIME).dividedBy(YEAR); - return BigNumber(2).pow(BigNumber(deltaYears).multipliedBy(2)); + return 2 ** BigNumber(deltaYears).multipliedBy(2).toNumber(); } private readonly getAmountByORN = (amountToken: number, timeLock: number) => { From 0f4940a6f9bed227d128bd4a820be34f82479de4 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Sun, 1 Oct 2023 18:16:42 +0300 Subject: [PATCH 20/47] make field getVotingInfo public --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Integrator/index.ts | 22 +++++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 864da52..479d1fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc15", + "version": "0.19.89-rc16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc15", + "version": "0.19.89-rc16", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index b4effed..61c27f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc15", + "version": "0.19.89-rc16", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 8cdd0d6..a405bb9 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -117,6 +117,17 @@ class IntegratorService { return BigNumber(amount).dividedBy(this.getK(timestamp)); } + getVotingInfo = (userAddress: number) => { + return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'OrionVoting', + method: 'info', + params: [userAddress], + }), + }); + } + private readonly getEnvironment = () => { return fetchWithValidation(this.apiUrl, environmentResponseSchema, { method: 'POST', @@ -194,17 +205,6 @@ class IntegratorService { // sqrt return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(BigNumber(WEEK_DAYS).sqrt()); } - - private readonly getVotingInfo = (userAddress: number) => { - return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { - method: 'POST', - body: this.makeRPCPayload({ - model: 'OrionVoting', - method: 'info', - params: [userAddress], - }), - }); - } } export * as schemas from './schemas/index.js'; From de23a73487148457465ad5504476c1001c85f9fa Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Mon, 2 Oct 2023 09:36:50 +0400 Subject: [PATCH 21/47] make readonly and public --- package.json | 2 +- src/services/Integrator/index.ts | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 61c27f3..852117d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc16", + "version": "0.19.89-rc17", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index a405bb9..927f15f 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -91,7 +91,7 @@ class IntegratorService { this.getVotingInfo = this.getVotingInfo.bind(this); } - makeRPCPayload = (payload: Omit) => { + readonly makeRPCPayload = (payload: Omit) => { return JSON.stringify({ ...payload, chainId: this.chainId, @@ -99,7 +99,7 @@ class IntegratorService { }); }; - veORNInfo = (address: string) => { + readonly veORNInfo = (address: string) => { return fetchWithValidation(this.apiUrl, veORNInfoResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -110,14 +110,14 @@ class IntegratorService { }) } - getAmountAtCurrent = (amount: number): BigNumber => { + readonly getAmountAtCurrent = (amount: number): BigNumber => { const timestamp = Date.now() / 1000; // sqrt return BigNumber(amount).dividedBy(this.getK(timestamp)); } - getVotingInfo = (userAddress: number) => { + readonly getVotingInfo = (userAddress: number) => { return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -128,7 +128,7 @@ class IntegratorService { }); } - private readonly getEnvironment = () => { + readonly getEnvironment = () => { return fetchWithValidation(this.apiUrl, environmentResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -139,7 +139,7 @@ class IntegratorService { }); }; - private readonly listNFTOrder = (address: string) => { + readonly listNFTOrder = (address: string) => { return fetchWithValidation(this.apiUrl, listNFTOrderResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -150,7 +150,7 @@ class IntegratorService { }); }; - private readonly getPoolInfo = ( + readonly getPoolInfo = ( token0: string, token1: string, poolAddress: string @@ -165,7 +165,7 @@ class IntegratorService { }); } - private readonly listPool = (address: string) => { + readonly listPool = (address: string) => { return fetchWithValidation(this.apiUrl, listPoolResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -176,7 +176,7 @@ class IntegratorService { }); } - private readonly listAmount = (poolKey: string) => { + readonly listAmount = (poolKey: string) => { return fetchWithValidation(this.apiUrl, listAmountResponseSchema, { method: 'POST', body: this.makeRPCPayload({ From e4009d297b4df6530241dfaecabc029f750d5857 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Mon, 2 Oct 2023 10:26:42 +0400 Subject: [PATCH 22/47] fixed listAmountSchema --- package.json | 2 +- src/services/Integrator/schemas/list-amount-schema.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 852117d..4414d37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc17", + "version": "0.19.89-rc18", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/schemas/list-amount-schema.ts b/src/services/Integrator/schemas/list-amount-schema.ts index c4bf3b1..d942a51 100644 --- a/src/services/Integrator/schemas/list-amount-schema.ts +++ b/src/services/Integrator/schemas/list-amount-schema.ts @@ -1,5 +1,9 @@ import { z } from 'zod'; +import infoSchema from './info-schema.js'; -const listAmountSchema = z.record(z.number(), z.number()) +const listAmountSchema = z.object({ + result: z.record(z.number()), + info: infoSchema, +}); export default listAmountSchema; From cf33e8b841f6057406423d361aa56b75b17dd962 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Mon, 2 Oct 2023 10:38:05 +0400 Subject: [PATCH 23/47] added test method --- package.json | 2 +- src/services/Integrator/index.ts | 12 ++++++++++++ src/services/Integrator/schemas/index.ts | 1 + .../Integrator/schemas/test-incrementor-schema.ts | 9 +++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/services/Integrator/schemas/test-incrementor-schema.ts diff --git a/package.json b/package.json index 4414d37..c8596ad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc18", + "version": "0.19.89-rc19", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 927f15f..b674610 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -4,6 +4,7 @@ import { listAmountResponseSchema, listNFTOrderResponseSchema, listPoolResponseSchema, + testIncrementorSchema, veORNInfoResponseSchema, votingInfoResponseSchema } from './schemas/index.js'; @@ -187,6 +188,17 @@ class IntegratorService { }); } + readonly testRetrieve = () => { + return fetchWithValidation(this.apiUrl, testIncrementorSchema, { + method: 'POST', + body: this.makeRPCPayload({ + model: 'Incrementer', + method: 'retrieve', + params: [], + }), + }); + } + private readonly getK = (time: number) => { const currentTime = time < LOCK_START_TIME ? LOCK_START_TIME : time; diff --git a/src/services/Integrator/schemas/index.ts b/src/services/Integrator/schemas/index.ts index ebd913d..e6e03b6 100644 --- a/src/services/Integrator/schemas/index.ts +++ b/src/services/Integrator/schemas/index.ts @@ -5,3 +5,4 @@ export { default as listPoolResponseSchema } from './list-pool-response-schema.j export { default as veORNInfoResponseSchema } from './veORN-info-schema.js'; export { default as listAmountResponseSchema } from './list-amount-schema.js'; export { default as votingInfoResponseSchema } from './voting-info-schema.js'; +export { default as testIncrementorSchema } from './test-incrementor-schema.js'; diff --git a/src/services/Integrator/schemas/test-incrementor-schema.ts b/src/services/Integrator/schemas/test-incrementor-schema.ts new file mode 100644 index 0000000..945d461 --- /dev/null +++ b/src/services/Integrator/schemas/test-incrementor-schema.ts @@ -0,0 +1,9 @@ +import { z } from 'zod'; +import infoSchema from './info-schema.js'; + +const testIncrementorSchema = z.object({ + result: z.number().int(), + info: infoSchema, +}); + +export default testIncrementorSchema; From e734e5e7e9339e5e6e493762198ca0ed8c877c94 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Mon, 2 Oct 2023 10:57:52 +0400 Subject: [PATCH 24/47] fix info schema --- package.json | 2 +- src/services/Integrator/schemas/info-schema.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index c8596ad..6957f5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc19", + "version": "0.19.89-rc20", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/schemas/info-schema.ts b/src/services/Integrator/schemas/info-schema.ts index 949727e..9e1dc60 100644 --- a/src/services/Integrator/schemas/info-schema.ts +++ b/src/services/Integrator/schemas/info-schema.ts @@ -1,9 +1,11 @@ import { z } from 'zod'; -import { hexStringSchema } from './util-schemas.js'; +import { ethers } from 'ethers'; const infoSchema = z.object({ blockNumber: z.number().int().nonnegative(), - blockHash: hexStringSchema, + blockHash: z.string().refine((v) => v.length === 0 || ethers.utils.isHexString(v), { + message: 'blockHash must be a valid hex string or empty', + }), timeRequest: z.number().int().nonnegative(), timeAnswer: z.number().int().nonnegative(), changes: z.number().int().nonnegative(), From 4bb4798666ba4df8af94429f20e8c5e4e774827b Mon Sep 17 00:00:00 2001 From: TheJuze Date: Mon, 2 Oct 2023 10:36:14 +0300 Subject: [PATCH 25/47] make field address getVotingInfo string --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Integrator/index.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 479d1fc..12e110b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc16", + "version": "0.19.89-rc21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc16", + "version": "0.19.89-rc21", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 6957f5f..8e6f7bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc20", + "version": "0.19.89-rc21", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index b674610..43be3fb 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -118,7 +118,7 @@ class IntegratorService { return BigNumber(amount).dividedBy(this.getK(timestamp)); } - readonly getVotingInfo = (userAddress: number) => { + readonly getVotingInfo = (userAddress: string) => { return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { method: 'POST', body: this.makeRPCPayload({ From 9f39d789e5875205b0b158b7a0553eb23dd5a0a5 Mon Sep 17 00:00:00 2001 From: TheJuze Date: Mon, 2 Oct 2023 10:47:56 +0300 Subject: [PATCH 26/47] update votingInfo schema --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Integrator/schemas/voting-info-schema.ts | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12e110b..784bfc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc21", + "version": "0.19.89-rc22", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc21", + "version": "0.19.89-rc22", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 8e6f7bf..a3fb0fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.89-rc21", + "version": "0.19.89-rc22", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/schemas/voting-info-schema.ts b/src/services/Integrator/schemas/voting-info-schema.ts index 74c05dc..bb0718f 100644 --- a/src/services/Integrator/schemas/voting-info-schema.ts +++ b/src/services/Integrator/schemas/voting-info-schema.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import infoSchema from './info-schema.js'; const poolSchema = z.object({ allVote: z.number(), @@ -8,7 +9,7 @@ const poolSchema = z.object({ userVote: z.number() }) -const votingInfoSchema = z.object({ +const votingResultSchema = z.object({ absoluteVeTokenInVoting: z.number(), pools: z.array(poolSchema), userVeTokenBalance: z.number(), @@ -18,4 +19,9 @@ const votingInfoSchema = z.object({ weeklyReward: z.number() }) +const votingInfoSchema = z.object({ + result: votingResultSchema, + info: infoSchema, +}); + export default votingInfoSchema; From 91c6342813b460d5cabfb759e17b619957dbf5bf Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 13:35:15 +0300 Subject: [PATCH 27/47] swap by address fix --- package-lock.json | 4 ++-- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e30774..2ac3f59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.91", + "version": "0.19.93-rc1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.91", + "version": "0.19.93-rc1", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 7cfb7fc..c5dacf4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.92", + "version": "0.19.93-rc1", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index c781c28..7b9a25f 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,8 +46,8 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - swapInfo.assetIn = safeGet(assetToAddress, swapInfo.assetIn); - swapInfo.assetOut = safeGet(assetToAddress, swapInfo.assetOut); + swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); + swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); return swapInfo; }) const factory = path.first().factory From 6002899ef8b5e1dd4be513d27afd42d09a6a710f Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 14:03:06 +0300 Subject: [PATCH 28/47] test --- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index c5dacf4..fda7bd0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc1", + "version": "0.19.93-rc2", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 7b9a25f..6084e0b 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,8 +46,10 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); - swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); + console.log('test_1', swapInfo.assetIn, swapInfo.assetOut, ethers.utils.isAddress(swapInfo.assetIn), ethers.utils.isAddress(swapInfo.assetOut)); + swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); + swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); + console.log('test_2', swapInfo.assetIn, swapInfo.assetOut, ethers.utils.isAddress(swapInfo.assetIn), ethers.utils.isAddress(swapInfo.assetOut)); return swapInfo; }) const factory = path.first().factory From 3d1a23ab7b9cbc251e7ab3e27c6eeb6590eec7c2 Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 14:21:21 +0300 Subject: [PATCH 29/47] fix --- src/Unit/Exchange/generateSwapCalldata.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 6084e0b..ba1382d 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,10 +46,8 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - console.log('test_1', swapInfo.assetIn, swapInfo.assetOut, ethers.utils.isAddress(swapInfo.assetIn), ethers.utils.isAddress(swapInfo.assetOut)); swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); - console.log('test_2', swapInfo.assetIn, swapInfo.assetOut, ethers.utils.isAddress(swapInfo.assetIn), ethers.utils.isAddress(swapInfo.assetOut)); return swapInfo; }) const factory = path.first().factory From 1a2f1d79407ba82521bc4d6d34a7c5571e44f456 Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 14:21:43 +0300 Subject: [PATCH 30/47] update --- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index fda7bd0..67ba92a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc2", + "version": "0.19.93-rc3", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index ba1382d..99b3657 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,8 +46,8 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); - swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); + swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn.toLowerCase() : safeGet(assetToAddress, swapInfo.assetIn); + swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut.toLowerCase() : safeGet(assetToAddress, swapInfo.assetOut); return swapInfo; }) const factory = path.first().factory From 4f2c1a5c0691477becd9b8041104aa2ff121634d Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 14:39:08 +0300 Subject: [PATCH 31/47] fix lowercase --- package-lock.json | 4 ++-- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ac3f59..9801d03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc1", + "version": "0.19.93-rc4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc1", + "version": "0.19.93-rc4", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 67ba92a..12284d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc3", + "version": "0.19.93-rc4", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 99b3657..ba1382d 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,8 +46,8 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn.toLowerCase() : safeGet(assetToAddress, swapInfo.assetIn); - swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut.toLowerCase() : safeGet(assetToAddress, swapInfo.assetOut); + swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); + swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); return swapInfo; }) const factory = path.first().factory From b2344549eb5f9905a513595ab5ea7372454f835d Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 14:48:35 +0300 Subject: [PATCH 32/47] fix: lowercase --- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 12284d3..6864e31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc4", + "version": "0.19.93-rc5", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index ba1382d..e336724 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,8 +46,9 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn : safeGet(assetToAddress, swapInfo.assetIn); - swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut : safeGet(assetToAddress, swapInfo.assetOut); + swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn.toLowerCase() : safeGet(assetToAddress, swapInfo.assetIn); + swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut.toLowerCase() : safeGet(assetToAddress, swapInfo.assetOut); + console.log('test_', swapInfo.assetIn, swapInfo.assetOut); return swapInfo; }) const factory = path.first().factory From 6cd0995d268310055f06891c5f3ea4f15f30940f Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 15:02:18 +0300 Subject: [PATCH 33/47] fix address --- src/Unit/Exchange/generateSwapCalldata.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index e336724..9f4bb29 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,9 +46,10 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - swapInfo.assetIn = ethers.utils.isAddress(swapInfo.assetIn.toLowerCase()) ? swapInfo.assetIn.toLowerCase() : safeGet(assetToAddress, swapInfo.assetIn); - swapInfo.assetOut = ethers.utils.isAddress(swapInfo.assetOut.toLowerCase()) ? swapInfo.assetOut.toLowerCase() : safeGet(assetToAddress, swapInfo.assetOut); - console.log('test_', swapInfo.assetIn, swapInfo.assetOut); + console.log('test_1', swapInfo.assetIn, swapInfo.assetOut, assetToAddress); + swapInfo.assetIn = assetToAddress[swapInfo.assetIn] ?? swapInfo.assetIn.toLowerCase(); + swapInfo.assetOut = assetToAddress[swapInfo.assetOut] ?? swapInfo.assetOut.toLowerCase(); + console.log('test_2', swapInfo.assetIn, swapInfo.assetOut); return swapInfo; }) const factory = path.first().factory From adca4b76b56f83564751de26efd8440413e87eb2 Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 15:02:31 +0300 Subject: [PATCH 34/47] bump ver --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6864e31..8ac4e5c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc5", + "version": "0.19.93-rc6", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From b73bbd8f3120cf0656f62392449a5cc1745d1f20 Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 15:13:29 +0300 Subject: [PATCH 35/47] test --- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8ac4e5c..27c0266 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc6", + "version": "0.19.93-rc7", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 9f4bb29..72a85e4 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,7 +46,7 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - console.log('test_1', swapInfo.assetIn, swapInfo.assetOut, assetToAddress); + console.log('test_1', swapInfo.assetIn, swapInfo.assetOut, assetToAddress, assetToAddress[swapInfo.assetIn], assetToAddress[swapInfo.assetOut], assetToAddress[swapInfo.assetIn.toLowerCase()], assetToAddress[swapInfo.assetOut.toLowerCase()], assetToAddress['ORN']); swapInfo.assetIn = assetToAddress[swapInfo.assetIn] ?? swapInfo.assetIn.toLowerCase(); swapInfo.assetOut = assetToAddress[swapInfo.assetOut] ?? swapInfo.assetOut.toLowerCase(); console.log('test_2', swapInfo.assetIn, swapInfo.assetOut); From bff9be6d83c48eddf61163a520b3cbab5fff3a6c Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 16:57:10 +0300 Subject: [PATCH 36/47] remove console log --- package-lock.json | 4 ++-- package.json | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9801d03..664ed0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc4", + "version": "0.19.93-rc8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc4", + "version": "0.19.93-rc8", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 27c0266..5567dbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc7", + "version": "0.19.93-rc8", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 72a85e4..11b56b0 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -46,10 +46,8 @@ export default async function generateSwapCalldata({ const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry') const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(unit.blockchainService.getInfo)(); let path = SafeArray.from(path_).map((swapInfo) => { - console.log('test_1', swapInfo.assetIn, swapInfo.assetOut, assetToAddress, assetToAddress[swapInfo.assetIn], assetToAddress[swapInfo.assetOut], assetToAddress[swapInfo.assetIn.toLowerCase()], assetToAddress[swapInfo.assetOut.toLowerCase()], assetToAddress['ORN']); swapInfo.assetIn = assetToAddress[swapInfo.assetIn] ?? swapInfo.assetIn.toLowerCase(); swapInfo.assetOut = assetToAddress[swapInfo.assetOut] ?? swapInfo.assetOut.toLowerCase(); - console.log('test_2', swapInfo.assetIn, swapInfo.assetOut); return swapInfo; }) const factory = path.first().factory From 28915d35b7cd9b65296cbb9632a4190080a37c71 Mon Sep 17 00:00:00 2001 From: kigastu Date: Mon, 2 Oct 2023 17:11:42 +0300 Subject: [PATCH 37/47] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5567dbd..06c88db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc8", + "version": "0.19.93", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From 5efad05fef815fcff5189533103cf880ad5fede3 Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 17:58:09 +0300 Subject: [PATCH 38/47] referral schema update --- package-lock.json | 4 ++-- package.json | 2 +- src/services/ReferralSystem/schemas/ratingSchema.ts | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 664ed0f..2ba7d17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc8", + "version": "0.19.94", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.93-rc8", + "version": "0.19.94", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 06c88db..0733e6b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.93", + "version": "0.19.94", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/ReferralSystem/schemas/ratingSchema.ts b/src/services/ReferralSystem/schemas/ratingSchema.ts index 57489bb..ecc9354 100644 --- a/src/services/ReferralSystem/schemas/ratingSchema.ts +++ b/src/services/ReferralSystem/schemas/ratingSchema.ts @@ -6,6 +6,7 @@ const ratingSchema = z.object({ weekly_boost_budget_fmt: z.number(), monthly_boost_budget: z.string(), monthly_boost_budget_fmt: z.number(), + displayed_boost_budget_fmt: z.string(), time_left_for_the_reward: z.number(), time_left_for_the_reward_local: z.string(), time_left_for_the_reward_utc: z.string(), From acb1e0c3974283869cd3493888286b9ee92820c1 Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Mon, 2 Oct 2023 19:15:51 +0300 Subject: [PATCH 39/47] fix referral schema --- package-lock.json | 4 ++-- package.json | 2 +- src/services/ReferralSystem/schemas/ratingSchema.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ba7d17..a0527fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.94", + "version": "0.19.95", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.94", + "version": "0.19.95", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 0733e6b..c6206d8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.94", + "version": "0.19.95", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/ReferralSystem/schemas/ratingSchema.ts b/src/services/ReferralSystem/schemas/ratingSchema.ts index ecc9354..bb028da 100644 --- a/src/services/ReferralSystem/schemas/ratingSchema.ts +++ b/src/services/ReferralSystem/schemas/ratingSchema.ts @@ -6,7 +6,7 @@ const ratingSchema = z.object({ weekly_boost_budget_fmt: z.number(), monthly_boost_budget: z.string(), monthly_boost_budget_fmt: z.number(), - displayed_boost_budget_fmt: z.string(), + displayed_boost_budget_fmt: z.number(), time_left_for_the_reward: z.number(), time_left_for_the_reward_local: z.string(), time_left_for_the_reward_utc: z.string(), From 2942bb5426c0fdeff3a2b4a461cd0e3620f33130 Mon Sep 17 00:00:00 2001 From: Mikhail Gladchenko Date: Tue, 3 Oct 2023 07:53:11 +0100 Subject: [PATCH 40/47] Update to 0.20.0 version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef29267..b94983f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.92-rc2", + "version": "0.20.0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From 902b5f39948fd3f56a3906ff0d11ad413f2b4fb7 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Tue, 3 Oct 2023 16:54:40 +0400 Subject: [PATCH 41/47] consistent imports --- package.json | 2 +- src/BalanceGuard.ts | 2 +- src/Orion/bridge/swap.ts | 2 +- src/Unit/Exchange/deposit.ts | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 5 ++++- src/utils/getBalance.ts | 3 +-- src/utils/parseExchangeTradeTransaction.ts | 2 +- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index b94983f..aa1ba69 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.0", + "version": "0.20.1", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/BalanceGuard.ts b/src/BalanceGuard.ts index 9434591..f466c82 100644 --- a/src/BalanceGuard.ts +++ b/src/BalanceGuard.ts @@ -1,7 +1,7 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; import clone from 'just-clone'; -import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import { APPROVE_ERC20_GAS_LIMIT, NATIVE_CURRENCY_PRECISION } from './constants/index.js'; import type { AggregatedBalanceRequirement, ApproveFix, Asset, BalanceIssue, BalanceRequirement, Source, diff --git a/src/Orion/bridge/swap.ts b/src/Orion/bridge/swap.ts index e9eae6b..4bb8352 100644 --- a/src/Orion/bridge/swap.ts +++ b/src/Orion/bridge/swap.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import getAvailableSources from '../../utils/getAvailableFundsSources.js'; diff --git a/src/Unit/Exchange/deposit.ts b/src/Unit/Exchange/deposit.ts index 96bcbfe..d257244 100644 --- a/src/Unit/Exchange/deposit.ts +++ b/src/Unit/Exchange/deposit.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import getBalances from '../../utils/getBalances.js'; import BalanceGuard from '../../BalanceGuard.js'; import type Unit from '../index.js'; diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 76e9fe3..5683b0b 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -1,5 +1,8 @@ import type { ExchangeWithGenericSwap } from '@orionprotocol/contracts/lib/ethers-v6/Exchange.js'; -import { UniswapV3Pool__factory, ERC20__factory, SwapExecutor__factory, CurveRegistry__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { + UniswapV3Pool__factory, ERC20__factory, + SwapExecutor__factory, CurveRegistry__factory +} from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import { ethers, type BigNumberish, type AddressLike, concat, type BytesLike } from 'ethers'; import { safeGet, SafeArray } from '../../utils/safeGetters.js'; import type Unit from '../index.js'; diff --git a/src/utils/getBalance.ts b/src/utils/getBalance.ts index 861d0d8..35738ce 100644 --- a/src/utils/getBalance.ts +++ b/src/utils/getBalance.ts @@ -1,5 +1,4 @@ -import type { Exchange } from '@orionprotocol/contracts/lib/ethers-v6'; -import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { ERC20__factory, type Exchange } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import type { BigNumber } from 'bignumber.js'; import { ethers } from 'ethers'; import { INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION } from '../constants/index.js'; diff --git a/src/utils/parseExchangeTradeTransaction.ts b/src/utils/parseExchangeTradeTransaction.ts index 38aa5e4..efd0235 100644 --- a/src/utils/parseExchangeTradeTransaction.ts +++ b/src/utils/parseExchangeTradeTransaction.ts @@ -1,4 +1,4 @@ -import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6'; +import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js'; import { ethers } from 'ethers'; import { z } from 'zod'; From 52fd8b1b782c783a0d59f23ef3ae0ae92f15d3f3 Mon Sep 17 00:00:00 2001 From: Alex Kraiz Date: Tue, 3 Oct 2023 16:56:15 +0400 Subject: [PATCH 42/47] Update ethers version in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 677f4d9..3065e7c 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ npm i @orionprotocol/sdk ## Initialization -> :warning: **Ethers ^5.6.0 required** +> :warning: **Ethers ^6.7.0 required** ```js // Node.js From 9bcb392680a2dd13e3ac4d07fd1b348601eef4bb Mon Sep 17 00:00:00 2001 From: Dmitry Leleko Date: Wed, 4 Oct 2023 09:09:41 +0200 Subject: [PATCH 43/47] bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6583b8b..5d8e6fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.1", + "version": "0.20.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.20.1", + "version": "0.20.2", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index aa1ba69..e0c8749 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.1", + "version": "0.20.2", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From 2f1dfc25313642fe09e709148f4c4254757387c9 Mon Sep 17 00:00:00 2001 From: Dmitry Leleko Date: Wed, 4 Oct 2023 11:40:46 +0200 Subject: [PATCH 44/47] Fixup for ethers new version --- package.json | 2 +- src/services/Integrator/schemas/info-schema.ts | 2 +- src/services/Integrator/schemas/util-schemas.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index e0c8749..df9ecc3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.2", + "version": "0.20.3", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/schemas/info-schema.ts b/src/services/Integrator/schemas/info-schema.ts index 9e1dc60..6a14901 100644 --- a/src/services/Integrator/schemas/info-schema.ts +++ b/src/services/Integrator/schemas/info-schema.ts @@ -3,7 +3,7 @@ import { ethers } from 'ethers'; const infoSchema = z.object({ blockNumber: z.number().int().nonnegative(), - blockHash: z.string().refine((v) => v.length === 0 || ethers.utils.isHexString(v), { + blockHash: z.string().refine((v) => v.length === 0 || ethers.isHexString(v), { message: 'blockHash must be a valid hex string or empty', }), timeRequest: z.number().int().nonnegative(), diff --git a/src/services/Integrator/schemas/util-schemas.ts b/src/services/Integrator/schemas/util-schemas.ts index f0e80b2..3e93133 100644 --- a/src/services/Integrator/schemas/util-schemas.ts +++ b/src/services/Integrator/schemas/util-schemas.ts @@ -3,12 +3,12 @@ import { z } from 'zod'; export const evmAddressSchema = z .string() - .refine(ethers.utils.isAddress, (v) => ({ + .refine(ethers.isAddress, (v) => ({ message: `${v} is not a valid address`, })); export const hexStringSchema = z .string() - .refine(ethers.utils.isHexString, (v) => ({ + .refine(ethers.isHexString, (v) => ({ message: `${v} is not a valid hex string`, })); From 944ed79ea70e23785f6ee46174a540f06dd8ea97 Mon Sep 17 00:00:00 2001 From: Dmitry Leleko Date: Wed, 4 Oct 2023 14:46:53 +0200 Subject: [PATCH 45/47] Update integrator service --- package.json | 2 +- src/services/Integrator/index.ts | 72 ++++++++++++++++---------------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index df9ecc3..5d8cd66 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.3", + "version": "0.20.4", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 43be3fb..8da1a75 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -6,7 +6,7 @@ import { listPoolResponseSchema, testIncrementorSchema, veORNInfoResponseSchema, - votingInfoResponseSchema + votingInfoResponseSchema, } from './schemas/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; import { BigNumber } from 'bignumber.js'; @@ -46,27 +46,27 @@ type VeORNInfoPayload = BasePayload & { model: 'veORN' method: 'info' params: [string] -} +}; type ListAmountPayload = BasePayload & { model: string method: 'listAmount' params: [] -} +}; type GetAmountByORNPayload = BasePayload & { amountToken: number timeLock: number -} +}; type Payload = - | GetEnvironmentPayload - | ListNFTOrderPayload - | GetPoolInfoPayload - | ListPoolPayload - | VeORNInfoPayload - | ListAmountPayload - | GetAmountByORNPayload; + | GetEnvironmentPayload + | ListNFTOrderPayload + | GetPoolInfoPayload + | ListPoolPayload + | VeORNInfoPayload + | ListAmountPayload + | GetAmountByORNPayload; class IntegratorService { private readonly apiUrl: string; @@ -106,17 +106,29 @@ class IntegratorService { body: this.makeRPCPayload({ model: 'veORN', method: 'info', - params: [address] - }) - }) - } + params: [address], + }), + }); + }; readonly getAmountAtCurrent = (amount: number): BigNumber => { const timestamp = Date.now() / 1000; // sqrt return BigNumber(amount).dividedBy(this.getK(timestamp)); - } + }; + + readonly getAmountByORN = (amountToken: number, timeLock: number) => { + const timestamp = Date.now() / 1000; + + const deltaDays = BigNumber(timeLock).minus(timestamp).dividedBy(DAY); + + if (deltaDays.lte(0)) return 0; + + return BigNumber(amountToken) + .multipliedBy(BigNumber(deltaDays).sqrt()) + .dividedBy(BigNumber(WEEK_DAYS).sqrt()); + }; readonly getVotingInfo = (userAddress: string) => { return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { @@ -127,7 +139,7 @@ class IntegratorService { params: [userAddress], }), }); - } + }; readonly getEnvironment = () => { return fetchWithValidation(this.apiUrl, environmentResponseSchema, { @@ -164,7 +176,7 @@ class IntegratorService { params: [token0, token1, poolAddress], }), }); - } + }; readonly listPool = (address: string) => { return fetchWithValidation(this.apiUrl, listPoolResponseSchema, { @@ -175,7 +187,7 @@ class IntegratorService { params: [address], }), }); - } + }; readonly listAmount = (poolKey: string) => { return fetchWithValidation(this.apiUrl, listAmountResponseSchema, { @@ -186,7 +198,7 @@ class IntegratorService { params: [], }), }); - } + }; readonly testRetrieve = () => { return fetchWithValidation(this.apiUrl, testIncrementorSchema, { @@ -197,26 +209,16 @@ class IntegratorService { params: [], }), }); - } + }; private readonly getK = (time: number) => { const currentTime = time < LOCK_START_TIME ? LOCK_START_TIME : time; - const deltaYears = BigNumber(currentTime).minus(LOCK_START_TIME).dividedBy(YEAR); + const deltaYears = BigNumber(currentTime) + .minus(LOCK_START_TIME) + .dividedBy(YEAR); return 2 ** BigNumber(deltaYears).multipliedBy(2).toNumber(); - } - - private readonly getAmountByORN = (amountToken: number, timeLock: number) => { - const timestamp = Date.now() / 1000; - - const deltaDays = BigNumber(timeLock).minus(timestamp).dividedBy(DAY); - if (deltaDays.lt(0)) { - return 0; - } - - // sqrt - return BigNumber(amountToken).multipliedBy(BigNumber(deltaDays).sqrt()).dividedBy(BigNumber(WEEK_DAYS).sqrt()); - } + }; } export * as schemas from './schemas/index.js'; From 02764655a08d97a80b79b4b5fb8ae7189d36cd3c Mon Sep 17 00:00:00 2001 From: Kirill Litvinov Date: Thu, 5 Oct 2023 13:11:34 +0300 Subject: [PATCH 46/47] fix: exchanges name --- package-lock.json | 4 ++-- package.json | 2 +- src/services/Aggregator/ws/schemas/addressUpdateSchema.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d8e6fb..bfb9c37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.2", + "version": "0.20.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.20.2", + "version": "0.20.5", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 5d8cd66..e2eebec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.4", + "version": "0.20.5", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Aggregator/ws/schemas/addressUpdateSchema.ts b/src/services/Aggregator/ws/schemas/addressUpdateSchema.ts index 7cfeb4b..1e3e8d9 100644 --- a/src/services/Aggregator/ws/schemas/addressUpdateSchema.ts +++ b/src/services/Aggregator/ws/schemas/addressUpdateSchema.ts @@ -108,7 +108,7 @@ export const fullOrderSchema = z.object({ subOrders: o.c.map((so) => ({ pair: so.P, exchange: so.e, - exchangs: so.es, + exchanges: so.es, id: so.i, amount: so.a, settledAmount: so.A, From 4dd7245c78d3f2360337adfe65cb2dfba367079d Mon Sep 17 00:00:00 2001 From: Dmitry Leleko Date: Fri, 6 Oct 2023 09:49:11 +0200 Subject: [PATCH 47/47] Fix integrator service --- package.json | 2 +- src/services/Integrator/index.ts | 12 ++++++------ .../Integrator/schemas/voting-info-schema.ts | 14 ++++++++++---- src/services/index.ts | 1 + 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index e2eebec..fd8c4ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.5", + "version": "0.20.6", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/Integrator/index.ts b/src/services/Integrator/index.ts index 8da1a75..a3e4de8 100644 --- a/src/services/Integrator/index.ts +++ b/src/services/Integrator/index.ts @@ -100,7 +100,7 @@ class IntegratorService { }); }; - readonly veORNInfo = (address: string) => { + readonly veORNInfo = (address?: string) => { return fetchWithValidation(this.apiUrl, veORNInfoResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -121,16 +121,16 @@ class IntegratorService { readonly getAmountByORN = (amountToken: number, timeLock: number) => { const timestamp = Date.now() / 1000; - const deltaDays = BigNumber(timeLock).minus(timestamp).dividedBy(DAY); + const deltaDaysBN = BigNumber(timeLock).minus(timestamp).dividedBy(DAY); - if (deltaDays.lte(0)) return 0; + if (deltaDaysBN.lte(0)) return 0; return BigNumber(amountToken) - .multipliedBy(BigNumber(deltaDays).sqrt()) + .multipliedBy(deltaDaysBN.sqrt()) .dividedBy(BigNumber(WEEK_DAYS).sqrt()); }; - readonly getVotingInfo = (userAddress: string) => { + readonly getVotingInfo = (userAddress?: string) => { return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, { method: 'POST', body: this.makeRPCPayload({ @@ -178,7 +178,7 @@ class IntegratorService { }); }; - readonly listPool = (address: string) => { + readonly listPool = (address?: string) => { return fetchWithValidation(this.apiUrl, listPoolResponseSchema, { method: 'POST', body: this.makeRPCPayload({ diff --git a/src/services/Integrator/schemas/voting-info-schema.ts b/src/services/Integrator/schemas/voting-info-schema.ts index bb0718f..5ea18f5 100644 --- a/src/services/Integrator/schemas/voting-info-schema.ts +++ b/src/services/Integrator/schemas/voting-info-schema.ts @@ -6,8 +6,14 @@ const poolSchema = z.object({ name: z.string(), poolAddress: z.string(), type: z.string(), - userVote: z.number() -}) + userVote: z.number(), + token0: z.string(), // deprecated + token1: z.string(), // deprecated + name0: z.string(), + name1: z.string(), + poolFee: z.number(), + weight: z.number(), +}); const votingResultSchema = z.object({ absoluteVeTokenInVoting: z.number(), @@ -16,8 +22,8 @@ const votingResultSchema = z.object({ userVeTokenInVoting: z.number(), veTokenAddress: z.string(), votingAddress: z.string(), - weeklyReward: z.number() -}) + weeklyReward: z.number(), +}); const votingInfoSchema = z.object({ result: votingResultSchema, diff --git a/src/services/index.ts b/src/services/index.ts index 4228275..7d35c9e 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -2,3 +2,4 @@ export * as aggregator from './Aggregator/index.js'; export * as blockchainService from './BlockchainService/index.js'; export * as priceFeed from './PriceFeed/index.js'; export * as referralSystem from './ReferralSystem/index.js'; +export * as integrator from './Integrator/index.js';