Wallet Client
import { createWalletClient, custom } from 'viem';
import { aurum } from './aurum';
const walletClient = createWalletClient({
transport: custom(aurum.rpcProvider),
});
Sign a Message
const [address] = await walletClient.getAddresses();
const signature = await walletClient.signMessage({
account: address,
message: 'Hello!',
});
Send a Transaction
import { parseEther } from 'viem';
const [address] = await walletClient.getAddresses();
const hash = await walletClient.sendTransaction({
account: address,
to: '0x...',
value: parseEther('0.01'),
});
Write to a Contract
const hash = await walletClient.writeContract({
address: tokenAddress,
abi: erc20Abi,
functionName: 'transfer',
args: [recipient, amount],
account: address,
});
Public Client
Use a separate public client for read operations
import { createPublicClient, http } from 'viem';
const publicClient = createPublicClient({
transport: http('https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY'),
});
const balance = await publicClient.readContract({
address: tokenAddress,
abi: erc20Abi,
functionName: 'balanceOf',
args: [walletAddress],
});
When creating a viem public client, use a dedicated RPC URL from a provider like Alemchy or Infura instead of using aurum.rpcProvider.