How to Export Deployments for Frontend
Exporting deployments creates frontend-friendly files containing contract addresses and ABIs, making it easy to integrate your deployed contracts with web applications.
Prerequisites
Install the export extension:
bash
npm install -D @rocketh/exportbash
pnpm add -D @rocketh/exportBasic Export
TypeScript Export
Export deployments as a TypeScript file:
bash
pnpm rocketh-export -e localhost --ts src/contracts.tsThis creates a file like:
typescript
// src/contracts.ts
export default {
chain: {
id: 31337,
name: 'Hardhat',
nativeCurrency: {
decimals: 18,
name: 'Ether',
symbol: 'ETH',
},
rpcUrls: {
default: {
http: ['http://127.0.0.1:8545'],
},
},
genesisHash: '0x0078bf1c86dfafc8610927cdb57a15bf17005156777f4c4a0c4b2efa8ec1d27f',
properties: {},
},
contracts: {
Greeter: {
abi: [
{
inputs: [{internalType: 'string', name: '_greeting', type: 'string'}],
stateMutability: 'nonpayable',
type: 'constructor',
},
{
inputs: [],
name: 'greet',
outputs: [{internalType: 'string', name: '', type: 'string'}],
stateMutability: 'view',
type: 'function',
},
{
inputs: [{internalType: 'string', name: '_greeting', type: 'string'}],
name: 'setGreeting',
outputs: [],
stateMutability: 'nonpayable',
type: 'function',
},
// ... more ABI entries
],
address: '0xdc64a140aa3e981100a9beca4e685f962f0cf6c9',
startBlock: 6,
},
// ... more contracts (MyContract, DefaultProxyAdmin, etc.)
},
name: 'localhost',
} as const;The exported file includes:
- Chain information: Chain ID, name, native currency, and RPC URLs
- Contract data: For each deployed contract:
- Full ABI for type-safe interactions
- Deployed address
- Block number when the contract was deployed
Using Exported Contracts in Frontend
typescript
import contracts from './contracts.js';
import {createPublicClient, http} from 'viem';
// Create a viem client
const client = createPublicClient({
chain: {
id: contracts.chain.id,
name: contracts.chain.name,
nativeCurrency: contracts.chain.nativeCurrency,
rpcUrls: contracts.chain.rpcUrls,
},
transport: http(),
});
// Read from a contract
const greeting = await client.readContract({
address: contracts.contracts.Greeter.address,
abi: contracts.contracts.Greeter.abi,
functionName: 'greet',
});