import { createPublicClient, createWalletClient, http } from 'viem'; import { base } from 'viem/chains'; import { privateKeyToAccount } from 'viem/accounts'; const DEPLOYER_KEY = process.env.DEPLOYER_PRIVATE_KEY; if (!DEPLOYER_KEY) { console.error('Set DEPLOYER_PRIVATE_KEY env var'); process.exit(1); } // Compiled bytecode from SpendOSAudit.sol // Compile with: solc --bin contracts/SpendOSAudit.sol // For now, using a placeholder — replace with actual bytecode after compilation const BYTECODE = process.env.SPENDOS_BYTECODE as `0x${string}`; if (!BYTECODE) { console.error('Set SPENDOS_BYTECODE env var (compile contracts/SpendOSAudit.sol first)'); console.error('Run: solc --bin --optimize contracts/SpendOSAudit.sol'); process.exit(1); } async function main() { const account = privateKeyToAccount(DEPLOYER_KEY as `0x${string}`); const client = createWalletClient({ account, chain: base, transport: http(), }); const publicClient = createPublicClient({ chain: base, transport: http(), }); console.log(`Deploying SpendOSAudit from ${account.address}...`); const hash = await client.deployContract({ abi: [], bytecode: BYTECODE, }); console.log(`Deploy tx: ${hash}`); console.log('Waiting for confirmation...'); const receipt = await publicClient.waitForTransactionReceipt({ hash }); console.log(`SpendOSAudit deployed at: ${receipt.contractAddress}`); console.log(`Set SPENDOS_AUDIT_CONTRACT=${receipt.contractAddress}`); } main().catch(console.error);