From 47a741c28cd69161e88fde29125933d957ab78fc Mon Sep 17 00:00:00 2001 From: JChoy Date: Fri, 29 Dec 2023 04:12:32 +0900 Subject: [PATCH] feat: add simple substitute deploy script --- task/substitute.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/task/substitute.ts b/task/substitute.ts index 1743986..872bc1f 100644 --- a/task/substitute.ts +++ b/task/substitute.ts @@ -2,6 +2,7 @@ import { task } from 'hardhat/config' import { AAVE_V3_POOL, OWNER, SINGLETON_FACTORY, TOKEN_KEYS, TOKENS, TREASURY, verify } from '../utils' import { hardhat } from 'viem/chains' import AaveTokenSubstitute from '../artifacts/contracts/AaveTokenSubstitute.sol/AaveTokenSubstitute.json' +import SimpleTokenSubstitute from '../artifacts/contracts/SimpleTokenSubstitute.sol/SimpleTokenSubstitute.json' import { encodeDeployData, Hex, getCreate2Address } from 'viem' task('substitute:aave:deploy') @@ -39,6 +40,34 @@ task('substitute:aave:deploy') await verify(computedAddress, constructorArgs) }) +task('substitute:simple:deploy') + .addParam('asset', 'name of the asset') + .setAction(async ({ asset }, hre) => { + const singletonFactory = await hre.viem.getContractAt('ISingletonFactory', SINGLETON_FACTORY) + const chainId = hre.network.config.chainId ?? hardhat.id + const emptySimpleSubstitute = await hre.viem.getContractAt('SimpleTokenSubstitute', '0x') + const treasury = TREASURY[chainId] + if (!treasury) { + throw new Error('missing treasury') + } + const constructorArgs = [TOKENS[chainId][TOKEN_KEYS.WETH], TOKENS[chainId][asset], treasury, OWNER[chainId]] + const deployData = encodeDeployData({ + abi: emptySimpleSubstitute.abi, + args: [TOKENS[chainId][TOKEN_KEYS.WETH], TOKENS[chainId][asset], treasury, OWNER[chainId]], + bytecode: SimpleTokenSubstitute.bytecode as Hex, + }) + const computedAddress = getCreate2Address({ from: singletonFactory.address, bytecode: deployData, salt: '0x' }) + const client = await hre.viem.getPublicClient() + const remoteBytecode = await client.getBytecode({ address: computedAddress }) + if (remoteBytecode && remoteBytecode !== '0x') { + console.log(`${asset} Substitute Contract already deployed:`, computedAddress) + } else { + const transactionHash = await singletonFactory.write.deploy([deployData, '0x']) + console.log(`Deployed ${asset} SimpleTokenSubstitute(${computedAddress}) at tx`, transactionHash) + } + await verify(computedAddress, constructorArgs) + }) + task('substitute:set-treasury') .addParam('address', 'address of the substitute') .setAction(async ({ address }, hre) => {