From 59e731b137bf4f6c9580bd33a1131edfd2fe1b78 Mon Sep 17 00:00:00 2001 From: josojo Date: Sun, 11 Feb 2024 16:38:45 +0100 Subject: [PATCH] improving and adding scripts to simplyfix setup --- .../depositForkonomicTokenIntoBridge.js | 7 ++- src/scripts/mintForkonomicTokens.js | 61 +++++++++++++++++++ src/scripts/prepareSequencer.js | 57 +++++++++++++++++ 3 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 src/scripts/mintForkonomicTokens.js create mode 100644 src/scripts/prepareSequencer.js diff --git a/src/scripts/depositForkonomicTokenIntoBridge.js b/src/scripts/depositForkonomicTokenIntoBridge.js index 4837bb15..e3ea79f1 100644 --- a/src/scripts/depositForkonomicTokenIntoBridge.js +++ b/src/scripts/depositForkonomicTokenIntoBridge.js @@ -54,9 +54,10 @@ async function main() { ); const depositAmount = ethers.utils.parseEther('10'); - const tx0 = await forkonomicToken.connect(deployer).mint(polygonZkEVMBridgeAddress, ethers.utils.parseEther('100000'), { gasLimit: 500000 }); - console.log('Mint forkonomic tokens'); - console.log('by the following tx: ', tx0.hash); + const balance = await forkonomicToken.connect(deployer).balanceOf(deployer.address); + if (balance.lt(depositAmount)) { + throw new Error('Not enough tokens'); + } const tx1 = await forkonomicToken.connect(deployer).approve(polygonZkEVMBridgeAddress, depositAmount, { gasLimit: 500000 }); console.log('Approved bridge to spend forkonomic tokens'); diff --git a/src/scripts/mintForkonomicTokens.js b/src/scripts/mintForkonomicTokens.js new file mode 100644 index 00000000..169418bc --- /dev/null +++ b/src/scripts/mintForkonomicTokens.js @@ -0,0 +1,61 @@ +/* eslint-disable import/no-dynamic-require, global-require */ +/* eslint-disable no-console, no-inner-declarations, no-undef, import/no-unresolved, no-restricted-syntax */ +const path = require('path'); +const { ethers } = require('hardhat'); +require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); +const common = require('../common/common'); + +async function main() { + /* + * Check deploy parameters + * Check that every necessary parameter is fullfilled + */ + const args = process.argv.slice(2); + const deploymentName = args[0]; + const deployParameters = require(`../../deployments/${deploymentName}/deploy_parameters.json`); + const deploymentOutput = require(`../../deployments/${deploymentName}/deploy_output.json`); + + const mandatoryDeploymentOutput = [ + 'maticTokenAddress', + 'trustedSequencer', + 'deployerAddress', + ]; + for (const parameterName of mandatoryDeploymentOutput) { + if (deploymentOutput[parameterName] === undefined || deploymentOutput[parameterName] === '') { + throw new Error(`Missing parameter: ${parameterName}`); + } + } + const { + maticTokenAddress, + trustedSequencer, + deployerAddress, + } = deploymentOutput; + + const forkonomicTokenAddress = maticTokenAddress; + const currentProvider = await common.loadProvider(deployParameters, process.env); + const deployer = await common.loadDeployer(currentProvider, deployParameters); + + if (deployerAddress === undefined || deployerAddress.toLowerCase() !== deployer.address.toLowerCase()) { + throw new Error('Wrong deployer address'); + } + + const forkonomicToken = (await ethers.getContractAt( + 'contracts/ForkonomicToken.sol:ForkonomicToken', + forkonomicTokenAddress, + )).connect(deployer); + + const tx0 = await forkonomicToken.connect(deployer).mint(deployer.address, ethers.utils.parseEther('100000'), { gasLimit: 500000 }); + await tx0.wait(); + console.log('Mint forkonomic tokens for deployer'); + console.log('by the following tx: ', tx0.hash); + + const tx1 = await forkonomicToken.connect(deployer).mint(trustedSequencer, ethers.utils.parseEther('100000'), { gasLimit: 500000 }); + await tx1.wait(); + console.log('Mint forkonomic tokens for trusted sequencer'); + console.log('by the following tx: ', tx1.hash); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/src/scripts/prepareSequencer.js b/src/scripts/prepareSequencer.js new file mode 100644 index 00000000..4bc11400 --- /dev/null +++ b/src/scripts/prepareSequencer.js @@ -0,0 +1,57 @@ +/* eslint-disable no-await-in-loop, no-use-before-define, no-lonely-if, import/no-dynamic-require, global-require */ +/* eslint-disable no-console, no-inner-declarations, no-undef, import/no-unresolved, no-restricted-syntax */ +const path = require('path'); +const { ethers } = require('hardhat'); +require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); +const common = require('../common/common'); + +async function main() { + /* + * Check deploy parameters + * Check that every necessary parameter is fullfilled + */ + const args = process.argv.slice(2); + const deploymentName = args[0]; + const deployParameters = require(`../../deployments/${deploymentName}/deploy_parameters.json`); + const deploymentOutput = require(`../../deployments/${deploymentName}/deploy_output.json`); + + const mandatoryDeploymentOutput = [ + 'polygonZkEVMAddress', + 'maticTokenAddress', + 'trustedSequencer', + ]; + for (const parameterName of mandatoryDeploymentOutput) { + if (deploymentOutput[parameterName] === undefined || deploymentOutput[parameterName] === '') { + throw new Error(`Missing parameter: ${parameterName}`); + } + } + const { + polygonZkEVMAddress, + maticTokenAddress, + trustedSequencer, + } = deploymentOutput; + + const forkonomicTokenAddress = maticTokenAddress; + const currentProvider = await common.loadProvider(deployParameters, process.env); + const deployer = await common.loadDeployer(currentProvider, deployParameters); + + if (trustedSequencer === undefined || trustedSequencer.toLowerCase() !== deployer.address.toLowerCase()) { + throw new Error('Wrong deployer address'); + } + console.log('polygonZkEVMAddress: ', polygonZkEVMAddress); + + const forkonomicToken = (await ethers.getContractAt( + 'contracts/ForkonomicToken.sol:ForkonomicToken', + forkonomicTokenAddress, + )).connect(deployer); + + const tx1 = await forkonomicToken.approve(polygonZkEVMAddress, ethers.constants.MaxUint256); + await tx1.wait(); + console.log('Approved zkevm by the sequencer to spend forkonomic tokens'); + console.log('by the following tx: ', tx1.hash); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +});