diff --git a/src/libs/api/registry.ts b/src/libs/api/registry.ts index 2787c9b1..aa355443 100644 --- a/src/libs/api/registry.ts +++ b/src/libs/api/registry.ts @@ -5,7 +5,11 @@ import type { Coin, ConnectionWithProof, DenomTrace, + Group, + GroupProposal, + GroupTallyResult, NodeInfo, + PageResponse, PaginabledAccounts, PaginatedIBCChannels, PaginatedIBCConnections, @@ -126,6 +130,13 @@ export interface RequestRegistry extends AbstractRegistry { params: Request<{param: any}>; + group_groups: Request>; + group_groups_by_admin: Request>; + group_groups_by_member: Request>; + group_proposal: Request<{ proposal: GroupProposal }>; + group_proposal_tally: Request<{ tally: GroupTallyResult }>; + group_proposals_by_group_policy: Request>; + tx_txs: Request; tx_txs_block: Request; tx_hash: Request<{ tx: Tx; tx_response: TxResponse }>; diff --git a/src/libs/client.ts b/src/libs/client.ts index 932ea2f1..99275e81 100644 --- a/src/libs/client.ts +++ b/src/libs/client.ts @@ -1,4 +1,4 @@ -import { fetchData } from '@/libs'; +import { fetchData, get } from '@/libs'; import { DEFAULT } from '@/libs'; import { adapter, @@ -30,6 +30,13 @@ export class BaseRestClient { }); return fetchData(url, adapter||request.adapter); } + async get(request: Request, args: Record, query = '' ) { + let url = `${request.url.startsWith("http")?'':this.endpoint}${request.url}${query}`; + Object.keys(args).forEach((k) => { + url = url.replace(`{${k}}`, args[k] || ''); + }); + return get(url); + } } // dynamic all custom request implementations diff --git a/src/libs/http.ts b/src/libs/http.ts index e2723254..49bb967d 100644 --- a/src/libs/http.ts +++ b/src/libs/http.ts @@ -6,7 +6,7 @@ export async function fetchData( ): Promise { const response = await fetch(url); if (!response.ok) { - throw new Error(`HTTP error: ${response.status}`); + throw new Error(`HTTP error: ${response.status}, ${response.statusText}`); } const data = await response.json(); return adapter(data); diff --git a/src/modules/[chain]/cosmwasm/WasmClient.ts b/src/modules/[chain]/cosmwasm/WasmClient.ts index 0feb102c..9b298306 100644 --- a/src/modules/[chain]/cosmwasm/WasmClient.ts +++ b/src/modules/[chain]/cosmwasm/WasmClient.ts @@ -13,6 +13,7 @@ import type { import { toBase64 } from '@cosmjs/encoding'; import { useBlockchain } from '@/stores'; import { PageRequest } from '@/types'; +import { get } from '@/libs'; export interface WasmRequestRegistry extends AbstractRegistry { cosmwasm_code: Request; @@ -103,11 +104,21 @@ export interface WasmRequestRegistry extends AbstractRegistry { } getWasmContractSmartQuery(address: string, query: string) { const query_data = toBase64(new TextEncoder().encode(query)); - return this.request( + return this.get( this.registry.cosmwasm_contract_address_smart_query_data, { address, query_data } ); } + async getWasmContractQueries(address: string) { + const query_data = toBase64(new TextEncoder().encode('{"":""}')); + const {code, message} = await this.get( + this.registry.cosmwasm_contract_address_smart_query_data, + { address, query_data } + ); + let re = /`(\w+)`/g + let x = String(message).match(re) + return code === 2 ? x?.map(e => e.replaceAll('`', '')) : null + } getWasmContractStates(address: string, pr: PageRequest) { if(!pr) pr = new PageRequest() const query = `?${pr.toQueryString()}` diff --git a/src/modules/[chain]/cosmwasm/[code_id]/transactions.vue b/src/modules/[chain]/cosmwasm/[code_id]/transactions.vue index ddf9aac4..7a647216 100644 --- a/src/modules/[chain]/cosmwasm/[code_id]/transactions.vue +++ b/src/modules/[chain]/cosmwasm/[code_id]/transactions.vue @@ -38,10 +38,10 @@ const contractAddress = String(route.query.contract) const history = JSON.parse(localStorage.getItem("contract_history") || "{}") -if(history[chainStore.chainName]) { - if(!history[chainStore.chainName].includes(contractAddress)) { +if (history[chainStore.chainName]) { + if (!history[chainStore.chainName].includes(contractAddress)) { history[chainStore.chainName].push(contractAddress) - if(history[chainStore.chainName].length > 10) { + if (history[chainStore.chainName].length > 10) { history[chainStore.chainName].shift() } } @@ -59,6 +59,14 @@ onMounted(() => { txs.value = res }) + wasmStore.wasmClient.getWasmContractQueries(contractAddress).then(res => { + console.log("queries: ", res) + queries.value = res + if (res && res.length > 0) { + selectQuery(res[0]) + } + }) + }) function pageload(pageNum: number) { @@ -97,6 +105,10 @@ function showQuery() { result.value = ''; } +function selectQuery(method: string) { + query.value = `{"${method}":{}}` +} + function queryContract() { try { if (selectedRadio.value === 'raw') { @@ -137,52 +149,68 @@ const radioContent = [ }, ]; -const selectedRadio = ref('raw'); +const selectedRadio = ref('smart'); const query = ref(''); const result = ref({}); +const queries = ref() +const tab = ref('detail')