From 093c57ccdcc2398330f8e23383eb7b3f98ce47cd Mon Sep 17 00:00:00 2001 From: Dmitry <35160421+TheJuze@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:03:46 +0300 Subject: [PATCH] return governance schemas (#210) --- package.json | 2 +- src/services/BlockchainService/index.ts | 45 ++++++++++++++++--- .../schemas/governanceChainsInfoSchema.ts | 7 +++ .../schemas/governanceContractsSchema.ts | 19 ++++++++ .../schemas/governancePoolSchema.ts | 18 ++++++++ .../schemas/governancePoolsSchema.ts | 28 ++++++++++++ .../BlockchainService/schemas/index.ts | 4 ++ 7 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 src/services/BlockchainService/schemas/governanceChainsInfoSchema.ts create mode 100644 src/services/BlockchainService/schemas/governanceContractsSchema.ts create mode 100644 src/services/BlockchainService/schemas/governancePoolSchema.ts create mode 100644 src/services/BlockchainService/schemas/governancePoolsSchema.ts diff --git a/package.json b/package.json index c844efb..f3d3421 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.20", + "version": "0.20.21-rc0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/services/BlockchainService/index.ts b/src/services/BlockchainService/index.ts index 1279e92..3056b93 100644 --- a/src/services/BlockchainService/index.ts +++ b/src/services/BlockchainService/index.ts @@ -18,6 +18,12 @@ import { makePartial } from '../../utils'; import type { networkCodes } from '../../constants/index.js'; import { fetchWithValidation } from 'simple-typed-fetch'; import type { BasicAuthCredentials } from '../../types.js'; +import { + governanceChainsInfoSchema, + governanceContractsSchema, + governancePoolSchema, + governancePoolsSchema +} from './schemas'; type IAdminAuthHeaders = { auth: string @@ -62,6 +68,7 @@ type PlatformFees = { walletAddress?: string | undefined fromWidget?: string | undefined } + class BlockchainService { private readonly apiUrl: string; @@ -109,6 +116,10 @@ class BlockchainService { this.getBlockNumber = this.getBlockNumber.bind(this); this.getRedeemOrderBySecretHash = this.getRedeemOrderBySecretHash.bind(this); this.claimOrder = this.claimOrder.bind(this); + this.getGovernanceContracts = this.getGovernanceContracts.bind(this); + this.getGovernancePools = this.getGovernancePools.bind(this); + this.getGovernancePool = this.getGovernancePool.bind(this); + this.getGovernanceChainsInfo = this.getGovernanceChainsInfo.bind(this); } get basicAuthHeaders() { @@ -222,8 +233,8 @@ class BlockchainService { ); /** - * @deprecated In favor of getPlatformFees - */ + * @deprecated In favor of getPlatformFees + */ getTokensFee = () => fetchWithValidation( `${this.apiUrl}/api/tokensFee`, z.record(z.string()).transform(makePartial), @@ -420,9 +431,9 @@ class BlockchainService { ); /** - * Sender is user address in source BlockchainService instance \ - * Receiver is user address in target BlockchainService instance - */ + * Sender is user address in source BlockchainService instance \ + * Receiver is user address in target BlockchainService instance + */ getAtomicSwapHistory = (query: AtomicSwapHistorySourceQuery | AtomicSwapHistoryTargetQuery) => { const url = new URL(`${this.apiUrl}/api/atomic/history/`); @@ -476,6 +487,30 @@ class BlockchainService { body: JSON.stringify(secretHashes), }, ); + + getGovernanceContracts = () => fetchWithValidation( + `${this.apiUrl}/api/governance/info`, + governanceContractsSchema, + { headers: this.basicAuthHeaders }, + ); + + getGovernancePools = () => fetchWithValidation( + `${this.apiUrl}/api/governance/pools`, + governancePoolsSchema, + { headers: this.basicAuthHeaders }, + ); + + getGovernancePool = (address: string) => fetchWithValidation( + `${this.apiUrl}/api/governance/pools/${address}`, + governancePoolSchema, + { headers: this.basicAuthHeaders }, + ); + + getGovernanceChainsInfo = () => fetchWithValidation( + `${this.apiUrl}/api/governance/chains-info`, + governanceChainsInfoSchema, + { headers: this.basicAuthHeaders }, + ); } export * as schemas from './schemas/index.js'; diff --git a/src/services/BlockchainService/schemas/governanceChainsInfoSchema.ts b/src/services/BlockchainService/schemas/governanceChainsInfoSchema.ts new file mode 100644 index 0000000..7a1b8b8 --- /dev/null +++ b/src/services/BlockchainService/schemas/governanceChainsInfoSchema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; + +const governanceChainsInfoSchema = z.object({ + isChainSupported: z.boolean(), +}); + +export default governanceChainsInfoSchema; diff --git a/src/services/BlockchainService/schemas/governanceContractsSchema.ts b/src/services/BlockchainService/schemas/governanceContractsSchema.ts new file mode 100644 index 0000000..9934b4d --- /dev/null +++ b/src/services/BlockchainService/schemas/governanceContractsSchema.ts @@ -0,0 +1,19 @@ +import { z } from 'zod'; + +const governanceContractsSchema = z.object({ + controllerAddress: z.string(), + veTOKENAddress: z.string(), + veTOKENYieldDistributorV4Address: z.string(), + time_total: z.string(), + absolute_ve_token_in_voting: z.string(), + info: z.record( + z.string(), + z.object({ + gaugeAddress: z.string(), + gaugeType: z.number(), + gaugeName: z.string(), + }) + ), +}); + +export default governanceContractsSchema; diff --git a/src/services/BlockchainService/schemas/governancePoolSchema.ts b/src/services/BlockchainService/schemas/governancePoolSchema.ts new file mode 100644 index 0000000..dd613b6 --- /dev/null +++ b/src/services/BlockchainService/schemas/governancePoolSchema.ts @@ -0,0 +1,18 @@ +import { z } from 'zod'; + +const governancePoolSchema = z.object({ + min_apr: z.string(), + max_apr: z.string(), + tvl: z.string(), + lp_supply: z.string(), + lp_staked: z.string(), + lp_staked_with_boost: z.string(), + lp_price_in_usd: z.string(), + reward_per_period: z.string(), + lock_time_for_max_multiplier: z.string(), + lock_max_multiplier: z.string(), + veorn_max_multiplier: z.string(), + veorn_boost_scale_factor: z.string(), +}); + +export default governancePoolSchema; diff --git a/src/services/BlockchainService/schemas/governancePoolsSchema.ts b/src/services/BlockchainService/schemas/governancePoolsSchema.ts new file mode 100644 index 0000000..8b3bcb3 --- /dev/null +++ b/src/services/BlockchainService/schemas/governancePoolsSchema.ts @@ -0,0 +1,28 @@ +import { z } from 'zod'; + +const governancePoolsSchema = z.array( + z.object({ + slug: z.string(), + identifier: z.string(), + chain: z.string(), + platform: z.string(), + logo: z.string(), + pair: z.string(), + lp_address: z.string(), + lp_staked: z.string(), + lp_staked_with_boost: z.string(), + lp_supply: z.string(), + lp_price_in_usd: z.string(), + farm_address: z.string(), + pool_tokens: z.tuple([z.string(), z.string()]), + pool_rewards: z.array(z.string()), + tvl: z.string(), + min_apr: z.string(), + max_apr: z.string(), + reward_per_period: z.array(z.string()), + weight: z.string(), + liquidity: z.string(), + }) +); + +export default governancePoolsSchema; diff --git a/src/services/BlockchainService/schemas/index.ts b/src/services/BlockchainService/schemas/index.ts index 2abb10d..80b82f3 100644 --- a/src/services/BlockchainService/schemas/index.ts +++ b/src/services/BlockchainService/schemas/index.ts @@ -12,5 +12,9 @@ export { default as atomicSummarySchema } from './atomicSummarySchema.js'; export { default as poolsLpAndStakedSchema } from './poolsLpAndStakedSchema.js'; export { default as userVotesSchema } from './userVotesSchema.js'; export { default as userEarnedSchema } from './userEarnedSchema.js'; +export { default as governanceContractsSchema } from './governanceContractsSchema.js'; +export { default as governancePoolsSchema } from './governancePoolsSchema.js'; +export { default as governancePoolSchema } from './governancePoolSchema.js'; +export { default as governanceChainsInfoSchema } from './governanceChainsInfoSchema.js'; export { default as poolsV3InfoSchema } from './poolsV3InfoSchema.js'; export { pricesWithQuoteAssetSchema } from './pricesWithQuoteAssetSchema.js';