diff --git a/src/modules/[chain]/cosmwasm/WasmStore.ts b/src/modules/[chain]/cosmwasm/WasmStore.ts index 199a122b..6e753a97 100644 --- a/src/modules/[chain]/cosmwasm/WasmStore.ts +++ b/src/modules/[chain]/cosmwasm/WasmStore.ts @@ -2,7 +2,7 @@ import { BaseRestClient } from "@/libs/client"; import { adapter, type AbstractRegistry, type Request } from "@/libs/registry"; import type { PaginabledAccounts } from "@/types"; import { defineStore } from "pinia"; -import type { CodeInfo, PaginabledCodeInfos, PaginabledContractHistory, PaginabledContracts, PaginabledStates, WasmParam } from "./types"; +import type { CodeInfo, ContractInfo, PaginabledCodeInfos, PaginabledContractHistory, PaginabledContracts, PaginabledContractStates, WasmParam } from "./types"; import { toBase64 } from "@cosmjs/encoding"; import { useBlockchain } from "@/stores"; @@ -11,11 +11,11 @@ export interface WasmRequestRegistry extends AbstractRegistry { cosmwasm_code_id: Request; cosmwasm_code_id_contracts: Request; cosmwasm_param: Request; - cosmwasm_contract_address: Request; + cosmwasm_contract_address: Request<{address: string, contract_info: ContractInfo}>; cosmwasm_contract_address_history: Request; cosmwasm_contract_address_raw_query_data: Request; cosmwasm_contract_address_smart_query_data: Request; - cosmwasm_contract_address_state: Request; + cosmwasm_contract_address_state: Request; } export const DEFAULT: WasmRequestRegistry = { diff --git a/src/modules/[chain]/cosmwasm/[code_id]/contracts.vue b/src/modules/[chain]/cosmwasm/[code_id]/contracts.vue index 560f7dbd..9c4c5da2 100644 --- a/src/modules/[chain]/cosmwasm/[code_id]/contracts.vue +++ b/src/modules/[chain]/cosmwasm/[code_id]/contracts.vue @@ -2,7 +2,10 @@ import { useBlockchain, useFormatter } from '@/stores'; import { useWasmStore } from '../WasmStore'; import { ref } from 'vue'; -import type { PaginabledCodeInfos, PaginabledContracts } from '../types'; +import type { ContractInfo, PaginabledContractStates, PaginabledContracts } from '../types'; +import DynamicComponent from '@/components/dynamic/DynamicComponent.vue'; +import type CustomRadiosVue from '@/plugins/vuetify/@core/components/CustomRadios.vue'; +import type { CustomInputContent } from '@/plugins/vuetify/@core/types'; const props = defineProps(['code_id', 'chain', ]) @@ -12,6 +15,71 @@ const wasmStore = useWasmStore() wasmStore.wasmClient.getWasmCodeContracts(props.code_id).then(x =>{ response.value = x }) +const infoDialog = ref(false) +const stateDialog = ref(false) +const queryDialog = ref(false) +const info = ref({} as ContractInfo) +const state = ref( {} as PaginabledContractStates) +const selected = ref("") + +function showInfo(address: string) { + wasmStore.wasmClient.getWasmContracts(address).then(x => { + info.value = x.contract_info + infoDialog.value = true + }) +} +function showState(address: string) { + wasmStore.wasmClient.getWasmContractStates(address).then(x => { + state.value = x + stateDialog.value = true + }) +} +function showQuery(address: string) { + queryDialog.value = true + selected.value = address + query.value = "" + result.value = "" +} + +function queryContract() { + try{ + + if(selectedRadio.value === 'raw') { + wasmStore.wasmClient.getWasmContractRawQuery(selected.value, query.value).then(x => { + result.value = JSON.stringify(x) + }).catch(err => { + result.value = JSON.stringify(err) + }) + } else { + wasmStore.wasmClient.getWasmContractSmartQuery(selected.value, query.value).then(x => { + result.value = JSON.stringify(x) + }).catch(err => { + result.value = JSON.stringify(err) + }) + } + + } catch(err) { + result.value = JSON.stringify(err) // not works for now + } + // TODO, show error in the result. +} + +const radioContent: CustomInputContent[] = [ + { + title: 'Raw Query', + desc: 'Return raw result', + value: 'raw', + }, + { + title: 'Smart Query', + desc: 'Return structure result if possible', + value: 'smart', + }, +] + +const selectedRadio = ref('raw') +const query = ref("") +const result = ref("") diff --git a/src/modules/[chain]/cosmwasm/types.ts b/src/modules/[chain]/cosmwasm/types.ts index 99fe1ba2..a67e6fc5 100644 --- a/src/modules/[chain]/cosmwasm/types.ts +++ b/src/modules/[chain]/cosmwasm/types.ts @@ -11,6 +11,22 @@ export interface CodeInfo { } } +export interface ContractInfo { + code_id: string, + creator: string, + admin: string, + label: string, + created: { + block_height: string, + tx_index: string + }, + ibc_port_id: string, + extension: { + type_url: string, + value: string + } + } + export interface WasmParam { params: { code_upload_access: { @@ -41,7 +57,7 @@ export interface PaginabledContractHistory extends PaginatedResponse { entries: HistoryEntry[] } -export interface PaginabledStates extends PaginatedResponse { +export interface PaginabledContractStates extends PaginatedResponse { models: Models[] }