From 03a055b4cb961f14818908d82c7df30d6482018c Mon Sep 17 00:00:00 2001 From: franz Date: Fri, 20 Dec 2024 09:13:56 +0100 Subject: [PATCH 1/3] update apr from api --- config/sonic.ts | 2 +- modules/actions/sts/sync-staking-data.ts | 17 +++++++++++++++-- modules/network/network-config-types.ts | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/config/sonic.ts b/config/sonic.ts index 621b40e8b..631992f31 100644 --- a/config/sonic.ts +++ b/config/sonic.ts @@ -47,7 +47,7 @@ export default { }, sts: { address: '0xe5da20f15420ad15de0fa650600afc998bbe3955', - baseApr: 0.18, + baseAprUrl: 'https://apr.soniclabs.com/current', validatorFee: 0.15, }, balancer: { diff --git a/modules/actions/sts/sync-staking-data.ts b/modules/actions/sts/sync-staking-data.ts index bc75708d3..5af6dee02 100644 --- a/modules/actions/sts/sync-staking-data.ts +++ b/modules/actions/sts/sync-staking-data.ts @@ -4,19 +4,32 @@ import { StsSubgraphService } from '../../sources/subgraphs/sts-subgraph/sts.ser import { Address, formatEther } from 'viem'; import { ViemClient } from '../../sources/viem-client'; +interface ApiResponse { + success: boolean; + data: { + apr: number; + }; +} + export async function syncStakingData( stakingContractAddress: Address, viemClient: ViemClient, subgraphService: StsSubgraphService, - baseApr: number, + baseAprUrl: string, validatorFee: number, ) { const stakingDataOnchain = await fetchSonicStakingData(stakingContractAddress, viemClient); const validators = await subgraphService.getAllValidators(); + const response = await fetch(baseAprUrl); + const data = (await response.json()) as ApiResponse; + if (!data.success) { + throw new Error('Failed to fetch sonic staking APR'); + } + const stakingApr = (parseFloat(stakingDataOnchain.totalDelegated) / parseFloat(stakingDataOnchain.totalAssets)) * - (baseApr * (1 - validatorFee)) * + (data.data.apr * (1 - validatorFee)) * (1 - parseFloat(stakingDataOnchain.protocolFee)); await prisma.prismaStakedSonicData.upsert({ diff --git a/modules/network/network-config-types.ts b/modules/network/network-config-types.ts index 3444cfd30..579dc819f 100644 --- a/modules/network/network-config-types.ts +++ b/modules/network/network-config-types.ts @@ -90,7 +90,7 @@ export interface NetworkData { }; sts?: { address: string; - baseApr: number; + baseAprUrl: string; validatorFee: number; }; bal?: { From 93f612b242c28ac47d3d588168d7e99c604d7d74 Mon Sep 17 00:00:00 2001 From: franz Date: Fri, 20 Dec 2024 09:19:55 +0100 Subject: [PATCH 2/3] rename --- modules/controllers/sts-controller.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/controllers/sts-controller.ts b/modules/controllers/sts-controller.ts index 21a93c751..f09c333aa 100644 --- a/modules/controllers/sts-controller.ts +++ b/modules/controllers/sts-controller.ts @@ -28,11 +28,11 @@ export function StakedSonicController(tracer?: any) { async syncSonicStakingData() { const stakingContractAddress = config['SONIC'].sts!.address; const stsSubgraphUrl = config['SONIC'].subgraphs.sts!; - const baseApr = config['SONIC'].sts!.baseApr!; + const baseAprUrl = config['SONIC'].sts!.baseAprUrl!; const validatorFee = config['SONIC'].sts!.validatorFee; // Guard against unconfigured chains - if (!stakingContractAddress || !stsSubgraphUrl || !baseApr || !validatorFee) { + if (!stakingContractAddress || !stsSubgraphUrl || !baseAprUrl || !validatorFee) { throw new Error(`Chain not configured for job sonic staking data`); } @@ -43,7 +43,7 @@ export function StakedSonicController(tracer?: any) { stakingContractAddress as Address, viemClient, stsSubgraphClient, - baseApr, + baseAprUrl, validatorFee, ); }, From 79c5ea6f94c09faff8d41c99c16620deef24c7ed Mon Sep 17 00:00:00 2001 From: franz Date: Fri, 20 Dec 2024 09:20:18 +0100 Subject: [PATCH 3/3] changeset --- .changeset/few-walls-juggle.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/few-walls-juggle.md diff --git a/.changeset/few-walls-juggle.md b/.changeset/few-walls-juggle.md new file mode 100644 index 000000000..152fd5387 --- /dev/null +++ b/.changeset/few-walls-juggle.md @@ -0,0 +1,5 @@ +--- +'backend': patch +--- + +fetch staking apr from api