Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
MNEMONIC="YOUR_MNEMONIC"
PRIVATE_KEY="PRIVATE_KEY"
ALCHEMY_API_KEY="ALCHEMY_API_KEY"
MAINNET_ETHERSCAN_API_KEY="MAINNET_ETHERSCAN_API_KEY"
POLYGON_ETHERSCAN_API_KEY="POLYGON_ETHERSCAN_API_KEY"
# Unified Etherscan V2 API key used by `rocketh-verify etherscan`
ETHERSCAN_API_KEY="ETHERSCAN_API_KEY"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ lcov.info
artifacts
cache_hardhat
deployments
generated
Binary file modified bun.lockb
Binary file not shown.
File renamed without changes.
51 changes: 23 additions & 28 deletions deploy/scripts/fees/MainFeeDistributor.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,37 @@
import assert from "assert";

import { type DeployFunction } from "hardhat-deploy/types";
import { deployScript, artifacts } from "@rocketh";

import { checkAddressValid, getTokenAddressFromConfig } from "../../utils";
import { readFileSync } from "fs";
import { ConfigData } from "../../utils/types";

const contractName = "MainFeeDistributor";

const deploy: DeployFunction = async (hre) => {
const { getNamedAccounts, deployments } = hre;

const { deploy } = deployments;
const { deployer } = await getNamedAccounts();

assert(deployer, "Missing deployer account");

console.log(`Network: ${hre.network.name}`);
console.log(`Deployer: ${deployer}`);
const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${hre.network.name}/config.json`).toString());
if (!config.isMainChainFeeDistributor) throw new Error("MainFeeDistributor must be deployed on main chain");
export default deployScript(
async ({ namedAccounts, name, deploy }) => {
const { deployer } = namedAccounts;
assert(deployer, "Missing deployer account");
console.log(`Network: ${name}\nDeployer: ${deployer}\nDeploying: ${contractName}`);

const accessManager = checkAddressValid(config.accessManager, "access manager");
const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${name}/config.json`).toString());
if (!config.isMainChainFeeDistributor) throw new Error("MainFeeDistributor must be deployed on main chain");

const feeDistributorData = config.feeDistributor;
const bridgeableToken = checkAddressValid(feeDistributorData.bridgeableToken, "bridgeable token");
const accessManager = checkAddressValid(config.accessManager, "access manager");

const feeToken = getTokenAddressFromConfig(feeDistributorData.feeToken, config);
const feeDistributorData = config.feeDistributor;
const bridgeableToken = checkAddressValid(feeDistributorData.bridgeableToken, "bridgeable token");

const contract = await deploy(contractName, {
from: deployer,
args: [accessManager, bridgeableToken, feeToken],
log: true,
skipIfAlreadyDeployed: false,
});
const feeToken = getTokenAddressFromConfig(feeDistributorData.feeToken, config);

console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${contract.address}`);
};
const contract = await deploy(contractName, {
account: deployer,
artifact: artifacts.MainFeeDistributor,
args: [accessManager, bridgeableToken, feeToken],
});

deploy.tags = [contractName];
export default deploy;
console.log(`Deployed ${contractName}, network: ${name}, address: ${contract.address}`);
},
{
tags: [contractName],
},
);
55 changes: 25 additions & 30 deletions deploy/scripts/fees/SideChainFeeCollector.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,39 @@
import assert from "assert";

import { type DeployFunction } from "hardhat-deploy/types";
import { deployScript, artifacts } from "@rocketh";

import { checkAddressValid, getLzEidReceiver, getTokenAddressFromConfig } from "../../utils";
import { readFileSync } from "fs";
import { ConfigData } from "../../utils/types";

const contractName = "SideChainFeeCollector";

const deploy: DeployFunction = async (hre) => {
const { getNamedAccounts, deployments } = hre;

const { deploy } = deployments;
const { deployer } = await getNamedAccounts();

assert(deployer, "Missing deployer account");

console.log(`Network: ${hre.network.name}`);
console.log(`Deployer: ${deployer}`);
const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${hre.network.name}/config.json`).toString());
if (config.isMainChainFeeDistributor) throw new Error("SideChainFeeCollector must be deployed on side chain");
export default deployScript(
async ({ namedAccounts, name, deploy }) => {
const { deployer } = namedAccounts;
assert(deployer, "Missing deployer account");
console.log(`Network: ${name}\nDeployer: ${deployer}\nDeploying: ${contractName}`);

const accessManager = checkAddressValid(config.accessManager, "access manager");
const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${name}/config.json`).toString());
if (config.isMainChainFeeDistributor) throw new Error("SideChainFeeCollector must be deployed on side chain");

const feeDistributorData = config.feeDistributor;
const lzEidReceiver = getLzEidReceiver(feeDistributorData.mainChain);
const destinationReceiver = checkAddressValid(feeDistributorData.destinationReceiver, "destination receiver");
const bridgeableToken = checkAddressValid(feeDistributorData.bridgeableToken, "bridgeable token");
const accessManager = checkAddressValid(config.accessManager, "access manager");

const feeToken = getTokenAddressFromConfig(feeDistributorData.feeToken, config);
const feeDistributorData = config.feeDistributor;
const lzEidReceiver = getLzEidReceiver(feeDistributorData.mainChain);
const destinationReceiver = checkAddressValid(feeDistributorData.destinationReceiver, "destination receiver");
const bridgeableToken = checkAddressValid(feeDistributorData.bridgeableToken, "bridgeable token");

const contract = await deploy(contractName, {
from: deployer,
args: [accessManager, lzEidReceiver, bridgeableToken, destinationReceiver, feeToken],
log: true,
skipIfAlreadyDeployed: false,
});
const feeToken = getTokenAddressFromConfig(feeDistributorData.feeToken, config);

console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${contract.address}`);
};
const contract = await deploy(contractName, {
account: deployer,
artifact: artifacts.SideChainFeeCollector,
args: [accessManager, lzEidReceiver, bridgeableToken, destinationReceiver, feeToken],
});

