forked from cerc-io/cosmos-explorer
Merge branch 'master' of https://github.com/ping-pub/explorer
This commit is contained in:
commit
92219fad55
27
chains/mainnet/nolus.json
Normal file
27
chains/mainnet/nolus.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"chain_name": "nolus",
|
||||
"coingecko": "nolus",
|
||||
"api": [
|
||||
{"provider": "Nolus", "address": "https://pirin-cl.nolus.network:1317"},
|
||||
{"provider": "LavenderFive", "address": "https://nolus-api.lavenderfive.com:443"},
|
||||
{"provider": "Allnodes", "address": "https://nolus-rest.publicnode.com"}
|
||||
],
|
||||
"rpc": [
|
||||
{"provider": "Nolus", "address": "https://pirin-cl.nolus.network:26657"},
|
||||
{"provider": "LavenderFive", "address": "https://nolus-rpc.lavenderfive.com:443"},
|
||||
{"provider": "Allnodes", "address": "https://nolus-rpc.publicnode.com:443"}
|
||||
],
|
||||
"snapshot_provider": "",
|
||||
"sdk_version": "v0.47.6",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "0",
|
||||
"addr_prefix": "nolus",
|
||||
"logo": "/logos/nolus.svg",
|
||||
"assets": [{
|
||||
"base": "unls",
|
||||
"symbol": "NLS",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "nolus",
|
||||
"logo": "/logos/nolus.svg"
|
||||
}]
|
||||
}
|
@ -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()
|
||||
|
@ -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
src/libs/clients/nolus.ts
Normal file
26
src/libs/clients/nolus.ts
Normal 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 }
|
||||
};
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
15
yarn.lock
15
yarn.lock
@ -2184,10 +2184,17 @@
|
||||
estree-walker "^2.0.2"
|
||||
picomatch "^2.3.1"
|
||||
|
||||
<<<<<<< HEAD
|
||||
"@shikijs/core@1.0.0-beta.0":
|
||||
version "1.0.0-beta.0"
|
||||
resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.0.0-beta.0.tgz#e38a10ce3398342553e37fe9b10db61fc00cc186"
|
||||
integrity sha512-uicyrkx379Q5sxQuGV3kduHPWIAkjxmeA5A4J6syscx8wiEyIV06i/Q6s9GeKLCb857Hi90H8e/FoFSbcjnZsw==
|
||||
=======
|
||||
"@shikijs/core@1.0.0-beta.1":
|
||||
version "1.0.0-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.0.0-beta.1.tgz#40d21605cfc30c9d83bdc3c03414d478930ec30c"
|
||||
integrity sha512-z3gdznaRj/DJSLQdR2Gdx6AB3e5+Il/kSGdLTGHI7HnalgPL15RbGgBSdLHW8rKAz4+dezAcTdnxm8z6YTu7nA==
|
||||
>>>>>>> 15c86909d0549edeef237111754f32c046a84ddf
|
||||
|
||||
"@sinclair/typebox@^0.24.1":
|
||||
version "0.24.51"
|
||||
@ -6026,11 +6033,19 @@ shelljs@0.8.5:
|
||||
rechoir "^0.6.2"
|
||||
|
||||
shiki@^1.0.0-beta.0:
|
||||
<<<<<<< HEAD
|
||||
version "1.0.0-beta.0"
|
||||
resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.0.0-beta.0.tgz#34d5d672fbc0f5ac65892cd681404fefaa565c8f"
|
||||
integrity sha512-CcP0IhEDQ3LWfJC44cfxfId9pjJi9Nephl8DxgrL4tKWprI/oz6deZyL0vB+XWxhTx/1uonzWQKaSQPwKx5dTA==
|
||||
dependencies:
|
||||
"@shikijs/core" "1.0.0-beta.0"
|
||||
=======
|
||||
version "1.0.0-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.0.0-beta.1.tgz#fbff19e1ba180e3093f274b00fd6578237d157bd"
|
||||
integrity sha512-iq32WxjemJVlAHg5HjYoL1qCxGmvyh3Z8kr2E/gMTQdcxyXxTpMhahIC7myxFBapAk9o8QN8mxCpr4JT5rqpRQ==
|
||||
dependencies:
|
||||
"@shikijs/core" "1.0.0-beta.1"
|
||||
>>>>>>> 15c86909d0549edeef237111754f32c046a84ddf
|
||||
|
||||
side-channel@^1.0.4:
|
||||
version "1.0.4"
|
||||
|
Loading…
Reference in New Issue
Block a user