Skip to main content

Function: useSmartContract()

useSmartContract<TAbi, TFunctionName, TArgs, TData>(__namedParameters): UseSmartContractResult<TData>

Defined in: packages/ethers-query/src/hooks/useSmartContract.ts:122

Beta

Hook for interacting with smart contracts

Type Parameters

TAbi extends InterfaceAbi

TFunctionName extends string

TArgs extends readonly unknown[] = readonly unknown[]

TData = unknown

Parameters

__namedParameters

UseSmartContractConfig<TAbi, TFunctionName, TArgs>

Returns

UseSmartContractResult<TData>

Object containing contract interaction methods and state

Example

import { useSmartContract } from 'ethers-query'

// ERC20 token example
function TokenBalance() {
const contract = useSmartContract({
address: '0x...',
abi: ['function balanceOf(address) view returns (uint256)'],
functionName: 'balanceOf',
args: ['0x...'] // address to check
})

const fetchBalance = async () => {
try {
const balance = await contract.read()
console.log('Balance:', balance.toString())
} catch (error) {
console.error('Error:', error)
}
}

return (
<div>
<button onClick={fetchBalance} disabled={contract.isLoading}>
Get Balance
</button>
{contract.data && <div>Balance: {contract.data.toString()}</div>}
{contract.error && <div>Error: {contract.error.message}</div>}
</div>
)
}

// Write function example
function Transfer() {
const contract = useSmartContract({
address: '0x...',
abi: ['function transfer(address,uint256)'],
functionName: 'transfer',
args: ['0x...', '1000000000000000000'] // recipient and amount
})

const handleTransfer = async () => {
try {
const tx = await contract.write()
console.log('Transaction:', tx)
} catch (error) {
console.error('Error:', error)
}
}

return (
<button onClick={handleTransfer} disabled={contract.isLoading}>
Transfer
</button>
)
}