Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ jobs:
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'

- name: Install dependencies
run: pnpm install
Expand Down
25 changes: 21 additions & 4 deletions example-next/next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,30 @@ await import('./src/env.js');

/** @type {import("next").NextConfig} */
const config = {
webpack: (config) => {
// Ignore build errors related to HeartbeatWorker
typescript: {
ignoreBuildErrors: true,
},
eslint: {
ignoreDuringBuilds: true,
},

webpack: (config, { dev, isServer, webpack }) => {
config.externals.push('pino-pretty', 'lokijs', 'encoding');

// Add IgnorePlugin to ignore HeartbeatWorker files
config.plugins.push(
new webpack.IgnorePlugin({
resourceRegExp: /HeartbeatWorker\.js$/,
}),
);

return config;
},
experimental: {
turbo: {},
},
// Disable turbo to use standard webpack bundling
// experimental: {
// turbo: {},
// },
};

export default config;
11 changes: 11 additions & 0 deletions example-next/src/components/Example.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
useCurrentWallet,
useNetwork,
useWallet,
useWalletCapabilities,
} from '@tangled3/react';
import { useEffect, useState } from 'react';
import { ConnectedAccounts } from './ConnectedAccounts';
Expand Down Expand Up @@ -41,6 +42,16 @@ const CurrentAccountAndWallet = () => {
const { switchNetworkAsync, isPending } = useNetwork();
const chains = useChains(currentAccount?.chainType);
const [selectedChain, setSelectedChain] = useState(currentAccount?.chainId);
const { data: walletCapabilities } = useWalletCapabilities(
Number(currentAccount?.chainId ?? '1'),
currentAccount?.address ?? '',
);
console.log({ walletCapabilities, isWalletCapabilitiesLoading, isWalletCapabilitiesError });
// useEffect(() => {
// if (currentAccount?.chainType === 'evm' && currentAccount?.wallet && connectionOrConfig) {
// getWalletCapabilities(connectionOrConfig.wagmiConfig, currentAccount.chainId, currentAccount.address).then(setWalletCapabilities);
// }
// }, [currentAccount?.chainType, currentAccount?.wallet, currentAccount?.chainId, currentAccount?.address]);

const handleChainChange = (chainId: ChainId) => {
// optimistically update UI immediately
Expand Down
6 changes: 6 additions & 0 deletions packages/react/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# @tangled3/react

## 1.17.23

### Patch Changes

- add/pectra changes

## 1.17.22

### Patch Changes
Expand Down
12 changes: 6 additions & 6 deletions packages/react/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@tangled3/react",
"private": false,
"version": "1.17.22",
"version": "1.17.23",
"type": "module",
"license": "MIT",
"main": "./src/index.ts",
Expand Down Expand Up @@ -41,10 +41,10 @@
"@cosmos-kit/keplr": "^2.12.2",
"@cosmos-kit/leap": "^2.14.1",
"@cosmos-kit/xdefi": "^2.10.2",
"@matchain/matchid-sdk-react": "^0.1.52",
"@injectivelabs/exceptions": "^1.14.41",
"@injectivelabs/sdk-ts": "^1.14.41",
"@injectivelabs/utils": "^1.14.41",
"@matchain/matchid-sdk-react": "^0.1.52",
"@mysten/dapp-kit": "^0.14.14",
"@mysten/sui": "^1.4.0",
"@routerprotocol/router-chain-sdk-ts": "0.8.70-beta-0.2",
Expand All @@ -57,7 +57,7 @@
"@tronweb3/tronwallet-abstract-adapter": "^1.1.8",
"@tronweb3/tronwallet-adapter-walletconnect": "^2.0.2",
"@tronweb3/tronwallet-adapters": "^1.2.7",
"@wagmi/core": "^2.16.3",
"@wagmi/core": "^2.17.2",
"@walletconnect/modal": "^2.7.0",
"@walletconnect/sign-client": "^2.17.5",
"@walletconnect/universal-provider": "^2.19.1",
Expand All @@ -66,8 +66,8 @@
"react-dom": "^18.2.0",
"tronweb": "6.0.1",
"usehooks-ts": "^3.1.0",
"viem": "^2.22.2",
"wagmi": "2.14.6",
"viem": "^2.30.5",
"wagmi": "^2.15.4",
"zustand": "^4.5.2"
},
"devDependencies": {
Expand All @@ -83,7 +83,7 @@
},
"peerDependencies": {
"@tanstack/react-query": "^5.44.0",
"@wagmi/core": "^2.11.0",
"@wagmi/core": "^2.17.2",
"react": ">=18",
"react-dom": ">=18",
"viem": "2.22.2",
Expand Down
9 changes: 0 additions & 9 deletions packages/react/src/actions/evm/getEVMToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,12 @@ export const getEVMTokenBalanceAndAllowance = async (
args: [account as Address, spender as Address],
});
}
console.log('yoyoyo', calls);
const balanceAndAllowance = await multicall(wagmiConfig, {
contracts: calls,
chainId: Number(chainId),
allowFailure: false,
});

