Prerequisites
You need Web3 libraries configured with Para authentication.Setup Web3 Libraries
Execute Raw Transactions
- Ethers.js
- Viem
- Wagmi
Copy
Ask AI
import { ethers } from "ethers";
import { ParaEthersSigner } from "@getpara/ethers-v6-integration";
async function executeTransaction(
signer: ParaEthersSigner,
to: string,
data: string,
value?: string
) {
try {
const tx = {
to,
data,
value: value ? ethers.parseEther(value) : 0,
gasLimit: 100000
};
const populatedTx = await signer.populateTransaction(tx);
console.log("Populated transaction:", populatedTx);
const txResponse = await signer.sendTransaction(populatedTx);
console.log("Transaction sent:", txResponse.hash);
const receipt = await txResponse.wait();
console.log("Transaction mined:", receipt);
return {
hash: txResponse.hash,
blockNumber: receipt.blockNumber,
status: receipt.status,
gasUsed: receipt.gasUsed.toString()
};
} catch (error) {
console.error("Transaction failed:", error);
throw error;
}
}
Copy
Ask AI
import { parseEther, encodeFunctionData } from "viem";
async function executeTransaction(
walletClient: any,
account: any,
to: `0x${string}`,
data: `0x${string}`,
value?: string
) {
try {
const request = await walletClient.prepareTransactionRequest({
account,
to,
data,
value: value ? parseEther(value) : 0n,
gas: 100000n
});
console.log("Prepared request:", request);
const hash = await walletClient.sendTransaction(request);
console.log("Transaction sent:", hash);
const receipt = await walletClient.waitForTransactionReceipt({
hash
});
return {
hash,
blockNumber: receipt.blockNumber,
status: receipt.status === "success" ? 1 : 0,
gasUsed: receipt.gasUsed.toString()
};
} catch (error) {
console.error("Transaction failed:", error);
throw error;
}
}
Copy
Ask AI
import { usePrepareTransactionRequest, useSendTransaction } from "wagmi";
import { parseEther } from "viem";
function ExecuteTransaction() {
const { config } = usePrepareTransactionRequest({
to: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
data: "0x",
value: parseEther("0.01"),
gas: 100000n
});
const {
sendTransaction,
data: txData,
isLoading
} = useSendTransaction(config);
const handleExecute = () => {
sendTransaction?.();
};
return (
<div>
<button
onClick={handleExecute}
disabled={!sendTransaction || isLoading}
>
Execute Transaction
</button>
{txData && <p>Transaction: {txData.hash}</p>}
</div>
);
}
Execute Contract Functions
- Ethers.js
- Viem
- Wagmi
Copy
Ask AI
const CONTRACT_ABI = [
"function setGreeting(string memory _greeting)",
"function greet() view returns (string)"
];
async function executeContractFunction(
signer: any,
contractAddress: string,
greeting: string
) {
try {
const contract = new ethers.Contract(
contractAddress,
CONTRACT_ABI,
signer
);
const estimatedGas = await contract.setGreeting.estimateGas(greeting);
console.log("Estimated gas:", estimatedGas.toString());
const tx = await contract.setGreeting(greeting, {
gasLimit: estimatedGas * 110n / 100n
});
console.log("Transaction hash:", tx.hash);
console.log("Waiting for confirmation...");
const receipt = await tx.wait();
console.log("Transaction confirmed");
const newGreeting = await contract.greet();
console.log("New greeting:", newGreeting);
return {
hash: tx.hash,
blockNumber: receipt.blockNumber,
newValue: newGreeting
};
} catch (error) {
console.error("Contract call failed:", error);
throw error;
}
}
Copy
Ask AI
const CONTRACT_ABI = [
{
name: "setGreeting",
type: "function",
stateMutability: "nonpayable",
inputs: [{ name: "_greeting", type: "string" }],
outputs: []
},
{
name: "greet",
type: "function",
stateMutability: "view",
inputs: [],
outputs: [{ type: "string" }]
}
] as const;
async function executeContractFunction(
walletClient: any,
publicClient: any,
account: any,
contractAddress: `0x${string}`,
greeting: string
) {
try {
const gas = await publicClient.estimateContractGas({
address: contractAddress,
abi: CONTRACT_ABI,
functionName: "setGreeting",
args: [greeting],
account
});
const { request } = await publicClient.simulateContract({
address: contractAddress,
abi: CONTRACT_ABI,
functionName: "setGreeting",
args: [greeting],
account,
gas: gas * 110n / 100n
});
const hash = await walletClient.writeContract(request);
console.log("Transaction hash:", hash);
const receipt = await publicClient.waitForTransactionReceipt({
hash
});
const newGreeting = await publicClient.readContract({
address: contractAddress,
abi: CONTRACT_ABI,
functionName: "greet"
});
return {
hash,
blockNumber: receipt.blockNumber,
newValue: newGreeting
};
} catch (error) {
console.error("Contract call failed:", error);
throw error;
}
}
Copy
Ask AI
import {
usePrepareContractWrite,
useContractWrite,
useContractRead
} from "wagmi";
const CONTRACT_ABI = [
{
name: "setGreeting",
type: "function",
stateMutability: "nonpayable",
inputs: [{ name: "_greeting", type: "string" }],
outputs: []
},
{
name: "greet",
type: "function",
stateMutability: "view",
inputs: [],
outputs: [{ type: "string" }]
}
] as const;
function ContractInteraction({
contractAddress
}: {
contractAddress: `0x${string}`
}) {
const { config } = usePrepareContractWrite({
address: contractAddress,
abi: CONTRACT_ABI,
functionName: "setGreeting",
args: ["Hello from Para!"]
});
const { write, data, isLoading } = useContractWrite(config);
const { data: greeting } = useContractRead({
address: contractAddress,
abi: CONTRACT_ABI,
functionName: "greet",
watch: true
});
return (
<div>
<p>Current greeting: {greeting}</p>
<button
onClick={() => write?.()}
disabled={!write || isLoading}
>
Update Greeting
</button>
{data && <p>Transaction: {data.hash}</p>}
</div>
);
}