diff --git a/hardhat.config.ts b/hardhat.config.ts index f9a7013..f32b46a 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -3,6 +3,7 @@ import { resolve } from "path"; import type { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox-viem"; import { env } from "./lib/common"; +import "./tasks/test"; [ `.env.${process.env.APP_ENV}.contracts`, @@ -22,6 +23,7 @@ const config: HardhatUserConfig = { networks: { localhost: { url: LOCAL_NODE_URL, + chainId: 31337, accounts: { mnemonic: process.env.MNEMONIC || TEST_MNEMONIC } diff --git a/lib/task-helper.ts b/lib/task-helper.ts new file mode 100644 index 0000000..9ce897b --- /dev/null +++ b/lib/task-helper.ts @@ -0,0 +1,20 @@ +import { task } from "hardhat/config"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import path from "path"; +import fs from "fs"; +import config from "../hardhat.config"; + +export const getDeployedContractAddress = async (hre: HardhatRuntimeEnvironment, contractName: string, network: string) => { + const chainId = config.networks?.[network]?.chainId; + if (!chainId) { + throw new Error(`Chain ID for network ${network} not found in hardhat.config.ts`); + } + const artifactsPath = path.join(__dirname, `../ignition/deployments/chain-${chainId}/deployed_addresses.json`); + const deploymentData = JSON.parse(fs.readFileSync(artifactsPath, 'utf8')); + const deployedAddress = deploymentData[`${contractName}#${contractName}`]; + + if (!deployedAddress) { + throw new Error(`Contract ${contractName} not found in deployment data for network ${network}`); + } + return deployedAddress as `0x${string}` | null; +} diff --git a/package-lock.json b/package-lock.json index 1419e49..c378a24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "license": "MIT", "devDependencies": { + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", "@nomicfoundation/hardhat-toolbox-viem": "^3.0.0", "@openzeppelin/contracts": "^5.2.0", "dotenv": "^16.4.7", @@ -1356,7 +1357,6 @@ "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ethereumjs-util": "^7.1.4" }, @@ -1370,7 +1370,6 @@ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -1395,7 +1394,6 @@ "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, "license": "MPL-2.0", - "peer": true, "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", diff --git a/package.json b/package.json index 0f76583..b2fcc7e 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "author": "moon.eth", "license": "MIT", "devDependencies": { + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", "@nomicfoundation/hardhat-toolbox-viem": "^3.0.0", "@openzeppelin/contracts": "^5.2.0", "dotenv": "^16.4.7", diff --git a/tasks/test.ts b/tasks/test.ts new file mode 100644 index 0000000..527e3fc --- /dev/null +++ b/tasks/test.ts @@ -0,0 +1,31 @@ +import { task } from "hardhat/config"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import config from "../hardhat.config"; +import { getDeployedContractAddress } from "../lib/task-helper"; + +task("test-task", "Test task") + .setAction(async (taskArgs, hre: HardhatRuntimeEnvironment) => { + console.log("Transition mint task started"); + + const network = hre.network.name; + if (!config.networks?.[network]) { + throw new Error(`Network ${network} not configured in hardhat.config.ts`); + } + + const chainId = config.networks[network].chainId; + if (!chainId) { + throw new Error(`Chain ID for network ${network} not found in hardhat.config.ts`); + } + const deployedAddress = await getDeployedContractAddress(hre, "TenGransToken", network); + if (!deployedAddress) { + throw new Error("TenGransToken address not found in deployment artifacts"); + } + + const tenGransToken = await hre.viem.getContractAt( + "TenGransToken", + deployedAddress + ); + + console.log("Connected to TenGransToken at:", deployedAddress); + console.log("Contract:", tenGransToken); + }); \ No newline at end of file