// const balance = await readContract(wagmiConfig,{
// address: address as Address,
// abi: erc20Abi,
// functionName: 'balanceOf',
// args: [account as Address],
// chainId,
// });
console.log('final yoyoyo', balanceAndAllowance);
return {
balance: BigInt(balanceAndAllowance[0]),
allowance: BigInt(balanceAndAllowance[1] ?? 0),
Expand Down
13 changes: 13 additions & 0 deletions packages/react/src/actions/evm/getWalletCapabilities.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { getCapabilities } from '@wagmi/core';
import { Config } from 'wagmi';

export const getWalletCapabilities = async (wagmiConfig: Config, chainId: number, address: string) => {
const capabilities = await getCapabilities<Config, number>(wagmiConfig, {
chainId,
account: address as `0x${string}`,
});

// console.log(capabilities, wagmiConfig.chains.map(chain => [chain.id, chain.rpcUrls]));

return capabilities;
};
1 change: 1 addition & 0 deletions packages/react/src/actions/evm/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './getEVMToken.js';
export * from './getInjectedConnector.js';
export * from './getWalletCapabilities.js';
40 changes: 37 additions & 3 deletions packages/react/src/actions/sendTransaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { Transaction as SuiTransaction } from '@mysten/sui/transactions';
import type { Network as RouterChainNetwork } from '@routerprotocol/router-chain-sdk-ts';
import { VersionedTransaction as SolanaVersionedTransaction } from '@solana/web3.js';
import { sendTransaction as sendEVMTransaction } from '@wagmi/core';
import { sendCalls as sendEVMCalls, sendTransaction as sendEVMTransaction, waitForCallsStatus } from '@wagmi/core';
import { Chain, Address as EVMAddress } from 'viem';
import { ChainData, ChainType, ConnectionOrConfig } from '../types/index.js';
import { WalletInstance } from '../types/wallet.js';
Expand All @@ -19,16 +19,21 @@
from: string;
value: bigint;
args: TransactionArgs<CData['type']>;
overrides?: any;

Check warning on line 22 in packages/react/src/actions/sendTransaction.ts

View workflow job for this annotation

GitHub Actions / build (20)

Unexpected any. Specify a different type
config: ConnectionOrConfig & {
connector: WalletInstance<CData['type']>;
};
walletClient?: any;

Check warning on line 26 in packages/react/src/actions/sendTransaction.ts

View workflow job for this annotation

GitHub Actions / build (20)

Unexpected any. Specify a different type
};

