This commit is contained in:
BitcoinVM
2024-02-02 13:07:28 +08:00
9 changed files with 85 additions and 15 deletions
+6 -4
View File
@@ -20,7 +20,7 @@ export class BaseRestClient<R extends AbstractRegistry> {
this.endpoint = endpoint;
this.registry = registry;
}
async request<T>(request: Request<T>, args: Record<string, any>, query = '', adapter?: (source: any) => T ) {
async request<T>(request: Request<T>, args: Record<string, any>, query = '', adapter?: (source: any) => Promise<T> ) {
let url = `${request.url.startsWith("http")?'':this.endpoint}${request.url}${query}`;
Object.keys(args).forEach((k) => {
url = url.replace(`{${k}}`, args[k] || '');
@@ -162,13 +162,15 @@ export class CosmosRestClient extends BaseRestClient<RequestRegistry> {
}
async getGovProposalTally(proposal_id: string) {
return this.request(this.registry.gov_proposals_tally, { proposal_id }, undefined, (source: any) => {
return {tally: {
return Promise.resolve({ tally: {
yes: source.tally.yes || source.tally.yes_count,
abstain: source.tally.abstain || source.tally.abstain_count,
no: source.tally.no || source.tally.no_count,
no_with_veto: source.tally.no_with_veto || source.tally.no_with_veto_count,
}};
});
},
});
}
);
}
async getGovProposalVotes(proposal_id: string, page?: PageRequest) {
if(!page) page = new PageRequest()
+3 -3
View File
@@ -21,11 +21,11 @@ function proposalAdapter(p: any): GovProposal {
}
export const requests: Partial<RequestRegistry> = {
mint_inflation: { url: '/evmos/inflation/v1/inflation_rate', adapter: (data: any) => ({inflation: (Number(data.inflation_rate || 0)/ 100 ).toFixed(2)}) },
mint_inflation: { url: '/evmos/inflation/v1/inflation_rate', adapter: async (data: any) => ({inflation: (Number(data.inflation_rate || 0)/ 100 ).toFixed(2)}) },
gov_params_voting: { url: '/cosmos/gov/v1/params/voting', adapter },
gov_params_tally: { url: '/cosmos/gov/v1/params/tallying', adapter },
gov_params_deposit: { url: '/cosmos/gov/v1/params/deposit', adapter },
gov_proposals: { url: '/cosmos/gov/v1/proposals', adapter: (source: any): PaginatedProposals => {
gov_proposals: { url: '/cosmos/gov/v1/proposals', adapter: async (source: any): Promise<PaginatedProposals> => {
const proposals = source.proposals.map((p:any) => proposalAdapter(p))
return {
proposals,
@@ -34,7 +34,7 @@ export const requests: Partial<RequestRegistry> = {
}},
gov_proposals_proposal_id: {
url: '/cosmos/gov/v1/proposals/{proposal_id}',
adapter: (source: any): {proposal: GovProposal} => {
adapter: async (source: any): Promise<{proposal: GovProposal}> => {
return {
proposal: proposalAdapter(source.proposal)
}
+26
View File
@@ -0,0 +1,26 @@
import type { RequestRegistry } from '@/libs/registry'
import { CosmosRestClient } from '@/libs/client';
import { useBlockchain } from '@/stores';
import { adapter } from '@/libs/registry'
// Blockchain Name
export const name = 'nolus';
// nolus custom request
export const requests: Partial<RequestRegistry> = {
mint_inflation: {
url: '/nolus/mint/v1beta1/annual_inflation',
adapter: async (data: any): Promise<any> => {
try {
const client = CosmosRestClient.newDefault(useBlockchain().endpoint.address)
const staking = await client.getStakingPool()
const inflation = Number(data.annual_inflation) / Number(staking.pool.bonded_tokens) || 0;
return { inflation: inflation.toString() };
} catch (error) {
console.log("Error in adapter:", error);
return { inflation: "0" };
}
}
},
bank_supply_by_denom: { url: "/cosmos/bank/v1beta1/supply/by_denom?denom={denom}", adapter }
};
+3 -3
View File
@@ -26,7 +26,7 @@ function proposalAdapter(p: any): GovProposal {
export const requests: Partial<RequestRegistry> = {
mint_inflation: {
url: `https://public-osmosis-api.numia.xyz/apr?start_date=${new Date(new Date().getTime() - 186400*1000).toISOString().split('T')[0]}&end_date=${new Date().toISOString().split('T')[0]}`,
adapter: (data: any) => {
adapter: async (data: any) => {
const [first] = data
return {inflation: String(Number(first?.apr|| "0")/100.0)}
}
@@ -34,7 +34,7 @@ export const requests: Partial<RequestRegistry> = {
gov_params_voting: { url: '/cosmos/gov/v1/params/voting', adapter },
gov_params_tally: { url: '/cosmos/gov/v1/params/tallying', adapter },
gov_params_deposit: { url: '/cosmos/gov/v1/params/deposit', adapter },
gov_proposals: { url: '/cosmos/gov/v1/proposals', adapter: (source: any): PaginatedProposals => {
gov_proposals: { url: '/cosmos/gov/v1/proposals', adapter: async (source: any): Promise<PaginatedProposals> => {
const proposals = source.proposals.map((p:any) => proposalAdapter(p))
return {
proposals,
@@ -43,7 +43,7 @@ export const requests: Partial<RequestRegistry> = {
}},
gov_proposals_proposal_id: {
url: '/cosmos/gov/v1/proposals/{proposal_id}',
adapter: (source: any): {proposal: GovProposal} => {
adapter: async (source: any): Promise<{proposal: GovProposal}> => {
return {
proposal: proposalAdapter(source.proposal)
}
+2 -2
View File
@@ -33,7 +33,7 @@ export const requests: Partial<RequestRegistry> = {
gov_params_voting: { url: '/cosmos/gov/v1/params/voting', adapter },
gov_params_tally: { url: '/cosmos/gov/v1/params/tallying', adapter },
gov_params_deposit: { url: '/cosmos/gov/v1/params/deposit', adapter },
gov_proposals: { url: '/cosmos/gov/v1/proposals', adapter: (source: any): PaginatedProposals => {
gov_proposals: { url: '/cosmos/gov/v1/proposals', adapter: async (source: any): Promise<PaginatedProposals> => {
const proposals = source.proposals.map((p:any) => proposalAdapter(p))
return {
proposals,
@@ -42,7 +42,7 @@ export const requests: Partial<RequestRegistry> = {
}},
gov_proposals_proposal_id: {
url: '/cosmos/gov/v1/proposals/{proposal_id}',
adapter: (source: any): {proposal: GovProposal} => {
adapter: async (source: any): Promise<{proposal: GovProposal}> => {
return {
proposal: proposalAdapter(source.proposal)
}
+1 -1
View File
@@ -2,7 +2,7 @@ import fetch from 'cross-fetch';
export async function fetchData<T>(
url: string,
adapter: (source: any) => T
adapter: (source: any) => Promise<T>
): Promise<T> {
const response = await fetch(url);
if (!response.ok) {
+2 -2
View File
@@ -45,7 +45,7 @@ import type { PaginatedTxs, Tx, TxResponse } from '@/types';
import semver from 'semver'
export interface Request<T> {
url: string;
adapter: (source: any) => T;
adapter: (source: any) => Promise<T>;
}
export interface AbstractRegistry {
@@ -154,7 +154,7 @@ export interface RequestRegistry extends AbstractRegistry {
interchain_security_ccv_provider_validator_consumer_addr: Request<{consumer_address: string}>
}
export function adapter<T>(source: any): T {
export function adapter<T>(source: any): Promise<T> {
return source;
}