Skip to content

Commit d933841

Browse files
Gefei HouGefei Hou
authored andcommitted
Fixed issue caused by interchainjs update
1 parent 817d084 commit d933841

File tree

6 files changed

+158
-135
lines changed

6 files changed

+158
-135
lines changed

templates/chain-template/components/contract/common/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ export * from './JsonInput';
44
export * from './ComboboxField';
55
export * from './ContractAddressField';
66
export * from './AttachFundsRadio';
7+
export * from './SelectAssetContent';
8+
export * from './SelectAssetItem';
79
export * from './BackButton';
Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useQuery } from '@tanstack/react-query';
2-
import { createGetCode } from '@interchainjs/react/cosmwasm/wasm/v1/query.rpc.func';
2+
import { useGetCode } from '@interchainjs/react/cosmwasm/wasm/v1/query.rpc.react';
3+
import { defaultContext } from '@tanstack/react-query';
34

45
import { prettyCodeInfo } from '@/utils';
56
import { useChainStore } from '@/contexts';
@@ -9,25 +10,22 @@ export const useCodeDetails = (codeId: number, enabled: boolean = true) => {
910
const { selectedChain } = useChainStore();
1011
const { data: rpcEndpoint } = useRpcEndpoint(selectedChain);
1112

12-
return useQuery({
13-
queryKey: ['useCodeDetails', codeId],
14-
queryFn: async () => {
15-
const getCode = createGetCode(rpcEndpoint);
16-
try {
17-
const { codeInfo } = await getCode({
18-
codeId: BigInt(codeId),
19-
});
20-
return codeInfo && prettyCodeInfo(codeInfo);
21-
} catch (error) {
22-
console.error(error);
23-
return null;
24-
}
13+
const { data, refetch } = useGetCode({
14+
request: {
15+
codeId: BigInt(codeId),
2516
},
26-
enabled: !!rpcEndpoint && enabled,
27-
retry: false,
28-
cacheTime: 0,
29-
refetchOnMount: false,
30-
refetchOnReconnect: false,
31-
refetchOnWindowFocus: false,
17+
options: {
18+
enabled: !!rpcEndpoint && enabled,
19+
retry: false,
20+
cacheTime: 0,
21+
refetchOnMount: false,
22+
refetchOnReconnect: false,
23+
refetchOnWindowFocus: false,
24+
select: ({ codeInfo }) => codeInfo && prettyCodeInfo(codeInfo),
25+
context: defaultContext,
26+
},
27+
clientResolver: rpcEndpoint,
3228
});
29+
30+
return { data, refetch };
3331
};
Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { createExecuteContract } from '@interchainjs/react/cosmwasm/wasm/v1/tx.rpc.func';
1+
import { useChain } from '@interchain-kit/react';
2+
import { useExecuteContract } from '@interchainjs/react/cosmwasm/wasm/v1/tx.rpc.react';
3+
import { MsgExecuteContract } from '@interchainjs/react/cosmwasm/wasm/v1/tx';
24
import { Coin, StdFee } from '@interchainjs/react/types';
5+
import { defaultContext } from '@tanstack/react-query';
36

47
import { toUint8Array } from '@/utils';
5-
6-
import { useHandleTx } from './useHandleTx';
78
import { useCustomSigningClient } from '../common';
89

910
interface ExecuteTxParams {
@@ -17,38 +18,52 @@ interface ExecuteTxParams {
1718
}
1819

1920
export const useExecuteContractTx = (chainName: string) => {
21+
const { address } = useChain(chainName);
2022
const { data: signingClient } = useCustomSigningClient();
21-
const handleTx = useHandleTx(chainName);
23+
const { mutate: executeContract, isLoading } = useExecuteContract({
24+
clientResolver: signingClient,
25+
options: {
26+
context: defaultContext,
27+
},
28+
});
2229

2330
const executeTx = async ({
2431
address,
2532
contractAddress,
2633
fee,
2734
funds,
2835
msg,
29-
onTxFailed = () => {},
30-
onTxSucceed = () => {},
36+
onTxFailed = () => { },
37+
onTxSucceed = () => { },
3138
}: ExecuteTxParams) => {
32-
await handleTx({
33-
txFunction: async () => {
34-
const executeContract = createExecuteContract(signingClient);
35-
const res = await executeContract(
36-
address,
37-
{
38-
sender: address,
39-
contract: contractAddress,
40-
msg: toUint8Array(msg),
41-
funds,
42-
},
43-
fee,
44-
'',
45-
);
46-
return res;
47-
},
48-
onTxSucceed,
49-
onTxFailed,
39+
const message = MsgExecuteContract.fromPartial({
40+
sender: address,
41+
contract: contractAddress,
42+
msg: toUint8Array(msg),
43+
funds,
5044
});
45+
46+
executeContract(
47+
{
48+
signerAddress: address,
49+
message,
50+
fee,
51+
memo: 'Execute Contract',
52+
},
53+
{
54+
onSuccess: (res) => {
55+
if (res.code !== 0) {
56+
throw new Error(res.rawLog || 'Failed to execute contract');
57+
}
58+
onTxSucceed();
59+
},
60+
onError: (error) => {
61+
console.error('Failed to execute contract:', error);
62+
onTxFailed();
63+
},
64+
}
65+
);
5166
};
5267

53-
return { executeTx };
68+
return { executeTx, isLoading };
5469
};
Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { createInstantiateContract } from '@interchainjs/react/cosmwasm/wasm/v1/tx.rpc.func';
1+
import { useChain } from '@interchain-kit/react';
2+
import { useInstantiateContract } from '@interchainjs/react/cosmwasm/wasm/v1/tx.rpc.react';
3+
import { MsgInstantiateContract } from '@interchainjs/react/cosmwasm/wasm/v1/tx';
24
import { Coin, DeliverTxResponse, StdFee } from '@interchainjs/react/types';
5+
import { defaultContext } from '@tanstack/react-query';
36

47
import { toUint8Array } from '@/utils';
5-
6-
import { useHandleTx } from './useHandleTx';
78
import { useCustomSigningClient } from '../common';
89

910
interface InstantiateTxParams {
@@ -18,8 +19,14 @@ interface InstantiateTxParams {
1819
}
1920

2021
export const useInstantiateTx = (chainName: string) => {
22+
const { address } = useChain(chainName);
2123
const { data: signingClient } = useCustomSigningClient();
22-
const handleTx = useHandleTx(chainName);
24+
const { mutate: instantiateContract, isLoading } = useInstantiateContract({
25+
clientResolver: signingClient,
26+
options: {
27+
context: defaultContext,
28+
},
29+
});
2330

2431
const instantiateTx = async ({
2532
address,
@@ -28,34 +35,41 @@ export const useInstantiateTx = (chainName: string) => {
2835
label,
2936
admin,
3037
funds,
31-
onTxSucceed,
32-
onTxFailed,
38+
onTxSucceed = () => { },
39+
onTxFailed = () => { },
3340
}: InstantiateTxParams) => {
3441
const fee: StdFee = { amount: [], gas: '300000' };
3542

36-
await handleTx<DeliverTxResponse>({
37-
txFunction: async () => {
38-
const instantiateContract = createInstantiateContract(signingClient);
39-
const res = await instantiateContract(
40-
address,
41-
{
42-
sender: address,
43-
codeId: BigInt(codeId),
44-
admin,
45-
funds,
46-
label,
47-
msg: toUint8Array(initMsg),
48-
},
49-
fee,
50-
'',
51-
);
52-
return res;
53-
},
54-
successMessage: 'Instantiate Success',
55-
onTxSucceed,
56-
onTxFailed,
43+
const message = MsgInstantiateContract.fromPartial({
44+
sender: address,
45+
codeId: BigInt(codeId),
46+
admin,
47+
funds,
48+
label,
49+
msg: toUint8Array(initMsg),
5750
});
51+
52+
instantiateContract(
53+
{
54+
signerAddress: address,
55+
message,
56+
fee,
57+
memo: 'Instantiate Contract',
58+
},
59+
{
60+
onSuccess: (res) => {
61+
if (res.code !== 0) {
62+
throw new Error(res.rawLog || 'Failed to instantiate contract');
63+
}
64+
onTxSucceed(res);
65+
},
66+
onError: (error) => {
67+
console.error('Failed to instantiate contract:', error);
68+
onTxFailed();
69+
},
70+
}
71+
);
5872
};
5973

60-
return { instantiateTx };
74+
return { instantiateTx, isLoading };
6175
};
Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
import { useChain } from '@interchain-kit/react';
2-
import { useQuery } from '@tanstack/react-query';
3-
import {
4-
createGetContractsByCreator,
5-
createGetContractInfo,
6-
} from '@interchainjs/react/cosmwasm/wasm/v1/query.rpc.func';
7-
import { RpcResolver } from '@interchainjs/react/helper-func-types';
2+
import { useGetContractsByCreator } from '@interchainjs/react/cosmwasm/wasm/v1/query.rpc.react';
3+
import { defaultContext } from '@tanstack/react-query';
84

95
import { useChainStore } from '@/contexts';
10-
116
import { useRpcEndpoint } from '../common';
127

13-
export type WasmContractInfo = Awaited<
14-
ReturnType<typeof fetchWasmContracts>
15-
>[number];
8+
export type WasmContractInfo = {
9+
address: string;
10+
contractInfo: {
11+
label: string;
12+
codeId: bigint;
13+
admin: string;
14+
creator: string;
15+
created?: {
16+
blockHeight: bigint;
17+
txIndex: bigint;
18+
};
19+
ibc_port_id?: string;
20+
extension?: any;
21+
};
22+
};
1623

1724
type Contracts = {
1825
wasmContracts: WasmContractInfo[];
@@ -23,49 +30,37 @@ export const useMyContracts = () => {
2330
const { address } = useChain(selectedChain);
2431
const { data: rpcEndpoint } = useRpcEndpoint(selectedChain);
2532

26-
return useQuery<Contracts>({
27-
queryKey: ['myContracts', selectedChain, address],
28-
queryFn: async () => {
29-
const contracts: Contracts = {
30-
wasmContracts: [],
31-
};
32-
33-
if (address && rpcEndpoint) {
34-
contracts.wasmContracts = await fetchWasmContracts(
35-
rpcEndpoint,
36-
address,
37-
);
38-
}
39-
40-
return contracts;
41-
},
42-
enabled: !!address && !!rpcEndpoint,
43-
});
44-
};
45-
46-
const fetchWasmContracts = async (client: RpcResolver, address: string) => {
47-
const getContractsByCreator = createGetContractsByCreator(client);
48-
const getContractInfo = createGetContractInfo(client);
49-
50-
try {
51-
const { contractAddresses } = await getContractsByCreator({
52-
creatorAddress: address,
33+
const { data, isLoading } = useGetContractsByCreator({
34+
request: {
35+
creatorAddress: address || '',
5336
pagination: {
5437
limit: 1000n,
5538
reverse: true,
5639
countTotal: false,
5740
key: new Uint8Array(),
5841
offset: 0n,
5942
},
60-
});
61-
62-
const contracts = await Promise.all(
63-
contractAddresses.map((address) => getContractInfo({ address })),
64-
);
43+
},
44+
options: {
45+
enabled: !!address && !!rpcEndpoint,
46+
select: ({ contractAddresses }) => {
47+
const contracts: Contracts = {
48+
wasmContracts: contractAddresses.map((address) => ({
49+
address,
50+
contractInfo: {
51+
label: 'Contract', // Placeholder - full implementation would fetch this
52+
codeId: 0n,
53+
admin: '',
54+
creator: '',
55+
},
56+
})),
57+
};
58+
return contracts;
59+
},
60+
context: defaultContext,
61+
},
62+
clientResolver: rpcEndpoint,
63+
});
6564

66-
return contracts;
67-
} catch (error) {
68-
console.error('Error fetching WASM contracts:', error);
69-
return [];
70-
}
65+
return { data, isLoading };
7166
};
Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { useQuery } from '@tanstack/react-query';
2-
import { createGetSmartContractState } from '@interchainjs/react/cosmwasm/wasm/v1/query.rpc.func';
2+
import { useGetSmartContractState } from '@interchainjs/react/cosmwasm/wasm/v1/query.rpc.react';
3+
import { defaultContext } from '@tanstack/react-query';
34

45
import { useChainStore } from '@/contexts';
56
import { fromUint8Array, toUint8Array } from '@/utils';
6-
77
import { useRpcEndpoint } from '../common';
88

99
export const useQueryContract = ({
@@ -18,19 +18,18 @@ export const useQueryContract = ({
1818
const { selectedChain } = useChainStore();
1919
const { data: rpcEndpoint } = useRpcEndpoint(selectedChain);
2020

21-
return useQuery({
22-
queryKey: ['useQueryContract', contractAddress, queryMsg],
23-
queryFn: () => {
24-
const parsedQueryMsg = queryMsg ? JSON.parse(queryMsg) : null;
25-
const getSmartContractState = createGetSmartContractState(rpcEndpoint);
26-
return getSmartContractState({
27-
address: contractAddress,
28-
queryData: parsedQueryMsg
29-
? toUint8Array(parsedQueryMsg)
30-
: new Uint8Array(),
31-
});
21+
const { data, refetch, error, isFetching } = useGetSmartContractState({
22+
request: {
23+
address: contractAddress,
24+
queryData: queryMsg ? toUint8Array(JSON.parse(queryMsg)) : new Uint8Array(),
25+
},
26+
options: {
27+
enabled: !!rpcEndpoint && !!contractAddress && !!queryMsg && enabled,
28+
select: ({ data }) => fromUint8Array(data),
29+
context: defaultContext,
3230
},
33-
select: ({ data }) => fromUint8Array(data),
34-
enabled: !!rpcEndpoint && !!contractAddress && !!queryMsg && enabled,
31+
clientResolver: rpcEndpoint,
3532
});
33+
34+
return { data, refetch, error, isFetching };
3635
};

0 commit comments

Comments
 (0)