export type TransactionArgs<CType extends ChainType> = CType extends 'evm' | 'tron'
? {
calldata: string;
callsToPrepend?: Array<{
to: string;
value: bigint;
data: string;
}>;
routerChainArgs?: {
executeMsg: object;
funds: Array<{ denom: string; amount: string }>;
Expand All @@ -46,7 +51,7 @@
? {
messages: Array<{
readonly typeUrl: string;
readonly value: any;

Check warning on line 54 in packages/react/src/actions/sendTransaction.ts

View workflow job for this annotation

GitHub Actions / build (20)

Unexpected any. Specify a different type
}>;
memo?: string;
routerChainArgs?: {
Expand All @@ -63,7 +68,7 @@
: never;

// eslint-disable-next-line @typescript-eslint/no-unused-vars
export type SendTransactionReturnType<C extends ChainType> = { txHash: string };
export type SendTransactionReturnType<C extends ChainType> = { txHash: string; batchId?: string };

export type SendTransactionToChainFunction = <CData extends ChainData>(
params: SendTransactionParams<CData>,
Expand All @@ -89,7 +94,7 @@
walletClient,
}) => {
if (chain.type === 'evm') {
const { calldata } = args as TransactionArgs<'evm'>;
const { calldata, callsToPrepend } = args as TransactionArgs<'evm'>;

if (overrides?.walletType === 'evm') {
const { sendEthTxnToRouterChainPf, getNetworkInfo, MsgExecuteCwContract, getRouterSignerAddress } = await import(
Expand Down Expand Up @@ -153,6 +158,34 @@
}
}

if (callsToPrepend) {
const { id } = await sendEVMCalls(config.wagmiConfig, {
calls: [
...callsToPrepend,
{
to: to as EVMAddress,
value,
data: calldata as `0x${string}`,
},
],
account: from as EVMAddress,
chainId: chain.id,
...overrides,
});
const { status, receipts } = await waitForCallsStatus(config.wagmiConfig, {
id,
});

if (status === 'success') {
return {
txHash: receipts![receipts!.length - 1].transactionHash,
batchId: id,
};
} else {
throw new Error('Transaction failed');
}
}

// send transaction to EVM chain
const txHash = await sendEVMTransaction(config.wagmiConfig, {
account: from as EVMAddress,
Expand All @@ -165,6 +198,7 @@

return {
txHash,
batchId: undefined,
};
}

Expand Down
28 changes: 18 additions & 10 deletions packages/react/src/actions/waitForTransaction.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate';
import { waitForTransactionReceipt } from '@wagmi/core';
import { waitForCallsStatus, waitForTransactionReceipt } from '@wagmi/core';
import { ReplacementReturnType } from 'viem';
import { ChainData, ChainType, ConnectionOrConfig, TransactionReceipt } from '../types/index.js';
import { pollCallback } from '../utils/index.js';
Expand All @@ -21,10 +21,11 @@
? {
maxSupportedTransactionVersion: number;
}
: any);

Check warning on line 24 in packages/react/src/actions/waitForTransaction.ts

View workflow job for this annotation

GitHub Actions / build (20)

Unexpected any. Specify a different type

export type DefaultTransactionParams = {
txHash: string;
batchId?: string;
};

// eslint-disable-next-line @typescript-eslint/no-unused-vars
Expand Down Expand Up @@ -52,16 +53,23 @@
*/
export const waitForTransaction = (async ({ chain, config, overrides, transactionParams }) => {
if (chain.type === 'evm') {
const { txHash } = transactionParams as TransactionParams<'evm'>;
const { txHash, batchId } = transactionParams as TransactionParams<'evm'>;
const evmOverrides = (overrides || {}) as WatchTransactionOverrides<'evm'>;

const receipt = await waitForTransactionReceipt(config.wagmiConfig, {
hash: txHash as `0x${string}`,
chainId: chain.id,

...evmOverrides,
});
return receipt;
if (!batchId && txHash != '0x') {
const receipt = await waitForTransactionReceipt(config.wagmiConfig, {
hash: txHash as `0x${string}`,
chainId: chain.id,

...evmOverrides,
});
return receipt;
}
if (batchId) {
const { receipts } = await waitForCallsStatus(config.wagmiConfig, {
id: batchId,
});
return receipts;
}
}

if (chain.type === 'tron') {
Expand Down
1 change: 1 addition & 0 deletions packages/react/src/hooks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ export * from './useTronContext.js';
export * from './useTronStore.js';
export * from './useWaitForTransaction.js';
export * from './useWallet.js';
export * from './useWalletCapabilities.js';
export * from './useWallets.js';
17 changes: 17 additions & 0 deletions packages/react/src/hooks/useWalletCapabilities.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { useQuery } from '@tanstack/react-query';
import { getWalletCapabilities } from '../actions/evm/index.js';
import { useConnectionOrConfig } from './useConnectionOrConfig.js';

export const useWalletCapabilities = (chainId: number, address: string) => {
const connectionOrConfig = useConnectionOrConfig();
return useQuery({
queryKey: ['walletCapabilities', chainId, address],
queryFn: () => {
if (!connectionOrConfig?.wagmiConfig) {
throw new Error('No wagmi config found');
}
return getWalletCapabilities(connectionOrConfig.wagmiConfig, chainId, address);
},
enabled: !!connectionOrConfig?.wagmiConfig && !!chainId && !!address,
});
};
2 changes: 1 addition & 1 deletion packages/react/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ export type GetTokenMetadataParams = {
};

export type TransactionReceipt<C extends ChainType> = C extends 'evm'
? EVMTxReceipt
? EVMTxReceipt | EVMTxReceipt[]
: C extends 'tron'
? TronWebTypes.TransactionInfo
: C extends 'sui'
Expand Down
Loading
Loading