Initial commit with 🏗️ create-eth @ 2.0.4
This commit is contained in:
61
packages/hardhat/deploy/01_deploy_staking.ts
Normal file
61
packages/hardhat/deploy/01_deploy_staking.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import { HardhatRuntimeEnvironment } from "hardhat/types";
|
||||
import { DeployFunction } from "hardhat-deploy/types";
|
||||
|
||||
const deployStakingOracle: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
||||
const { deployer } = await hre.getNamedAccounts();
|
||||
const { deploy } = hre.deployments;
|
||||
const { viem } = hre;
|
||||
|
||||
// Deploy ORA independently, then wire it into StakingOracle and transfer ownership to StakingOracle.
|
||||
console.log("Deploying ORA token...");
|
||||
const oraDeployment = await deploy("ORA", {
|
||||
contract: "ORA",
|
||||
from: deployer,
|
||||
args: [],
|
||||
log: true,
|
||||
autoMine: false,
|
||||
});
|
||||
|
||||
console.log("Deploying StakingOracle (wired to ORA)...");
|
||||
const stakingDeployment = await deploy("StakingOracle", {
|
||||
contract: "StakingOracle",
|
||||
from: deployer,
|
||||
args: [oraDeployment.address],
|
||||
log: true,
|
||||
autoMine: false,
|
||||
});
|
||||
|
||||
const stakingOracleAddress = stakingDeployment.address as `0x${string}`;
|
||||
console.log("StakingOracle deployed at:", stakingOracleAddress);
|
||||
|
||||
// Set ORA owner to StakingOracle so it can mint rewards via ORA.mint(...)
|
||||
const publicClient = await viem.getPublicClient();
|
||||
const walletClients = await viem.getWalletClients();
|
||||
const deployerClient = walletClients.find(wc => wc.account.address.toLowerCase() === deployer.toLowerCase());
|
||||
if (!deployerClient) throw new Error("Deployer wallet client not found");
|
||||
|
||||
// Check current owner before attempting transfer
|
||||
const currentOwner = await publicClient.readContract({
|
||||
address: oraDeployment.address as `0x${string}`,
|
||||
abi: oraDeployment.abi,
|
||||
functionName: "owner",
|
||||
args: [],
|
||||
});
|
||||
|
||||
if ((currentOwner as unknown as string).toLowerCase() === stakingOracleAddress.toLowerCase()) {
|
||||
console.log("ORA ownership already transferred to StakingOracle, skipping...");
|
||||
} else {
|
||||
console.log("Transferring ORA ownership to StakingOracle...");
|
||||
const txHash = await deployerClient.writeContract({
|
||||
address: oraDeployment.address as `0x${string}`,
|
||||
abi: oraDeployment.abi,
|
||||
functionName: "transferOwnership",
|
||||
args: [stakingOracleAddress],
|
||||
});
|
||||
await publicClient.waitForTransactionReceipt({ hash: txHash });
|
||||
}
|
||||
|
||||
console.log("ORA deployed at:", oraDeployment.address);
|
||||
};
|
||||
|
||||
export default deployStakingOracle;
|
||||
Reference in New Issue
Block a user