diff --git a/chains/mainnet/neutron.json b/chains/mainnet/neutron.json index 864e67f1..76fc3dd6 100644 --- a/chains/mainnet/neutron.json +++ b/chains/mainnet/neutron.json @@ -11,7 +11,7 @@ {"provider": "Allnodes", "address": "https://neutron-rpc.publicnode.com:443"} ], "provider_chain": { - "api": ["https://api-cosmoshub-ia.cosmosia.notional.ventures"] + "api": ["https://rest.cosmos.directory/cosmoshub"] }, "features": ["dashboard", "blocks", "ibc", "cosmwasm", "uptime", "parameters", "state-sync", "consensus", "supply", "widget"], "sdk_version": "0.45.1", diff --git a/src/libs/address.ts b/src/libs/address.ts index 54695c71..1bd5f46b 100644 --- a/src/libs/address.ts +++ b/src/libs/address.ts @@ -1,6 +1,7 @@ import { fromBase64, fromBech32, + toBase64, toBech32, toHex, } from '@cosmjs/encoding'; @@ -42,6 +43,23 @@ export function consensusPubkeyToHexAddress(consensusPubkey?: { return raw; } +// not work as expected, will fix later or remove +export function consumerKeyToBase64Address(consumerKey?: Record) { + + if (!consumerKey) return ''; + let raw = ''; + if (consumerKey.ed25519) { + const pubkey = fromBase64(consumerKey.ed25519); + if (pubkey) return toBase64(sha256(pubkey)).slice(0, 40); + } + + if (consumerKey.secp256k1) { + const pubkey = fromBase64(consumerKey.secp256k1); + if (pubkey) return toBase64(new Ripemd160().update(sha256(pubkey)).digest()); + } + return raw; +} + export function pubKeyToValcons( consensusPubkey: { '@type': string; key: string }, prefix: string @@ -57,7 +75,7 @@ export function pubKeyToValcons( } export function valconsToBase64(address: string) { - if (address) return toHex(fromBech32(address).data).toUpperCase(); + if (address) return toBase64(fromBech32(address).data); return ''; } diff --git a/src/libs/api/index.ts b/src/libs/api/index.ts index 8e1170e4..ff8efdcc 100644 --- a/src/libs/api/index.ts +++ b/src/libs/api/index.ts @@ -199,4 +199,8 @@ export const DEFAULT: RequestRegistry = { url: '/interchain_security/ccv/provider/opted_in_validators/{chain_id}', adapter, }, + interchain_security_consumer_validators: { + url: '/interchain_security/ccv/provider/consumer_validators/{chain_id}', + adapter, + }, }; diff --git a/src/libs/api/registry.ts b/src/libs/api/registry.ts index 462a3b33..2787c9b1 100644 --- a/src/libs/api/registry.ts +++ b/src/libs/api/registry.ts @@ -153,6 +153,7 @@ export interface RequestRegistry extends AbstractRegistry { ibc_core_connection_connections_connection_id_client_state: Request; interchain_security_ccv_provider_validator_consumer_addr: Request<{consumer_address: string}> interchain_security_provider_opted_in_validators: Request<{validators_provider_addresses: string[]}> + interchain_security_consumer_validators: Request<{validators: {provider_address: string, consumer_key: {ed25519: string}, power: string}[]}> } export function adapter(source: any): Promise { diff --git a/src/libs/client.ts b/src/libs/client.ts index 13a9ba13..932ea2f1 100644 --- a/src/libs/client.ts +++ b/src/libs/client.ts @@ -365,4 +365,7 @@ export class CosmosRestClient extends BaseRestClient { async getInterchainSecurityProviderOptedInValidators(chain_id: string) { return this.request(this.registry.interchain_security_provider_opted_in_validators, {chain_id}); } + async getInterchainSecurityConsumerValidators(chain_id: string) { + return this.request(this.registry.interchain_security_consumer_validators, {chain_id}); + } } diff --git a/src/modules/[chain]/uptime/index.vue b/src/modules/[chain]/uptime/index.vue index 6f0e8383..b9663a0f 100644 --- a/src/modules/[chain]/uptime/index.vue +++ b/src/modules/[chain]/uptime/index.vue @@ -1,6 +1,6 @@