deploy.tags = [contractName];
export default deploy;
console.log(`Deployed ${contractName}, network: ${name}, address: ${contract.address}`);
},
{
tags: [contractName],
},
);
56 changes: 25 additions & 31 deletions deploy/scripts/rewardMerkleDistributor/RewardMerkleDistributor.ts
Original file line number Diff line number Diff line change
@@ -1,46 +1,40 @@
import assert from "assert";

import { type DeployFunction } from "hardhat-deploy/types";
import { deployScript, artifacts } from "@rocketh";

import { checkAddressValid, getTokenAddressFromConfig, getWalletAddressFromConfig } from "../../utils";
import { readFileSync } from "fs";
import { ConfigData } from "../../utils/types";

const contractName = "RewardMerkleDistributor";

const deploy: DeployFunction = async (hre) => {
const { getNamedAccounts, deployments } = hre;

const { deploy } = deployments;
const { deployer } = await getNamedAccounts();

assert(deployer, "Missing deployer account");

console.log(`Network: ${hre.network.name}`);
console.log(`Deployer: ${deployer}`);

const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${hre.network.name}/config.json`).toString());
export default deployScript(
async ({ namedAccounts, name, deploy }) => {
const { deployer } = namedAccounts;
assert(deployer, "Missing deployer account");
console.log(`Network: ${name}\nDeployer: ${deployer}\nDeploying: ${contractName}`);

const accessManager = checkAddressValid(config.accessManager, "access manager");
const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${name}/config.json`).toString());

const rewardMerkleDistributorData = config.rewardMerkleDistributor;
const accessManager = checkAddressValid(config.accessManager, "access manager");

const token = getTokenAddressFromConfig(rewardMerkleDistributorData.token, config);
const rewardMerkleDistributorData = config.rewardMerkleDistributor;

const expiredRewardsRecipient = getWalletAddressFromConfig(
rewardMerkleDistributorData.expiredRewardsRecipient,
config,
);
const token = getTokenAddressFromConfig(rewardMerkleDistributorData.token, config);

const contract = await deploy(contractName, {
from: deployer,
args: [accessManager, token, expiredRewardsRecipient],
log: true,
skipIfAlreadyDeployed: false,
});
const expiredRewardsRecipient = getWalletAddressFromConfig(
rewardMerkleDistributorData.expiredRewardsRecipient,
config,
);

console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${contract.address}`);
};
const contract = await deploy(contractName, {
account: deployer,
artifact: artifacts.RewardMerkleDistributor,
args: [accessManager, token, expiredRewardsRecipient],
});

deploy.tags = [contractName];
export default deploy;
console.log(`Deployed ${contractName}, network: ${name}, address: ${contract.address}`);
},
{
tags: [contractName],
},
);
66 changes: 33 additions & 33 deletions deploy/scripts/sprl/sPRL1.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
import assert from "assert";

import { type DeployFunction } from "hardhat-deploy/types";
import { deployScript, artifacts } from "@rocketh";

import { getTokenAddressFromConfig, getWalletAddressFromConfig, isAddressValid } from "../../utils";
import { readFileSync } from "fs";
import { ConfigData } from "../../utils/types";

const contractName = "sPRL1";

const deploy: DeployFunction = async (hre) => {
const { getNamedAccounts, deployments } = hre;

const { deploy } = deployments;
const { deployer } = await getNamedAccounts();

assert(deployer, "Missing deployer account");

console.log(`Network: ${hre.network.name}`);
console.log(`Deployer: ${deployer}`);

const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${hre.network.name}/config.json`).toString());
const accessManager = config.accessManager;
if (!isAddressValid(accessManager)) throw new Error("Invalid access manager address");

const sprl1Data = config.sprl1;
const underlying = getTokenAddressFromConfig(sprl1Data.underlying, config);
const feeReceiver = getWalletAddressFromConfig(sprl1Data.feeReceiver, config);

const contract = await deploy(contractName, {
from: deployer,
args: [underlying, feeReceiver, accessManager, sprl1Data.startPenaltyPercentage, sprl1Data.timeLockDuration],
log: true,
skipIfAlreadyDeployed: false,
});

console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${contract.address}`);
};

deploy.tags = [contractName];
export default deploy;
export default deployScript(
async ({ namedAccounts, name, deploy }) => {
const { deployer } = namedAccounts;
assert(deployer, "Missing deployer account");
console.log(`Network: ${name}\nDeployer: ${deployer}\nDeploying: ${contractName}`);

const config: ConfigData = JSON.parse(readFileSync(`./deploy/config/${name}/config.json`).toString());
const accessManager = config.accessManager;
if (!isAddressValid(accessManager)) throw new Error("Invalid access manager address");

const sprl1Data = config.sprl1;
const underlying = getTokenAddressFromConfig(sprl1Data.underlying, config);
const feeReceiver = getWalletAddressFromConfig(sprl1Data.feeReceiver, config);

const contract = await deploy(contractName, {
account: deployer,
artifact: artifacts.sPRL1,
args: [
underlying,
feeReceiver,
accessManager,
BigInt(sprl1Data.startPenaltyPercentage),
BigInt(sprl1Data.timeLockDuration),
],
});

console.log(`Deployed ${contractName}, network: ${name}, address: ${contract.address}`);
},
{
tags: [contractName],
},
);
Loading
Loading