diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml index 8a63e176..0facdeac 100644 --- a/.github/workflows/gitleaks.yml +++ b/.github/workflows/gitleaks.yml @@ -12,6 +12,8 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 # todo: only fetch for the HEAD branch - uses: actions/setup-go@v3 with: go-version: "1.19" diff --git a/abi/HDT.json b/abi/HDT.json index a541ff9c..e3996558 100644 --- a/abi/HDT.json +++ b/abi/HDT.json @@ -44,6 +44,25 @@ "name": "Approval", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newToken", + "type": "address" + } + ], + "name": "AssetTokenChanged", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -372,6 +391,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTokenAddress", + "type": "address" + } + ], + "name": "setAssetToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/contracts/HDT/HDT.sol b/contracts/HDT/HDT.sol index d123598c..f8ecf3cc 100644 --- a/contracts/HDT/HDT.sol +++ b/contracts/HDT/HDT.sol @@ -14,6 +14,7 @@ import "../Errors.sol"; */ contract HDT is ERC20Upgradeable, OwnableUpgradeable, HDTStorage, IHDT { event PoolChanged(address pool); + event AssetTokenChanged(address oldToken, address newToken); constructor() { _disableInitializers(); @@ -48,6 +49,12 @@ contract HDT is ERC20Upgradeable, OwnableUpgradeable, HDTStorage, IHDT { emit PoolChanged(poolAddress); } + function setAssetToken(address newTokenAddress) external onlyOwner { + address oldTokenAddress = _assetToken; + _assetToken = newTokenAddress; + emit AssetTokenChanged(oldTokenAddress, newTokenAddress); + } + function decimals() public view override returns (uint8) { return _decimals; } diff --git a/deployment/goerli-deployed-contracts.json b/deployment/goerli-deployed-contracts.json index a5b99a45..08aa87ab 100644 --- a/deployment/goerli-deployed-contracts.json +++ b/deployment/goerli-deployed-contracts.json @@ -18,4 +18,22 @@ "HDT":"0x27Fa332a5cA06492C2007FF4b143C921Cf779C3b", "ReceivableFactoringPoolConfig":"0xBa779F41ae414dEc63265D79a02DED47fbe007a5", "ReceivableFactoringPoolImpl":"0x470f71B48B42BE5B4B47D9f9A407bDA98DbDEb8D", -"ReceivableFactoringPool":"0x11672c0bBFF498c72BC2200f42461c0414855042"} \ No newline at end of file +"ReceivableFactoringPool":"0x11672c0bBFF498c72BC2200f42461c0414855042", +"JiaPoolTimelock":"0x8DF7BBae57F1215eE8294D084E08B6a02076eAA5", +"JiaPoolProxyAdminTimelock":"0x87Da18395dc7CE21e0E72e1B01dca0826635FCf0", +"JiaPoolFeeManager":"0x4630ceAedb030b6ad1DCa0E58c3576aa33042b4C", +"JiaHDTImpl":"0x3f95c365aa092E3dF020Bf7E6582E371998Ada4A", +"JiaHDT":"0xAD5e1F01618A2A158097C21866B4e8DCEEA2aC25", +"JiaPoolConfig":"0x9b8513bF9A56E609e66F360B550b7c8724129a05", +"JiaPoolImpl":"0xEb204D979c7aBcA473a0BC780dDf6Ca45E84422f", +"JiaPool":"0x07fd5720FE4d7993550d147c8753A9e60b45940D", +"RWReceivableImpl":"0xf48170cc418c432874d32B03EAc3AC820deEF05E", +"RWReceivable":"0xA1EB18643dd6b75e97D55583BFFfF2311124076f", +"ArfPoolTimelock":"", +"ArfPoolProxyAdminTimelock":"0x74F1bcfb40A1d7A5A986712382ee2e03b1d472Fb", +"ArfPoolFeeManager":"0x35EC0c62F2185492284ecD1b6ed5aDc5b778B592", +"ArfHDTImpl":"0x67663D157Ea0Cd7075cC149EF64fd5701243Aa2b", +"ArfHDT":"0x8947482a523157A82563720e770E0BE8dfD67Cd7", +"ArfPoolConfig":"0xDE5b0A97017B28A4a55F46B27Ae9B3e89B699672", +"ArfPoolImpl":"0x8a6eb5c93b6ec5Bb213CD9E4a894CE8e08ebFFBf", +"ArfPool":"0x7A0F30f9449aC40eADed6994F1579Fd977506d8a"} \ No newline at end of file diff --git a/deployment/goerli-initialized-contracts.json b/deployment/goerli-initialized-contracts.json index f716231b..1e6b56c2 100644 --- a/deployment/goerli-initialized-contracts.json +++ b/deployment/goerli-initialized-contracts.json @@ -1,12 +1,19 @@ -{ - "EANFT": "Done", - "HumaConfig": "Done", - "BaseCreditPoolFeeManager": "Done", - "BaseCreditHDT": "Done", - "BaseCreditPoolConfig": "Done", - "BaseCreditPool": "Done", - "ReceivableFactoringPoolFeeManager": "Done", - "HDT": "Done", - "ReceivableFactoringPoolConfig": "Done", - "ReceivableFactoringPool": "Done" -} \ No newline at end of file +{"EANFT":"Done", +"HumaConfig":"Done", +"BaseCreditPoolFeeManager":"Done", +"BaseCreditHDT":"Done", +"BaseCreditPoolConfig":"Done", +"BaseCreditPool":"Done", +"ReceivableFactoringPoolFeeManager":"Done", +"HDT":"Done", +"ReceivableFactoringPoolConfig":"Done", +"ReceivableFactoringPool":"Done", +"JiaPoolFeeManager":"Done", +"JiaHDT":"Done", +"JiaPoolConfig":"Done", +"JiaPool":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"RWReceivable":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done"} \ No newline at end of file diff --git a/deployment/goerli-verified-contracts.json b/deployment/goerli-verified-contracts.json index be219128..fb389728 100644 --- a/deployment/goerli-verified-contracts.json +++ b/deployment/goerli-verified-contracts.json @@ -18,4 +18,22 @@ "HDT":"Done", "ReceivableFactoringPoolConfig":"Done", "ReceivableFactoringPoolImpl":"Done", -"ReceivableFactoringPool":"Done"} \ No newline at end of file +"ReceivableFactoringPool":"Done", +"JiaPoolTimelock":"Done", +"JiaPoolProxyAdminTimelock":"Done", +"JiaPoolFeeManager":"Done", +"JiaHDTImpl":"Done", +"JiaHDT":"Done", +"JiaPoolConfig":"Done", +"JiaPoolImpl":"Done", +"JiaPool":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"ArfPoolTimelock":"", +"ArfPoolProxyAdminTimelock":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDTImpl":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPoolImpl":"Done", +"ArfPool":"Done"} \ No newline at end of file diff --git a/deployment/goerli/deploy-goerli-jia-pool.js b/deployment/goerli/deploy-goerli-jia-pool.js new file mode 100644 index 00000000..78ac9aa1 --- /dev/null +++ b/deployment/goerli/deploy-goerli-jia-pool.js @@ -0,0 +1,66 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_MULTI_SIG='0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB'; +const POOL_OWNER_MULTI_SIG='0x7dC4018464e724fB2B04d9aC0df6D40B34786318'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + + const eaService = await accounts[4]; + console.log("ea service address: " + eaService.address); + + const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + const invoiceNFT = await deploy("InvoiceNFT", "RNNFT", [usdc.address]); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const baseCreditPoolTL = await deploy("TimelockController", "JiaPoolTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const baseCreditPoolProxyAdminTL = await deploy("TimelockController", "JiaPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "JiaPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "JiaHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "JiaHDT", [ + bc_hdtImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "JiaPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "JiaPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "JiaPool", [ + bc_poolImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/goerli/init-goerli-jia-pool-defender.js b/deployment/goerli/init-goerli-jia-pool-defender.js new file mode 100644 index 00000000..c91e0b17 --- /dev/null +++ b/deployment/goerli/init-goerli-jia-pool-defender.js @@ -0,0 +1,366 @@ +const {BigNumber: BN} = require("ethers"); +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, deployedContracts, lender, ea, eaService; +let pdsService, treasury, ea_bcp, bcpOperator, rfpOperator; +let bcpOwnerTreasury, rfpOwnerTreasury; + +const HUMA_OWNER_MULTI_SIG='0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB'; +const POOL_OWNER_MULTI_SIG='0x7dC4018464e724fB2B04d9aC0df6D40B34786318'; + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [pdsService.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasury.address]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [ea.address]); + const eaNFTFromEA_bcp = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("JiaPoolFeeManager"); + if (initilized) { + console.log("JiaPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["JiaPoolFeeManager"]) { + throw new Error("JiaPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPoolFeeManager"]); + + await sendTransaction( + "JiaPoolFeeManager", + feeManager, + "setFees", + [10_000_000, 0, 20_000_000, 0, 5_000_000] + ); + // await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "JiaPoolFeeManager", "JiaPoolTimelock"); + + await updateInitilizedContract("JiaPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("JiaHDT"); + if (initilized) { + console.log("JiaHDT is already initialized!"); + return; + } + + if (!deployedContracts["JiaHDT"]) { + throw new Error("JiaHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaHDT"]); + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Jia HDT", + "JHDT", + deployedContracts["USDC"], + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["JiaPool"]]); + + await transferOwnershipToTL("HDT", "JiaHDT", "JiaPoolTimelock"); + + await updateInitilizedContract("JiaHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("JiaPoolConfig"); + if (initilized) { + console.log("JiaPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["JiaPoolConfig"]) { + throw new Error("JiaPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["JiaPoolConfig"] + ); + + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + + if (!deployedContracts["JiaHDT"]) { + throw new Error("JiaHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["JiaPoolFeeManager"]) { + throw new Error("JiaPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPoolFeeManager"]); + + await sendTransaction("JiaPoolConfig", poolConfig, "initialize", [ + "JiaPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + const cap = BN.from(1_000_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("cap: " + cap); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("JiaPoolConfig", poolConfig, "setPool", [ + deployedContracts["JiaPool"], + ]); + + await sendTransaction( + "JiaPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [500, 200] + ); + await sendTransaction( + "JiaPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [1000, 100] + ); + + await sendTransaction("JiaPoolConfig", poolConfig, "setEvaluationAgent", [ + 2, + ea_bcp.address, + ]); + + const maxCL = BN.from(10_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("JiaPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("JiaPoolConfig", poolConfig, "setAPR", [1000]); + await sendTransaction("JiaPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolPayPeriod", [15]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["JiaHDT"], + ]); + await sendTransaction("JiaPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [0]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [60]); + await sendTransaction("JiaPoolConfig", poolConfig, "addPoolOperator", [bcpOperator.address]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolOwnerTreasury", [bcpOwnerTreasury.address]); + + await sendTransaction("JiaPoolConfig", poolConfig, "setCreditApprovalExpiration", [5]); + + await transferOwnershipToTL("BasePoolConfig", "JiaPoolConfig", "JiaPoolTimelock"); + + await updateInitilizedContract("JiaPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("JiaPool"); + if (initilized) { + console.log("JiaPool is already initialized!"); + return; + } + + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + + if (!deployedContracts["JiaPoolConfig"]) { + throw new Error("JiaPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["JiaPool"]); + + await sendTransaction("JiaPool", pool, "initialize", [ + deployedContracts["JiaPoolConfig"], + ]); + + await updateInitilizedContract("JiaPool"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const JiaPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = JiaPool.attach(deployedContracts["JiaPool"]) + const poolFrombcpOperator = pool.connect(bcpOperator); + + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [deployer.address]); + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [bcpOwnerTreasury.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + const decimals = await usdc.decimals(); + + // Owner + const usdcFromPoolOwnerTreasury = await usdc.connect(bcpOwnerTreasury); + const poolFromPoolOwnerTreasury = await pool.connect(bcpOwnerTreasury); + const amountOwner = BN.from(20_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("owner to deposit: " + amountOwner); + await sendTransaction("TestToken", usdc, "mint", [bcpOwnerTreasury.address, amountOwner]); + await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + await sendTransaction("JiaPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + const usdcFromEA = await usdc.connect(ea_bcp); + const poolFromEA = await pool.connect(ea_bcp); + const amountEA = BN.from(10_000).mul(BN.from(10).pow(BN.from(decimals))); + await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + await sendTransaction("JiaPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + await sendTransaction("JiaPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, proxyOwner, lender, ea, + eaService, pdsService, treasury, ea_bcp, + invoicePayer, bcpOperator, rfpOperator, + bcpOwnerTreasury, rfpOwnerTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("lender address: " + lender.address); + console.log("ea address: " + ea.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/goerli/verify-goerli-jia-pool.js b/deployment/goerli/verify-goerli-jia-pool.js new file mode 100644 index 00000000..dbb9b2db --- /dev/null +++ b/deployment/goerli/verify-goerli-jia-pool.js @@ -0,0 +1,169 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/goerli/verify_args/" + +const HUMA_OWNER_MULTI_SIG='0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB'; +const POOL_OWNER_MULTI_SIG='0x7dC4018464e724fB2B04d9aC0df6D40B34786318'; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + proxyOwner = await accounts[1]; + console.log("proxyOwner address: " + proxyOwner.address); + + const verifyUsdc = await verifyContract('USDC'); + console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + const verifyRNNFT = await verifyContract('RNNFT', [ + `'${deployedContracts['USDC']}'` + ]); + console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_MULTI_SIG}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyJiaPoolTL = await verifyContract('JiaPoolTimelock', + [ + 0, + `['${POOL_OWNER_MULTI_SIG}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyJiaPoolTL}`); + + const verifyJiaPoolProxyAdminTL = await verifyContract('JiaPoolProxyAdminTimelock', + [ + 0, + `['${POOL_OWNER_MULTI_SIG}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyJiaPoolProxyAdminTL}`); + + const verifyFeeManager = await verifyContract('JiaPoolFeeManager'); + console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('JiaHDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('JiaHDT', + [ + `'${deployedContracts['JiaHDTImpl']}'`, + `'${deployedContracts['JiaPoolProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('JiaPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('JiaPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + const verifyPool = await verifyContract('JiaPool', + [ + `'${deployedContracts['JiaPoolImpl']}'`, + `'${deployedContracts['JiaPoolProxyAdminTimelock']}'`, + '[]', + ]); + console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/matic-deployed-contracts.json b/deployment/matic-deployed-contracts.json index 24b8ce94..52ca0e67 100644 --- a/deployment/matic-deployed-contracts.json +++ b/deployment/matic-deployed-contracts.json @@ -1,22 +1,48 @@ -{ - "HumaConfig": "0x03D80E259E34354B552fE5d152D7484192535393", - "HumaConfigTimelock": "0x4730Ba92780b6783Ce97bD5f7AaD75337d6D180A", - "ReceivableFactoringPoolTimelock": "0x0562e6287dd69E76771E046f7E24ADC608c837b6", - "ReceivableFactoringPoolProxyAdminTimelock": "0x1691090fb0cFd3bd9b59128b57490eA882A09573", - "ReceivableFactoringPoolFeeManager": "0x5B7841b94a3C7246662ef514745b034A6ceaAB15", - "HDTImpl": "0xfc256098C6c63836ac71F7057c68b74165fF9cbb", - "HDT": "0xf5F9297c74e464933e42F4a989e81D931fb20f83", - "ReceivableFactoringPoolConfig": "0x98f41d57C06b302AFf999f3F58f4ae7a3F884590", - "ReceivableFactoringPoolImpl": "0x87FD98F3eB172B5183F7527060DDbe8a8D17B924", - "ReceivableFactoringPool": "0x58AAF1f9cB10F335111A2129273056bbED251B61", - "EANFT": "0x941687792107eaC859B820d1636936382F3189aa", - "RNNFT": "0x34eA029c5195F8fb4fe59b492be1738a9Dd959AC", - "BaseCreditPoolTimelock": "0x48065723605D1367bC4256B747293e281F5aD37b", - "BaseCreditPoolProxyAdminTimelock": "0x6fE57952F3Ce61f6B6d348e1BB52943C8531e99B", - "BaseCreditPoolFeeManager": "0x65C5535735581039c5711A9d7c223cff9384334F", - "BaseCreditHDTImpl": "0xf26A071833032Ce57769fdf530E81A28f15671df", - "BaseCreditHDT": "0x73c16Db24951135BC8A628185BdbfA79115793E5", - "BaseCreditPoolConfig": "0x39f7D6040EC30B62c508723e2EDb822413837527", - "BaseCreditPoolImpl": "0xb9Cb48e53bf4728C316f9b876281927BE792A02D", - "BaseCreditPool": "0xAb3dc5221F373Dd879BEc070058c775A0f6Af759" -} \ No newline at end of file +{"HumaConfig":"0x03D80E259E34354B552fE5d152D7484192535393", +"HumaConfigTimelock":"0x4730Ba92780b6783Ce97bD5f7AaD75337d6D180A", +"ReceivableFactoringPoolTimelock":"0x0562e6287dd69E76771E046f7E24ADC608c837b6", +"ReceivableFactoringPoolProxyAdminTimelock":"0x1691090fb0cFd3bd9b59128b57490eA882A09573", +"ReceivableFactoringPoolFeeManager":"0x5B7841b94a3C7246662ef514745b034A6ceaAB15", +"HDTImpl":"0xfc256098C6c63836ac71F7057c68b74165fF9cbb", +"HDT":"0xf5F9297c74e464933e42F4a989e81D931fb20f83", +"ReceivableFactoringPoolConfig":"0x98f41d57C06b302AFf999f3F58f4ae7a3F884590", +"ReceivableFactoringPoolImpl":"0x87FD98F3eB172B5183F7527060DDbe8a8D17B924", +"ReceivableFactoringPool":"0x58AAF1f9cB10F335111A2129273056bbED251B61", +"EANFT":"0x941687792107eaC859B820d1636936382F3189aa", +"RNNFT":"0x34eA029c5195F8fb4fe59b492be1738a9Dd959AC", +"BaseCreditPoolTimelock":"0x48065723605D1367bC4256B747293e281F5aD37b", +"BaseCreditPoolProxyAdminTimelock":"0x6fE57952F3Ce61f6B6d348e1BB52943C8531e99B", +"BaseCreditPoolFeeManager":"0x65C5535735581039c5711A9d7c223cff9384334F", +"BaseCreditHDTImpl":"0xf26A071833032Ce57769fdf530E81A28f15671df", +"BaseCreditHDT":"0x73c16Db24951135BC8A628185BdbfA79115793E5", +"BaseCreditPoolConfig":"0x39f7D6040EC30B62c508723e2EDb822413837527", +"BaseCreditPoolImpl":"0xb9Cb48e53bf4728C316f9b876281927BE792A02D", +"BaseCreditPool":"0xAb3dc5221F373Dd879BEc070058c775A0f6Af759", +"JiaPioneerPoolTimelock":"0xA00d231e40ED5a27543B2D1e1dc7bEf01cd9A370", +"JiaPioneerPoolProxyAdminTimelock":"0x9B28b841eE3a80fe91d45fb7C9e52cEA54B8d9AE", +"JiaPioneerPoolFeeManager":"0x7Ed46Ea23CD1559a77a80F651C2115CDEe55FCD1", +"JiaPioneerHDTImpl":"0x203990430bbd5bb67FcD76C431fAb5bd127A8E61", +"JiaPioneerHDT":"0xc6CF8FF8a4B7f1530AC2f0531614C824285009f8", +"JiaPioneerPoolConfig":"0x901427A8328139E59EA2401cBD6bB5b1F5e72E37", +"JiaPioneerPoolImpl":"0x2cffAAf7885530E1C5a9684eBbe397d6f1De48d8", +"JiaPioneerPool":"0xe8926aDbFADb5DA91CD56A7d5aCC31AA3FDF47E5", +"ArfPoolTimelock":"0x0735F775530D09d9419966FEa09f6f128620eb3d", +"ArfPoolProxyAdminTimelock":"0xF1F6D006ab76706C2538aF47D5091Decd61b28CB", +"ArfPoolFeeManager":"0xa42b10EcBA1fd953aeCc6Ce991D8dD26F8055C8a", +"ArfHDTImpl":"0x91E68909Ab9fB3D362ddE5949B77f369e98EdeaD", +"ArfHDT":"0xF68173AC6817961833C7FF303C0453e18fF6aBd2", +"ArfPoolConfig":"0x9570CdEe2abb43eF0DbE502d3eBB11AaebbCb77F", +"ArfPoolImpl":"0xAd19f43eC0903005C297EE555e34500C61dA5913", +"ArfPool":"0x91EaCEC15839Cc9Ec7083288E205C7f1EBfcdf62", +"RWReceivableImpl":"0x75e56D68EcfF7c95d1990A4169282a5A3f8B4Aaf", +"HumaProxyAdminTimelock":"0x680fDDa9BAEB23EB5F9bDb08F468a6560660a683", +"RWReceivable":"0xCf67CcEaC38b5E1880d62b5DB531Ab1E77614E3D", +"ArfNewPoolTimelock":"0xC544b718F30CB72ff7d001146795E0cDC30a06Af", +"ArfNewPoolProxyAdminTimelock":"0xE4B16cA8710348b78743D751F865757C9A38E0c6", +"ArfNewPoolFeeManager":"0x989F1194d637A928628a2d8204990E35d198b6D0", +"ArfNewHDTImpl":"0xAAc51FB744b4D8e9F54D90750311090D0b0b5e3B", +"ArfNewHDT":"0xA8aCE4AFe8801363489E1a6308031FdF84332702", +"ArfNewPoolConfig":"0x4AC443e87211B940C9e7c4c6801d24C34bD9f227", +"ArfNewPoolImpl":"0x57107D02C2B70e09AD77240dBDe7aD77fE91EA1C", +"ArfNewPool":"0x3EBc1f0644A69c565957EF7cEb5AEafE94Eb6FcE", +"ArfNewHDTImplUpgrade":"0x8af5B4d19558bd025a1055de9451bd4445F9b074"} \ No newline at end of file diff --git a/deployment/matic-initialized-contracts.json b/deployment/matic-initialized-contracts.json index a43d5b38..6b7702ef 100644 --- a/deployment/matic-initialized-contracts.json +++ b/deployment/matic-initialized-contracts.json @@ -6,4 +6,18 @@ "BaseCreditPoolFeeManager":"Done", "BaseCreditHDT":"Done", "BaseCreditPoolConfig":"Done", -"BaseCreditPool":"Done"} \ No newline at end of file +"BaseCreditPool":"Done", +"JiaPioneerPoolFeeManager":"Done", +"JiaPioneerHDT":"Done", +"JiaPioneerPoolConfig":"Done", +"JiaPioneerPool":"Done", +"EANFT":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done", +"ArfNewPoolFeeManager":"Done", +"ArfNewHDT":"Done", +"ArfNewPoolConfig":"Done", +"ArfNewPool":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/matic-verified-contracts.json b/deployment/matic-verified-contracts.json index 4da69f79..b5282634 100644 --- a/deployment/matic-verified-contracts.json +++ b/deployment/matic-verified-contracts.json @@ -13,4 +13,24 @@ "BaseCreditPoolImpl":"Done", "BaseCreditPool":"Done", "BaseCreditHDTImpl":"Done", -"BaseCreditHDT":"Done"} \ No newline at end of file +"BaseCreditHDT":"Done", +"JiaPioneerPoolConfig":"Done", +"ArfPoolTimelock":"Done", +"ArfPoolProxyAdminTimelock":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDTImpl":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPoolImpl":"Done", +"ArfPool":"Done", +"HumaProxyAdminTimelock":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"ArfNewPoolTimelock":"Done", +"ArfNewPoolProxyAdminTimelock":"Done", +"ArfNewPoolFeeManager":"Done", +"ArfNewHDTImpl":"Done", +"ArfNewHDT":"Done", +"ArfNewPoolConfig":"Done", +"ArfNewPoolImpl":"Done", +"ArfNewPool":"Done"} \ No newline at end of file diff --git a/deployment/maticmum-deployed-contracts.json b/deployment/maticmum-deployed-contracts.json new file mode 100644 index 00000000..29e01696 --- /dev/null +++ b/deployment/maticmum-deployed-contracts.json @@ -0,0 +1,25 @@ +{ + "HumaConfig": "0x01c4ad2501196B5e9AbD6c27141B0aA01cfB10Ab", + "HumaConfigTimelock": "0x070839076Cc370331944061db391398dA04AC3CE", + "SuperfluidFactoringPoolTimelock": "0xf30BA0aeDA0d02Dc5263818cEdcFF0CB936f89fb", + "SuperfluidFactoringPoolProxyAdminTimelock": "0x5A4d40e5A4eE46c2f5Bbf17F953a3D79954e7A28", + "SuperfluidFactoringPoolFeeManager": "0xBF40B58c7E8f4ca87362A49c135D6be9Ca4a8b2a", + "SuperfluidPoolHDTImpl": "0xda6Ede661874aB49f4a8E3110da9ac6662B57EF0", + "SuperfluidPoolHDT": "0xa7cd9aEA02EE65Fce9F2e3fa079F9AC6a50EE282", + "SuperfluidFactoringPoolConfig": "0xf80AD89c7820d2f933c35370cccfA7B6Cc2c93aa", + "SuperfluidFactoringPoolImpl": "0x27d7c2B970A6Ee92e4bD4D548b7383Bf088E3856", + "SuperfluidFactoringPool": "0xC08AC7Ba5E8633ac6398C317dF1CEBED3A313c8A", + "SuperfluidProcessorImpl": "0xD6Df54F525D6c546091F88965997234cB610bc51", + "SuperfluidProcessor": "0xb78C28a48eE7E7BdBc93E9Fea2862DB595Bd10a3", + "EANFT": "0x3c2e184ec5ff86D3A65C6B3d81d83a446A48C22A", + "SuperfluidTradableStream": "0xAEA5908A082F5667aEA425AEACE8dF6aEDb03694", + "Multisend": "0x1607ef0D13acAD1baE2bF9C9e7587c22C3cda60A", + "RWReceivableImpl": "0x554b8478DEa68c016f1EF97F7432F604D33A7368", + "RWReceivable": "0x34497bde51583B33a84710b2fBaC7f7007De4554", + "ArfPoolFeeManager": "0xDe39F0a6Fb305e4B2D4a7621d7e55e783121870B", + "ArfHDT": "0xd5DC108eDC7dFE5f2811Da5ffAed914C99aCBAe8", + "ArfPoolConfig": "0xc7E7d40F2D2B8E93E53727ECBec0Bf5683AFb7C4", + "BaseCreditPoolImpl": "0x9B83bBC3595014Eb5DEbdfEEbeFBF378654AA048", + "ArfPool": "0x51d996A8B0956F532663eB4fEe5fEC5a6eE81c63", + "USDC": "0xcFcaac79a9c4C9B8919d20b9d7214EF7Bd9A6e8F" +} \ No newline at end of file diff --git a/deployment/maticmum-initialized-contracts.json b/deployment/maticmum-initialized-contracts.json new file mode 100644 index 00000000..889efe16 --- /dev/null +++ b/deployment/maticmum-initialized-contracts.json @@ -0,0 +1,10 @@ +{"HumaConfig":"Done", +"SuperfluidFactoringPoolFeeManager":"Done", +"SuperfluidPoolHDT":"Done", +"SuperfluidFactoringPoolConfig":"Done", +"SuperfluidFactoringPool":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/mumbai/deploy-superfluid-factoring-pool.js b/deployment/mumbai/deploy-superfluid-factoring-pool.js new file mode 100644 index 00000000..43dafad8 --- /dev/null +++ b/deployment/mumbai/deploy-superfluid-factoring-pool.js @@ -0,0 +1,82 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_EOA = "0x4062A9Eab6a49B2Be6aE4F7240D420f6fbE2e615"; +const POOL_OWNER_EOA = "0x7c25422C52e4c5187b9A448df627E79175281d5a"; + +const SF_USDC_ADDRESS = "0xbe49ac1EadAc65dccf204D4Df81d650B50122aB2"; +const SF_HOST_ADDRESS = "0xEB796bdb90fFA0f28255275e16936D25d3418603"; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + // const proxyOwner = await accounts[1]; + + const eaService = await accounts[1]; + // console.log("ea service address: " + eaService.address); + + // Deploying Superfluid factoring pool + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_EOA], + [deployer.address], + ]); + + const superfluidFactoringPoolTL = await deploy( + "TimelockController", + "SuperfluidFactoringPoolTimelock", + [0, [POOL_OWNER_EOA], [deployer.address]] + ); + + const superfluidFactoringPoolProxyAdminTL = await deploy( + "TimelockController", + "SuperfluidFactoringPoolProxyAdminTimelock", + [0, [POOL_OWNER_EOA], [deployer.address]] + ); + + const feeManager = await deploy("SuperfluidFeeManager", "SuperfluidFactoringPoolFeeManager"); + const hdtImpl = await deploy("HDT", "SuperfluidPoolHDTImpl"); + const hdt = await deploy("TransparentUpgradeableProxy", "SuperfluidPoolHDT", [ + hdtImpl.address, + superfluidFactoringPoolProxyAdminTL.address, + [], + ]); + + const poolConfig = await deploy("BasePoolConfig", "SuperfluidFactoringPoolConfig"); + + const poolImpl = await deploy("ReceivableFactoringPoolV2", "SuperfluidFactoringPoolImpl"); + const pool = await deploy("TransparentUpgradeableProxy", "SuperfluidFactoringPool", [ + poolImpl.address, + superfluidFactoringPoolProxyAdminTL.address, + [], + ]); + + const processorImpl = await deploy("SuperfluidPoolProcessor", "SuperfluidProcessorImpl"); + const processor = await deploy("TransparentUpgradeableProxy", "SuperfluidProcessor", [ + processorImpl.address, + superfluidFactoringPoolProxyAdminTL.address, + [], + ]); + + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const tradableStream = await deploy("TradableStream", "SuperfluidTradableStream", [ + SF_HOST_ADDRESS, + ]); + + await deploy("Multisend", "Multisend"); +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/mumbai/init-superfluid-factoring-pool.js b/deployment/mumbai/init-superfluid-factoring-pool.js new file mode 100644 index 00000000..d113cc20 --- /dev/null +++ b/deployment/mumbai/init-superfluid-factoring-pool.js @@ -0,0 +1,425 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService, deployedContracts; +const PDSServiceAccount = "0xe906B5CDf5d66036b69d84BAfb2643f3aDCD1CA1"; +const SF_FUSDC_ADDRESS = "0xbe49ac1EadAc65dccf204D4Df81d650B50122aB2"; +const SF_HOST_ADDRESS = "0xEB796bdb90fFA0f28255275e16936D25d3418603"; +const SF_CFA_ADDRESS = "0x49e565Ed1bdc17F3d220f72DF0857C26FA83F873"; + +const USDC_ADDRESS = SF_FUSDC_ADDRESS; + +const poolTreasury = "0x7c25422C52e4c5187b9A448df627E79175281d5a"; +const treasuryAccount = "0x4062A9Eab6a49B2Be6aE4F7240D420f6fbE2e615"; + +// const HUMA_OWNER_MULTI_SIG = "0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB"; +// const POOL_OWNER_MULTI_SIG = "0xB69cD2CC66583a4f46c1a8C977D5A8Bf9ecc81cA"; + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [ + timeLockController.address, + ]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["HumaConfigTimelock"]) { + throw new Error("HumaConfigTimelock not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [USDC_ADDRESS, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + // Notice: Gnosis Safe doesn't support Mumbai now + // await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock"); + + await updateInitilizedContract("HumaConfig"); +} + +async function initFeeManager() { + const initilized = await getInitilizedContract("SuperfluidFactoringPoolFeeManager"); + if (initilized) { + console.log("SuperfluidFactoringPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["SuperfluidFactoringPoolFeeManager"]) { + throw new Error("SuperfluidFactoringPoolFeeManager not deployed yet!"); + } + + const SuperfluidFeeManager = await hre.ethers.getContractFactory("SuperfluidFeeManager"); + const feeManager = SuperfluidFeeManager.attach( + deployedContracts["SuperfluidFactoringPoolFeeManager"] + ); + + await sendTransaction( + "SuperfluidFactoringPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 0, 0] + ); + await sendTransaction( + "SuperfluidFactoringPoolFeeManager", + feeManager, + "setMinPrincipalRateInBps", + [0] + ); + + await updateInitilizedContract("SuperfluidFactoringPoolFeeManager"); +} + +async function initHDT() { + const initilized = await getInitilizedContract("SuperfluidPoolHDT"); + if (initilized) { + console.log("SuperfluidPoolHDT is already initialized!"); + return; + } + + if (!deployedContracts["SuperfluidPoolHDT"]) { + throw new Error("SuperfluidPoolHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["SuperfluidPoolHDT"]); + + if (!deployedContracts["SuperfluidFactoringPool"]) { + throw new Error("SuperfluidFactoringPool not deployed yet!"); + } + + await sendTransaction("SuperfluidPoolHDT", hdt, "initialize", [ + "Superfluid HDT", + "SFHDT", + USDC_ADDRESS, + ]); + + await sendTransaction("SuperfluidPoolHDT", hdt, "setPool", [ + deployedContracts["SuperfluidFactoringPool"], + ]); + + // Notice: Gnosis Safe doesn't support Mumbai now + // await transferOwnershipToTL("HDT", "SuperfluidPoolHDT", "SuperfluidFactoringPoolTimelock"); + + await updateInitilizedContract("SuperfluidPoolHDT"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(ea_sfp); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [ea_sfp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initPoolConfig() { + const initilized = await getInitilizedContract("SuperfluidFactoringPoolConfig"); + if (initilized) { + console.log("SuperfluidFactoringPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["SuperfluidFactoringPoolConfig"]) { + throw new Error("SuperfluidFactoringPoolConfig not deployed yet!"); + } + + const BasePoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = BasePoolConfig.attach(deployedContracts["SuperfluidFactoringPoolConfig"]); + + if (!deployedContracts["SuperfluidFactoringPool"]) { + throw new Error("SuperfluidFactoringPool not deployed yet!"); + } + + if (!deployedContracts["SuperfluidPoolHDT"]) { + throw new Error("SuperfluidPoolHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["SuperfluidFactoringPoolFeeManager"]) { + throw new Error("SuperfluidFactoringPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["SuperfluidPoolHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const SuperfluidFeeManager = await hre.ethers.getContractFactory("SuperfluidFeeManager"); + const feeManager = SuperfluidFeeManager.attach( + deployedContracts["SuperfluidFactoringPoolFeeManager"] + ); + + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "initialize", [ + "SuperfluidFactoringPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + const cap = BigInt(1_000_000) * BigInt(10) ** BigInt(decimals); + console.log("cap: " + cap); + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setPoolLiquidityCap", [ + cap, + ]); + + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setPool", [ + deployedContracts["SuperfluidFactoringPool"], + ]); + // console.log(`ea_sfp: ${ea_sfp.address}`); + // await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setEvaluationAgent", [ + // 1, + // ea_sfp.address, + // ]); + + await sendTransaction( + "SuperfluidFactoringPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [500, 200] + ); + await sendTransaction( + "SuperfluidFactoringPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + const maxCL = BigInt(1_000_000) * BigInt(10) ** BigInt(decimals); + console.log("maxCL: " + maxCL); + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setMaxCreditLine", [ + maxCL, + ]); + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setAPR", [0]); + await sendTransaction( + "SuperfluidFactoringPoolConfig", + poolConfig, + "setReceivableRequiredInBps", + [10000] + ); + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("SuperfluidFactoringPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["SuperfluidPoolHDT"], + ]); + await sendTransaction( + "SuperfluidFactoringPoolConfig", + poolConfig, + "setWithdrawalLockoutPeriod", + [90] + ); + await sendTransaction( + "SuperfluidFactoringPoolConfig", + poolConfig, + "setPoolDefaultGracePeriod", + [60] + ); + + await sendTransaction("ReceivableFactoringPoolConfig", poolConfig, "addPoolOperator", [ + deployer.address, + ]); + await sendTransaction("ReceivableFactoringPoolConfig", poolConfig, "setPoolOwnerTreasury", [ + poolTreasury, + ]); + + // Notice: Gnosis Safe doesn't support Mumbai now + // await transferOwnershipToTL( + // "BasePoolConfig", + // "SuperfluidFactoringPoolConfig", + // "SuperfluidFactoringPoolTimelock" + // ); + + await updateInitilizedContract("SuperfluidFactoringPoolConfig"); +} + +async function initPool() { + const initilized = await getInitilizedContract("SuperfluidFactoringPool"); + if (initilized) { + console.log("SuperfluidFactoringPool is already initialized!"); + return; + } + + if (!deployedContracts["SuperfluidFactoringPool"]) { + throw new Error("SuperfluidFactoringPool not deployed yet!"); + } + + if (!deployedContracts["SuperfluidFactoringPoolConfig"]) { + throw new Error("SuperfluidFactoringPoolConfig not deployed yet!"); + } + + if (!deployedContracts["SuperfluidProcessor"]) { + throw new Error("SuperfluidProcessor not deployed yet!"); + } + + if (!deployedContracts["SuperfluidTradableStream"]) { + throw new Error("SuperfluidTradableStream not deployed yet!"); + } + + const ReceivableFactoringPoolV2 = await hre.ethers.getContractFactory( + "ReceivableFactoringPoolV2" + ); + const pool = ReceivableFactoringPoolV2.attach(deployedContracts["SuperfluidFactoringPool"]); + + await sendTransaction("SuperfluidFactoringPool", pool, "initialize(address,address)", [ + deployedContracts["SuperfluidFactoringPoolConfig"], + deployedContracts["SuperfluidProcessor"], + ]); + + const SuperfluidPoolProcessor = await hre.ethers.getContractFactory("SuperfluidPoolProcessor"); + const processor = SuperfluidPoolProcessor.attach(deployedContracts["SuperfluidProcessor"]); + + await sendTransaction( + "SuperfluidProcessor", + processor, + "initialize(address,address,address,address)", + [ + deployedContracts["SuperfluidFactoringPool"], + SF_HOST_ADDRESS, + SF_CFA_ADDRESS, + deployedContracts["SuperfluidTradableStream"], + ] + ); + + await updateInitilizedContract("SuperfluidFactoringPool"); +} + +async function prepare() { + if (!deployedContracts["SuperfluidFactoringPool"]) { + throw new Error("SuperfluidFactoringPool not deployed yet!"); + } + + const ReceivableFactoringPoolV2 = await hre.ethers.getContractFactory( + "ReceivableFactoringPoolV2" + ); + const pool = ReceivableFactoringPoolV2.attach(deployedContracts["SuperfluidFactoringPool"]); + // const poolFromOperator = pool.connect(deployer); + + await sendTransaction("SuperfluidFactoringPool", pool, "addApprovedLender", [poolTreasury]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(USDC_ADDRESS); + const decimals = await usdc.decimals(); + + // Owner + // const usdcFromPoolOwnerTreasury = await usdc.connect(sfpOwnerTreasury); + // const poolFromPoolOwnerTreasury = await pool.connect(sfpOwnerTreasury); + const amountOwner = BigInt(20_000) * BigInt(10) ** BigInt(decimals); + await sendTransaction("TestToken", usdc, "mint", [poolTreasury, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [ + // pool.address, + // amountOwner, + // ]); + // await sendTransaction( + // "SuperfluidFactoringPool", + // poolFromPoolOwnerTreasury, + // "makeInitialDeposit", + // [amountOwner] + // ); + + // EA + // const usdcFromEA = await usdc.connect(ea_sfp); + // const poolFromEA = await pool.connect(ea_sfp); + // const amountEA = BN.from(10_000).mul(BN.from(10).pow(BN.from(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_sfp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [pool.address, amountEA]); + // await sendTransaction("SuperfluidFactoringPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + // await sendTransaction("SuperfluidFactoringPool", pool, "enablePool", []); + + //payer + // const amountPayer = BN.from(100_000_000).mul(BN.from(10).pow(BN.from(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [payer.address, amountPayer]); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + // console.log("lender address: " + lender.address); + // console.log("ea address: " + ea_sfp.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + await initFeeManager(); + await initHDT(); + // await initEA(); + await initPoolConfig(); + await initPool(); + + await prepare(); +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/deploy-arf-pool.js b/deployment/polygon/deploy-arf-pool.js new file mode 100644 index 00000000..2cafd7f1 --- /dev/null +++ b/deployment/polygon/deploy-arf-pool.js @@ -0,0 +1,76 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_SAFE='0x7E13931931d59f2199fE0b499534412FCD28b7Ed'; +const POOL_OWNER_SAFE='0xD252073bF424bb13B474004bf9F52195d54aEDb6'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea service address: " + eaService.address); + + // const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_SAFE], + [deployer.address], + ]); + + const HumaProxyAdminTL = await deploy("TimelockController", "HumaProxyAdminTimelock", [ + 0, + [HUMA_OWNER_SAFE], + [deployer.address], + ]); + + const rwrImpl = await deploy("RealWorldReceivable", "RWReceivableImpl"); + const rwr = await deploy("TransparentUpgradeableProxy", "RWReceivable", [ + rwrImpl.address, + HumaProxyAdminTL.address, + [], + ]); + + const baseCreditPoolTL = await deploy("TimelockController", "ArfNewPoolTimelock", [ + 0, + [POOL_OWNER_SAFE], + [deployer.address], + ]); + + const baseCreditPoolProxyAdminTL = await deploy("TimelockController", "ArfNewPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_SAFE], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "ArfNewPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "ArfNewHDTImplUpgrade"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "ArfNewHDT", [ + bc_hdtImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "ArfNewPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "ArfNewPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "ArfNewPool", [ + bc_poolImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/deploy-jia-pioneer-pool.js b/deployment/polygon/deploy-jia-pioneer-pool.js new file mode 100644 index 00000000..077d53d6 --- /dev/null +++ b/deployment/polygon/deploy-jia-pioneer-pool.js @@ -0,0 +1,66 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_MULTI_SIG = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed"; +const POOL_OWNER_MULTI_SIG = "0x06AE4a3bc855c0046F18F4Bdf1Ac6617dc0001B5"; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + + const eaService = await accounts[1]; + console.log("ea service address: " + eaService.address); + + // const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + // const invoiceNFT = await deploy("InvoiceNFT", "RNNFT", [usdc.address]); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const baseCreditPoolTL = await deploy("TimelockController", "JiaPioneerPoolTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const JiaPioneerPoolProxyAdminTL = await deploy("TimelockController", "JiaPioneerPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "JiaPioneerPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "JiaPioneerHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "JiaPioneerHDT", [ + bc_hdtImpl.address, + JiaPioneerPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "JiaPioneerPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "JiaPioneerPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "JiaPioneerPool", [ + bc_poolImpl.address, + JiaPioneerPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/init-arf-pool-defender.js b/deployment/polygon/init-arf-pool-defender.js new file mode 100644 index 00000000..805bcec8 --- /dev/null +++ b/deployment/polygon/init-arf-pool-defender.js @@ -0,0 +1,384 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService; + +const PDSServiceAccount = "0x499c50e357fed41801d118dad572f3dfb71d6d0d" +const treasuryAccount = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed" +const USDC_ADDRESS = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; +const poolTreasury = "0xA5Efe3F7C92DB557E00F002e40A425d0b70cb9DA" + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(deployer); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [deployer.address]); + // const eaNFTFromEA_bcp = eaNFT.connect(ea); + // await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("ArfNewPoolFeeManager"); + if (initilized) { + console.log("ArfNewPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction( + "ArfNewPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 100, 0] + ); + await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [4999]); + + await transferOwnershipToTL("BaseFeeManager", "ArfNewPoolFeeManager", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("ArfNewHDT"); + if (initilized) { + console.log("ArfNewHDT is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Arf new HDT", + "AHDT", + USDC_ADDRESS, + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["ArfNewPool"]]); + + await transferOwnershipToTL("HDT", "ArfNewHDT", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("ArfNewPoolConfig"); + if (initilized) { + console.log("ArfNewPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["ArfNewPoolConfig"] + ); + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "initialize", [ + "ArfNewPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + console.log("decimals: " + BigInt(decimals)); + const cap = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("cap: " + cap); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPool", [ + deployedContracts["ArfNewPool"], + ]); + + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [500, 500] + ); + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + + // // await sendTransaction("ArfPoolConfig", poolConfig, "setEvaluationAgent", [ + // // 1, + // // deployer.address, + // // ]); + + const maxCL = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setAPR", [1300]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["ArfNewHDT"], + ]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [10]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolOwnerTreasury", [poolTreasury]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setCreditApprovalExpiration", [10]); + + await transferOwnershipToTL("BasePoolConfig", "ArfNewPoolConfig", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("ArfNewPool"); + if (initilized) { + console.log("ArfNewPool is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["ArfNewPool"]); + + await sendTransaction("ArfNewPool", pool, "initialize", [ + deployedContracts["ArfNewPoolConfig"], + ]); + + await updateInitilizedContract("ArfNewPool"); +} + +async function initRWR() { + const initilized = await getInitilizedContract("RWReceivable"); + if (initilized) { + console.log("RWReceivable is already initialized!"); + return; + } + + if (!deployedContracts["RWReceivable"]) { + throw new Error("RWReceivable not deployed yet!"); + } + + const RealWorldReceivable = await hre.ethers.getContractFactory("RealWorldReceivable"); + const rwReceivable = RealWorldReceivable.attach(deployedContracts["RWReceivable"]); + + await sendTransaction("RWReceivable", rwReceivable, "initialize", []); + + await updateInitilizedContract("RWReceivable"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + const BaseCreditPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = BaseCreditPool.attach(deployedContracts["ArfNewPool"]) + // const poolFrombcpOperator = pool.connect(bcpOperator); + + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [deployer.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + await sendTransaction("ArfNewPool", pool, "addApprovedLender", [poolTreasury]); + + // const USDC = await hre.ethers.getContractFactory("TestToken"); + // const usdc = USDC.attach(deployedContracts["USDC"]); + // const decimals = await usdc.decimals(); + + // Owner + // const usdcFromPoolOwnerTreasury = await usdc.connect(poolTreasury); + // const poolFromPoolOwnerTreasury = await pool.connect(poolTreasury); + // const amountOwner = BigInt(20_000)*(BigInt(10)**(BigInt(decimals))); + // console.log("owner to deposit: " + amountOwner); + // await sendTransaction("TestToken", usdc, "mint", [poolTreasury.address, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + // await sendTransaction("ArfPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + // const usdcFromEA = await usdc.connect(ea_bcp); + // const poolFromEA = await pool.connect(ea_bcp); + // const amountEA = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + // await sendTransaction("BaseCreditPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + // await sendTransaction("ArfPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService //, poolTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + // console.log("ea address: " + eaService.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + await initRWR(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/init-jia-pioneer-pool-defender.js b/deployment/polygon/init-jia-pioneer-pool-defender.js new file mode 100644 index 00000000..0c6f6850 --- /dev/null +++ b/deployment/polygon/init-jia-pioneer-pool-defender.js @@ -0,0 +1,345 @@ +const {BigNumber: BN} = require("ethers"); +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, + deploy, +} = require("../utils.js"); + +let deployer, deployedContracts, lender, ea, eaService; +let pdsService, treasury, ea_bcp, bcpOperator, rfpOperator; +let bcpOwnerTreasury, rfpOwnerTreasury; + +const HUMA_OWNER_MULTI_SIG = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed"; +const POOL_OWNER_MULTI_SIG = "0x06AE4a3bc855c0046F18F4Bdf1Ac6617dc0001B5"; +const USDC_ADDRESS = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; +const EA_ADDRESS = '0xdB59787549cA50faF9Bd2679856B668eDDBf0A44'; + +async function renounceTLAdminRole(timeLockKey, account) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction("TimelockController", timeLockController, "renounceRole", [ + adminRole, + account, + ]); +} + + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + await renounceTLAdminRole(timeLockKey, deployer.address); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [pdsService.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasury.address]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [ea.address]); + const eaNFTFromEA_bcp = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("JiaPioneerPoolFeeManager"); + if (initilized) { + console.log("JiaPioneerPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerPoolFeeManager"]) { + throw new Error("JiaPioneerPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPioneerPoolFeeManager"]); + + await sendTransaction( + "JiaPioneerPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 10, 0] + ); + await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "JiaPioneerPoolFeeManager", "JiaPioneerPoolTimelock"); + + await updateInitilizedContract("JiaPioneerPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("JiaPioneerHDT"); + if (initilized) { + console.log("JiaPioneerHDT is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerHDT"]) { + throw new Error("JiaPioneerHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaPioneerHDT"]); + + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Jia Pioneer HDT", + "JHDT", + USDC_ADDRESS, + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["JiaPioneerPool"]]); + + await transferOwnershipToTL("HDT", "JiaPioneerHDT", "JiaPioneerPoolTimelock"); + + await updateInitilizedContract("JiaPioneerHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("JiaPioneerPoolConfig"); + if (initilized) { + console.log("JiaPioneerPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerPoolConfig"]) { + throw new Error("JiaPioneerPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["JiaPioneerPoolConfig"] + ); + + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + if (!deployedContracts["JiaPioneerHDT"]) { + throw new Error("JiaPioneerHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["JiaPioneerPoolFeeManager"]) { + throw new Error("JiaPioneerPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaPioneerHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPioneerPoolFeeManager"]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "initialize", [ + "JiaPioneerPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + const cap = BN.from(500_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("cap: " + cap); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPool", [ + deployedContracts["JiaPioneerPool"], + ]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setEvaluationAgent", [ + 2, + EA_ADDRESS, + ]); + + await sendTransaction( + "JiaPioneerPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [0, 0] + ); + await sendTransaction( + "JiaPioneerPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + const maxCL = BN.from(500_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setAPR", [1000]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["JiaPioneerHDT"], + ]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [365]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [60]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", ['0x1d0C14ef74D4F76B218df9Cd752b3a831C20A909']); // Richard-pool + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", ['0xCCE6e1b4b83D4133C20C3Bd961c519325fac9e8F']); // Erbil-pool + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", ['0xB40a6D4C73766F769Cb3393B62488Fd57db04AA4']); // Ji-pool + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolOwnerTreasury", ['0xd4F254006d486688cE7515199C55266C581B949A']); + + await transferOwnershipToTL("BasePoolConfig", "JiaPioneerPoolConfig", "JiaPioneerPoolTimelock"); + + await updateInitilizedContract("JiaPioneerPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("JiaPioneerPool"); + if (initilized) { + console.log("JiaPioneerPool is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + if (!deployedContracts["JiaPioneerPoolConfig"]) { + throw new Error("JiaPioneerPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["JiaPioneerPool"]); + + await sendTransaction("JiaPioneerPool", pool, "initialize", [ + deployedContracts["JiaPioneerPoolConfig"], + ]); + + if (!deployedContracts["JiaPioneerPoolTimelock"]) { + throw new Error("JiaPioneerPoolTimelock not deployed yet!"); + } + + await renounceTLAdminRole("JiaPioneerPoolTimelock", deployer.address); + + await updateInitilizedContract("JiaPioneerPool"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + const JiaPioneerPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = JiaPioneerPool.attach(deployedContracts["JiaPioneerPool"]) + + await sendTransaction("JiaPioneerPool", pool, "addApprovedLender", ["0x062E4fa7b23518B24B6D18F8FAf06dA455D768E2"]); + await sendTransaction("JiaPioneerPool", pool, "addApprovedLender", [EA_ADDRESS]); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService, pdsService, + ] = await accounts; + console.log("deployer address: " + deployer.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + // await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/upgrade-base-credit-pool.js b/deployment/polygon/upgrade-base-credit-pool.js new file mode 100644 index 00000000..6abe3283 --- /dev/null +++ b/deployment/polygon/upgrade-base-credit-pool.js @@ -0,0 +1,83 @@ +const { + getUpgradedContract, + updateUpgradedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, deployedContracts; + +async function upgradePool() { + const upgraded = await getUpgradedContract("BaseCreditPool"); + if (upgraded) { + console.log("BaseCreditPool is upgraded already!"); + return; + } + + if (!deployedContracts["BaseCreditPoolImpl"]) { + throw new Error("BaseCreditPoolImpl not deployed yet!"); + } + + if (!deployedContracts["BaseCreditPool"]) { + throw new Error("BaseCreditPool not deployed yet!"); + } + + const TransparentUpgradeableProxy = await hre.ethers.getContractFactory( + "TransparentUpgradeableProxy" + ); + let proxy = TransparentUpgradeableProxy.attach(deployedContracts["BaseCreditPool"]); + proxy = await proxy.connect(proxyOwner); + + await sendTransaction("BaseCreditPool", proxy, "upgradeTo", [ + deployedContracts["BaseCreditPoolImpl"], + ]); + + await updateUpgradedContract("BaseCreditPool"); +} + +async function upgradeHDT() { + const upgraded = await getUpgradedContract("BaseCreditHDT"); + if (upgraded) { + console.log("BaseCreditHDT is upgraded already!"); + return; + } + + if (!deployedContracts["BaseCreditHDTImpl"]) { + throw new Error("BaseCreditHDTImpl not deployed yet!"); + } + + if (!deployedContracts["BaseCreditHDT"]) { + throw new Error("BaseCreditHDT not deployed yet!"); + } + + const TransparentUpgradeableProxy = await hre.ethers.getContractFactory( + "TransparentUpgradeableProxy" + ); + let proxy = TransparentUpgradeableProxy.attach(deployedContracts["BaseCreditPool"]); + proxy = await proxy.connect(proxyOwner); + + await sendTransaction("BaseCreditPool", proxy, "upgradeTo", [ + deployedContracts["BaseCreditPoolImpl"], + ]); + + await updateUpgradedContract("BaseCreditPool"); +} + +async function upgradeContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + + deployedContracts = await getDeployedContracts(); + + await upgradePool(); +} + +upgradeContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/verify-Jia-pioneer-pool.js b/deployment/polygon/verify-Jia-pioneer-pool.js new file mode 100644 index 00000000..8c361d65 --- /dev/null +++ b/deployment/polygon/verify-Jia-pioneer-pool.js @@ -0,0 +1,169 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/polygon/verify_args/" + +const HUMA_OWNER_MULTI_SIG = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed"; +const POOL_OWNER_MULTI_SIG = "0x06AE4a3bc855c0046F18F4Bdf1Ac6617dc0001B5"; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + // const verifyUsdc = await verifyContract('USDC'); + // console.log(`Verify USDC result: ${verifyUsdc}`); + + // const verifyEANFT = await verifyContract('EANFT'); + // console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + // const verifyHumaConfig = await verifyContract('HumaConfig'); + // console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + // const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + // [ + // 0, + // `['${HUMA_OWNER_MULTI_SIG}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + // const verifyBaseCreditPoolTL = await verifyContract('BaseCreditPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_MULTI_SIG}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyBaseCreditPoolTL}`); + + // const verifyBaseCreditPoolProxyAdminTL = await verifyContract('BaseCreditPoolProxyAdminTimelock', + // [ + // 0, + // `['${POOL_OWNER_MULTI_SIG}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyBaseCreditPoolProxyAdminTL}`); + + // const verifyFeeManager = await verifyContract('BaseCreditPoolFeeManager'); + // console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + // const verifyHDTImpl = await verifyContract('BaseCreditHDTImpl'); + // console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + // const verifyHDT = await verifyContract('BaseCreditHDT', + // [ + // `'${deployedContracts['BaseCreditHDTImpl']}'`, + // `'${deployedContracts['BaseCreditPoolProxyAdminTimelock']}'`, + // '[]' + // ]); + // console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('JiaPioneerPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + // const verifyPoolImpl = await verifyContract('BaseCreditPoolImpl'); + // console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + // const verifyPool = await verifyContract('BaseCreditPool', + // [ + // `'${deployedContracts['BaseCreditPoolImpl']}'`, + // `'${deployedContracts['BaseCreditPoolProxyAdminTimelock']}'`, + // '[]', + // ]); + // console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/polygon/verify-arf-pool.js b/deployment/polygon/verify-arf-pool.js new file mode 100644 index 00000000..26c199cd --- /dev/null +++ b/deployment/polygon/verify-arf-pool.js @@ -0,0 +1,190 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/mumbai/verify_args/" + +const HUMA_OWNER_EOA='0x7E13931931d59f2199fE0b499534412FCD28b7Ed'; +const POOL_OWNER_EOA='0xD252073bF424bb13B474004bf9F52195d54aEDb6'; +const PROXY_EOA = '0x11C0990B55d323E52841D4E5F1a50367719e6E62'; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + // const verifyUsdc = await verifyContract('USDC'); + // console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + // const verifyHumaProxyAdminTL = await verifyContract('HumaProxyAdminTimelock', + // [ + // 0, + // `['${HUMA_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyRWRImpl = await verifyContract('RWReceivableImpl'); + console.log(`Verify RWRImpl result: ${verifyRWRImpl}`); + + const verifyRWR = await verifyContract('RWReceivable', + [ + `'${deployedContracts['RWReceivableImpl']}'`, + `'${deployedContracts['HumaConfigTimelock']}'`, + '[]' + ]); + console.log(`Verify RWR result: ${verifyRWR}`); + + + // const verifyBaseCreditPoolTL = await verifyContract('ArfPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify ArfPoolTimelock result: ${verifyBaseCreditPoolTL}`); + + // const verifyBaseCreditPoolProxyAdminTL = await verifyContract('ArfPoolProxyAdminTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify ArfPoolProxyAdminTimelock result: ${verifyBaseCreditPoolProxyAdminTL}`); + + const verifyFeeManager = await verifyContract('ArfPoolFeeManager'); + console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('HDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('ArfHDT', + [ + `'${deployedContracts['HDTImpl']}'`, + `'${PROXY_EOA}'`, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('ArfPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('BaseCreditPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + const verifyPool = await verifyContract('ArfPool', + [ + `'${deployedContracts['BaseCreditPoolImpl']}'`, + `'${PROXY_EOA}'`, + '[]', + ]); + console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/sepolia-deployed-contracts.json b/deployment/sepolia-deployed-contracts.json new file mode 100644 index 00000000..7827a6db --- /dev/null +++ b/deployment/sepolia-deployed-contracts.json @@ -0,0 +1,18 @@ +{"USDC":"0xC1eE32b97226825f5646109D770944491D7a1B47", +"EANFT":"0x349f04e3800bDbbCAb473f6e84a42Bf9e62aab39", +"RWReceivableImpl":"0xe79492b21BB9625BB83Cf55041607b5978B838F3", +"HumaConfig":"0x7eDb3AD12f48F9B6Bb44a275caD3084255EEdE7E", +"HumaConfigTimelock":"0x6D16F401a2814FF3c5e4e591EA49e178E11AB942", +"ArfPoolTimelock":"0x6bd5c1e23A997F2607B76D672c17735DA7510eB8", +"ArfPoolProxyAdminTimelock":"0x1b54e9067d22A785fdD44f581959D13604d814ef", +"ArfPoolFeeManager":"0xAdbB0f7545e1d1870773848Afb8950fA615701D5", +"ArfHDTImpl":"0x5861434f38529206024c60e742b5d802a3645c3e", +"ArfHDT":"0x33Bf0695769fc5F801d6bc671F9bb9c800E76b53", +"ArfPoolConfig":"0x9eb5c6E54f69C20ecD182ab1024c5Be570c0684c", +"ArfPoolImpl":"0x746a334B358bc5B651D17bAEca9EB90F80062e3a", +"ArfPool":"0xA62778EbAC1a43B4390Fe3a8286575003Ae339cd", +"RWReceivable":"0x4d3b200ef2F4030F1f8118Ea3CE41024DEd6f586", +"TestFeeManager":"0x50dc34a634F3E29CfBad79E9cECD2759a6bA8Eae", +"TestHDT":"0xb94879541CAF746bFe1b066421E7D64C94fC9738", +"TestPoolConfig":"0xa0A16038D714F687679732dCb34e1d4051218Dc5", +"TestPool":"0x503EA0E2d1180b74F3A6105F43C481d18C2e426d"} \ No newline at end of file diff --git a/deployment/sepolia-initialized-contracts.json b/deployment/sepolia-initialized-contracts.json new file mode 100644 index 00000000..89aa92ca --- /dev/null +++ b/deployment/sepolia-initialized-contracts.json @@ -0,0 +1,11 @@ +{"HumaConfig":"Done", +"EANFT":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done", +"RWReceivable":"Done", +"TestFeeManager":"Done", +"TestHDT":"Done", +"TestPoolConfig":"Done", +"TestPool":"Done"} \ No newline at end of file diff --git a/deployment/sepolia-verified-contracts.json b/deployment/sepolia-verified-contracts.json new file mode 100644 index 00000000..030983c8 --- /dev/null +++ b/deployment/sepolia-verified-contracts.json @@ -0,0 +1,14 @@ +{"USDC":"Done", +"EANFT":"Done", +"HumaConfig":"Done", +"HumaConfigTimelock":"Done", +"ArfPoolTimelock":"Done", +"ArfPoolProxyAdminTimelock":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDTImpl":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPoolImpl":"Done", +"ArfPool":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/sepolia/deploy-arf-pool.js b/deployment/sepolia/deploy-arf-pool.js new file mode 100644 index 00000000..85c25555 --- /dev/null +++ b/deployment/sepolia/deploy-arf-pool.js @@ -0,0 +1,70 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_EOA='0x1e7A60fdc43E70d67A3C81AFAE1e95efC48b681b'; +const POOL_OWNER_EOA='0x242c334d3bd2882515547fFCF2733F3BB3701ACA'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea service address: " + eaService.address); + + const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_EOA], + [deployer.address], + ]); + + const rwrImpl = await deploy("RealWorldReceivable", "RWReceivableImpl"); + const rwr = await deploy("TransparentUpgradeableProxy", "RWReceivable", [ + rwrImpl.address, + humaConfigTL.address, + [], + ]); + + // const baseCreditPoolTL = await deploy("TimelockController", "ArfPoolTimelock", [ + // 0, + // [POOL_OWNER_EOA], + // [deployer.address], + // ]); + + const baseCreditPoolProxyAdminTL = await deploy("TimelockController", "ArfPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_EOA], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "ArfPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "ArfHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "ArfHDT", [ + bc_hdtImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "ArfPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "ArfPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "ArfPool", [ + bc_poolImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/sepolia/init-arf-pool-defender.js b/deployment/sepolia/init-arf-pool-defender.js new file mode 100644 index 00000000..0189a494 --- /dev/null +++ b/deployment/sepolia/init-arf-pool-defender.js @@ -0,0 +1,381 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService; + +const PDSServiceAccount = "0x4b2ea800c9791ea68faa284a69ac0df226eafa2b" +const treasuryAccount = "0x37f3591F7Ee1D53Ea445b710e6310FF3F92D5446" +// const poolTreasury = "0x942836828c2fbb046CE8C944d61143a0cE3608A5" + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(deployer); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [deployer.address]); + // const eaNFTFromEA_bcp = eaNFT.connect(ea); + // await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("ArfPoolFeeManager"); + if (initilized) { + console.log("ArfPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["ArfPoolFeeManager"]) { + throw new Error("ArfPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfPoolFeeManager"]); + + await sendTransaction( + "ArfPoolFeeManager", + feeManager, + "setFees", + [10_000_000, 0, 20_000_000, 0, 0] + ); + // await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + // await transferOwnershipToTL("BaseFeeManager", "ArfPoolFeeManager", "ArfPoolTimelock"); + + await updateInitilizedContract("ArfPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("ArfHDT"); + if (initilized) { + console.log("ArfHDT is already initialized!"); + return; + } + + if (!deployedContracts["ArfHDT"]) { + throw new Error("ArfHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfHDT"]); + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Arf HDT", + "AHDT", + deployedContracts["USDC"], + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["ArfPool"]]); + + // await transferOwnershipToTL("HDT", "ArfHDT", "ArfPoolTimelock"); + + await updateInitilizedContract("ArfHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("ArfPoolConfig"); + if (initilized) { + console.log("ArfPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["ArfPoolConfig"]) { + throw new Error("ArfPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["ArfPoolConfig"] + ); + + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + + if (!deployedContracts["ArfHDT"]) { + throw new Error("ArfHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["ArfPoolFeeManager"]) { + throw new Error("ArfPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfPoolFeeManager"]); + + await sendTransaction("ArfPoolConfig", poolConfig, "initialize", [ + "ArfPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + console.log("decimals: " + BigInt(decimals)); + const cap = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("cap: " + cap); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("ArfPoolConfig", poolConfig, "setPool", [ + deployedContracts["ArfPool"], + ]); + + await sendTransaction( + "ArfPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [500, 200] + ); + await sendTransaction( + "ArfPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + + // await sendTransaction("ArfPoolConfig", poolConfig, "setEvaluationAgent", [ + // 1, + // deployer.address, + // ]); + + const maxCL = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("ArfPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("ArfPoolConfig", poolConfig, "setAPR", [1000]); + await sendTransaction("ArfPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolPayPeriod", [15]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["ArfHDT"], + ]); + await sendTransaction("ArfPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [0]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [60]); + await sendTransaction("ArfPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolOwnerTreasury", [poolTreasury.address]); + + await sendTransaction("ArfPoolConfig", poolConfig, "setCreditApprovalExpiration", [30]); + + // await transferOwnershipToTL("BasePoolConfig", "ArfPoolConfig", "ArfPoolTimelock"); + + await updateInitilizedContract("ArfPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("ArfPool"); + if (initilized) { + console.log("ArfPool is already initialized!"); + return; + } + + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + + if (!deployedContracts["ArfPoolConfig"]) { + throw new Error("ArfPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["ArfPool"]); + + await sendTransaction("ArfPool", pool, "initialize", [ + deployedContracts["ArfPoolConfig"], + ]); + + await updateInitilizedContract("ArfPool"); +} + +async function initRWR() { + const initilized = await getInitilizedContract("RWReceivable"); + if (initilized) { + console.log("RWReceivable is already initialized!"); + return; + } + + if (!deployedContracts["RWReceivable"]) { + throw new Error("RWReceivable not deployed yet!"); + } + + const RealWorldReceivable = await hre.ethers.getContractFactory("RealWorldReceivable"); + const rwReceivable = RealWorldReceivable.attach(deployedContracts["RWReceivable"]); + + await sendTransaction("RWReceivable", rwReceivable, "initialize", []); + + await updateInitilizedContract("RWReceivable"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const BaseCreditPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = BaseCreditPool.attach(deployedContracts["ArfPool"]) + // const poolFrombcpOperator = pool.connect(bcpOperator); + + // await sendTransaction("ArfPool", pool, "addApprovedLender", [deployer.address]); + // // await sendTransaction("ArfPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + // // await sendTransaction("ArfPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + await sendTransaction("ArfPool", pool, "addApprovedLender", [poolTreasury.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + const decimals = await usdc.decimals(); + + // Owner + const usdcFromPoolOwnerTreasury = await usdc.connect(poolTreasury); + const poolFromPoolOwnerTreasury = await pool.connect(poolTreasury); + const amountOwner = BigInt(20_000)*(BigInt(10)**(BigInt(decimals))); + console.log("owner to deposit: " + amountOwner); + // await sendTransaction("TestToken", usdc, "mint", [poolTreasury.address, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + // await sendTransaction("ArfPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + // const usdcFromEA = await usdc.connect(ea_bcp); + // const poolFromEA = await pool.connect(ea_bcp); + // const amountEA = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + // await sendTransaction("BaseCreditPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + // await sendTransaction("ArfPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService, poolTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea address: " + eaService.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + await initRWR(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/sepolia/verify-arf-pool.js b/deployment/sepolia/verify-arf-pool.js new file mode 100644 index 00000000..bc736ebc --- /dev/null +++ b/deployment/sepolia/verify-arf-pool.js @@ -0,0 +1,181 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/polygon/verify_args/" + +const HUMA_OWNER_EOA='0x1e7A60fdc43E70d67A3C81AFAE1e95efC48b681b'; +const POOL_OWNER_EOA='0x242c334d3bd2882515547fFCF2733F3BB3701ACA'; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + const verifyUsdc = await verifyContract('USDC'); + console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyRWRImpl = await verifyContract('RWReceivableImpl'); + console.log(`Verify RWRImpl result: ${verifyRWRImpl}`); + + const verifyRWR = await verifyContract('RWReceivable', + [ + `'${deployedContracts['RWReceivableImpl']}'`, + `'${deployedContracts['HumaConfigTimelock']}'`, + '[]' + ]); + console.log(`Verify RWR result: ${verifyRWR}`); + + + // const verifyBaseCreditPoolTL = await verifyContract('ArfPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify ArfPoolTimelock result: ${verifyBaseCreditPoolTL}`); + + const verifyBaseCreditPoolProxyAdminTL = await verifyContract('ArfPoolProxyAdminTimelock', + [ + 0, + `['${POOL_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify ArfPoolProxyAdminTimelock result: ${verifyBaseCreditPoolProxyAdminTL}`); + + const verifyFeeManager = await verifyContract('ArfPoolFeeManager'); + console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('ArfHDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('ArfHDT', + [ + `'${deployedContracts['ArfHDTImpl']}'`, + `'${deployedContracts['ArfPoolProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('ArfPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('ArfPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + const verifyPool = await verifyContract('ArfPool', + [ + `'${deployedContracts['ArfPoolImpl']}'`, + `'${deployedContracts['ArfPoolProxyAdminTimelock']}'`, + '[]', + ]); + console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/utils.js b/deployment/utils.js index e25c1d31..ae58a907 100644 --- a/deployment/utils.js +++ b/deployment/utils.js @@ -2,8 +2,8 @@ const {BigNumber: BN, ethers} = require("ethers"); const fs = require("fs"); const DEPLOYED_PATH = "./deployment/"; -const MAX_FEE_PER_GAS = 30_000_000_000; -const MAX_PRIORITY_FEE_PER_GAS = 2_000_000_000; +const MAX_FEE_PER_GAS = 90_000_000_000; +const MAX_PRIORITY_FEE_PER_GAS = 45_000_000_000; const getContractAddressFile = async function (fileType = "deployed", network) { if (!network) { diff --git a/hardhat.config.js b/hardhat.config.js index 1d44297c..20974edb 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,6 +1,3 @@ -require("dotenv").config(); -require("hardhat-contract-sizer"); - require("@nomicfoundation/hardhat-chai-matchers"); require("@tenderly/hardhat-tenderly"); @@ -11,6 +8,7 @@ require("@nomiclabs/hardhat-ethers"); require("@nomiclabs/hardhat-etherscan"); require("hardhat-prettier"); require("solidity-coverage"); +require("hardhat-contract-sizer"); require("hardhat-abi-exporter"); require("dotenv").config(); @@ -67,14 +65,24 @@ let ea_bcp = process.env["EA_BASE_CREDIT"]; if (!ea_bcp) { ea_bcp = EMPTY_PRIVATE_KEY; } -let invoicePayer = process.env["INVOICE_PAYER"]; -if (!invoicePayer) { - invoicePayer = EMPTY_PRIVATE_KEY; +let ea_sfp = process.env["EA_SUPERFLUID"]; +if (!ea_sfp) { + ea_sfp = EMPTY_PRIVATE_KEY; +} +let payer = process.env["PAYER"]; +if (!payer) { + payer = EMPTY_PRIVATE_KEY; } + let baseCreditPoolOperator = process.env["BASE_CREDIT_POOL_OPERATOR"]; if (!baseCreditPoolOperator) { baseCreditPoolOperator = EMPTY_PRIVATE_KEY; } +let baseCreditPoolOwnerTreasury = process.env["BASE_CREDIT_POOL_OWNER_TREASURY"]; +if (!baseCreditPoolOwnerTreasury) { + baseCreditPoolOwnerTreasury = EMPTY_PRIVATE_KEY; +} + let receivableFactoringPoolOperator = process.env["RECEIVABLE_FACTORING_POOL_OPERATOR"]; if (!receivableFactoringPoolOperator) { receivableFactoringPoolOperator = EMPTY_PRIVATE_KEY; @@ -83,9 +91,14 @@ let receivableFactoringPoolOwnerTreasury = process.env["RECEIVABLE_FACTORING_POO if (!receivableFactoringPoolOwnerTreasury) { receivableFactoringPoolOwnerTreasury = EMPTY_PRIVATE_KEY; } -let baseCreditPoolOwnerTreasury = process.env["BASE_CREDIT_POOL_OWNER_TREASURY"]; -if (!baseCreditPoolOwnerTreasury) { - baseCreditPoolOwnerTreasury = EMPTY_PRIVATE_KEY; + +let sfpOperator = process.env["SUPERFLUID_POOL_OPERATOR"]; +if (!sfpOperator) { + sfpOperator = EMPTY_PRIVATE_KEY; +} +let sfpTreasury = process.env["SUPERFLUID_POOL_OWNER_TREASURY"]; +if (!sfpTreasury) { + sfpTreasury = EMPTY_PRIVATE_KEY; } // @@ -172,11 +185,14 @@ module.exports = { pdsService, treasury, ea_bcp, - invoicePayer, + payer, baseCreditPoolOperator, receivableFactoringPoolOperator, baseCreditPoolOwnerTreasury, receivableFactoringPoolOwnerTreasury, + ea_sfp, + sfpOperator, + sfpTreasury, ], }, xdai: { @@ -204,24 +220,21 @@ module.exports = { url: polygonUrl, accounts: [deployer, eaService], }, + matic: { + url: polygonUrl, + accounts: [deployer, eaService, pdsService], + }, mumbai: { + url: mumbaiUrl, + accounts: [deployer, eaService], + }, + maticmum: { url: mumbaiUrl, accounts: [ deployer, - proxyOwner, - lender, - ea, - eaService, - pdsService, - treasury, - ea_bcp, - invoicePayer, + eaService ], }, - matic: { - url: polygonUrl, - accounts: [deployer, eaService, pdsService], - }, optimism: { url: "https://mainnet.optimism.io", accounts: { @@ -338,7 +351,7 @@ module.exports = { solidity: { compilers: [ { - version: "0.8.4", + version: "0.8.11", settings: { optimizer: { enabled: true, @@ -360,8 +373,9 @@ module.exports = { etherscan: { apiKey: { goerli: process.env.ETHERSCAN_API_KEY || null, - polygon: process.env.POLYGONSCAN_API_KEY || null, mainnet: process.env.ETHERSCAN_API_KEY || null, + polygon: process.env.POLYGONSCAN_API_KEY || null, + polygonMumbai: process.env.POLYGONSCAN_API_KEY || null, }, }, contractSizer: { diff --git a/package.json b/package.json index 5040dd1c..655b4d44 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,18 @@ "license": "MIT", "devDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^1.0.5", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomiclabs/hardhat-ethers": "^2.1.1", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@openzeppelin/hardhat-upgrades": "^1.23.1", "@tenderly/hardhat-tenderly": "^1.1.6", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/mocha": "^9.1.0", "chai": "^4.3.6", - "ethers": "^5.7.0", + "ethers": "^5.4.7", "hardhat-abi-exporter": "^2.10.0", + "hardhat-celo": "^0.0.4", "hardhat-contract-sizer": "^2.6.1", "hardhat-gas-reporter": "^1.0.9", "hardhat-prettier": "^0.0.1", @@ -21,6 +26,8 @@ "qrcode-terminal": "^0.12.0", "solhint": "^3.3.7", "solidity-coverage": "^0.8.2", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", "typescript": "^4.8.2" }, "scripts": { diff --git a/scripts/cancel-pending-txs.js b/scripts/cancel-pending-txs.js index b14699bd..7c445b72 100644 --- a/scripts/cancel-pending-txs.js +++ b/scripts/cancel-pending-txs.js @@ -2,7 +2,7 @@ const {Wallet, utils} = require("ethers"); const ZERO_BYTES32 = "0x0000000000000000000000000000000000000000000000000000000000000000"; const ACCOUNT_PRIVATE_KEY = ""; -const TO_ADDRESS = "0x60891b087E81Ee2a61B7606f68019ec112c539B9"; +const TO_ADDRESS = "0x07250B0373Aa6a3de47A44e3Cf720A6376296dD5"; async function main() { const network = (await hre.ethers.provider.getNetwork()).name; @@ -16,10 +16,10 @@ async function main() { const data = { to: TO_ADDRESS, - // value: utils.parseUnits("10", "gwei"), - maxFeePerGas: utils.parseUnits("100", "gwei"), - maxPriorityFeePerGas: utils.parseUnits("40", "gwei"), - nonce: null, + value: utils.parseUnits("10", "gwei"), + maxFeePerGas: utils.parseUnits("280", "gwei"), + maxPriorityFeePerGas: utils.parseUnits("200", "gwei"), + nonce: 92173, }; const tx = await account.sendTransaction(data); diff --git a/yarn.lock b/yarn.lock index 838b073c..994f5a1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,11 +23,54 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -197,13 +240,20 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.0", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== dependencies: "@ethersproject/logger" "^5.7.0" +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" @@ -245,6 +295,32 @@ bech32 "1.1.4" ws "7.4.6" +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" @@ -348,7 +424,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.0", "@ethersproject/web@^5.7.0": +"@ethersproject/web@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== @@ -359,6 +435,17 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" @@ -370,6 +457,24 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -381,15 +486,15 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -412,29 +517,31 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@4.0.0-rc.3", "@nomicfoundation/ethereumjs-block@^4.0.0-rc.3": - version "4.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0-rc.3.tgz#759d361968b23f06fd0f3f24023005bd3f05aa76" - integrity sha512-T+KzsCOEB4iP2Wy0OmjsxARbX8czN8LjF2pfdz9ucx37jAHfVAhWmEZaB+wfh7NZqumsBfgRtYbRJ572+nlTBQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-tx" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" +"@nomicfoundation/ethereumjs-block@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" + integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" + ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@6.0.0-rc.3", "@nomicfoundation/ethereumjs-blockchain@^6.0.0-rc.3": - version "6.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0-rc.3.tgz#d6f4111447caad4f2f9c30fbe71117a7fdf081c2" - integrity sha512-GxaMYLXcyY/aFFXOiIwYYDVwHFffnddymldOsBGtGHbs0HM/kYLLF+dp3C31Q0+EaFNa6mF1L0NqAbC82CJRNA== - dependencies: - "@nomicfoundation/ethereumjs-block" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-ethash" "2.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" +"@nomicfoundation/ethereumjs-blockchain@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" + integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-ethash" "3.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" debug "^4.3.3" ethereum-cryptography "0.1.3" @@ -442,105 +549,105 @@ lru-cache "^5.1.1" memory-level "^1.0.0" -"@nomicfoundation/ethereumjs-common@3.0.0-rc.3", "@nomicfoundation/ethereumjs-common@^3.0.0-rc.3": - version "3.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0-rc.3.tgz#f0a43d0a9db0a0ebb587e8b5bac022c152c1da31" - integrity sha512-r7qLtNabVEHNihLZevHV0weNshDpXo/o7i0JD9O10OExdicpgHPsU4qGnAvzO9bby9ANO2ydrOIlrYSm4lBkTg== +"@nomicfoundation/ethereumjs-common@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" + integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== dependencies: - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-util" "9.0.1" crc-32 "^1.2.0" -"@nomicfoundation/ethereumjs-ethash@2.0.0-rc.3": - version "2.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0-rc.3.tgz#78476d68fd15f3ab3ade8b1ad68407d8ac7b96eb" - integrity sha512-l75FH3KYUXuXjEdVZ3P7iVBbFhsghIMUuOBVfau4vx90SEGUQZnrU6cg9jBTyYvn0w9IIKJ76ZmDV8RDohZktA== +"@nomicfoundation/ethereumjs-ethash@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" + integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== dependencies: - "@nomicfoundation/ethereumjs-block" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" bigint-crypto-utils "^3.0.23" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@1.0.0-rc.3", "@nomicfoundation/ethereumjs-evm@^1.0.0-rc.3": - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0-rc.3.tgz#b09b470e33984211df9e1ca7fdff3261b6caef84" - integrity sha512-FY/SxIazYeJQ2uvx5uXV+MRgThrPjzr0nKMEyrFZPgbZb4KvcZarJuQVaJhQ4a5foqq8aHHRbWLdJQyWn9c2jw== +"@nomicfoundation/ethereumjs-evm@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" + integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@nomicfoundation/ethereumjs-rlp@4.0.0-rc.3", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2", "@nomicfoundation/ethereumjs-rlp@^4.0.0-rc.3": - version "4.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0-rc.3.tgz#f654b6aaf74b0859ba68bac9522df82d847070cd" - integrity sha512-4F3fYTdqJhBNDoZ4o7uGzorvcbXuSeRXz46X/Z1TGMri5FjpWFl48qEOse2RpXCFudlAv7n/MpgJSuFzN1vreQ== +"@nomicfoundation/ethereumjs-rlp@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" + integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== -"@nomicfoundation/ethereumjs-statemanager@1.0.0-rc.3", "@nomicfoundation/ethereumjs-statemanager@^1.0.0-rc.3": - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0-rc.3.tgz#1057e81406f058166f68c6af9aac48693cc9ad1a" - integrity sha512-c69I4eZN9LFXUp1OI8hGwTvQMmcICus+MLgK5HELKLexV1SKs+K0iA4jgTK6VMM4wrzkmljyVxU5pM0Cb82XAQ== +"@nomicfoundation/ethereumjs-statemanager@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" + integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" + ethers "^5.7.1" + js-sdsl "^4.1.4" -"@nomicfoundation/ethereumjs-trie@5.0.0-rc.3", "@nomicfoundation/ethereumjs-trie@^5.0.0-rc.3": - version "5.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0-rc.3.tgz#df642ca1883eea0e2c2555028ae912b585d69da6" - integrity sha512-hz84rSGiYOs3vANLGxQm12gKtERMQzkgt1fZBu/OJulMCU+kR1CZxptVpmeg7W8n4NCyIcMPpGeshTMhg8zC5A== +"@nomicfoundation/ethereumjs-trie@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" + integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@4.0.0-rc.3", "@nomicfoundation/ethereumjs-tx@^4.0.0-rc.3": - version "4.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0-rc.3.tgz#0b56bbaee0908491b21419808a44bc0356438060" - integrity sha512-Z3/EYglP+uKyzQj5pc2oMv/vuJ3ZZ2v3qVqRG9k5EsGXNB1lzN1zIh6NCW/vw/AdGoH69MDNGzG5hqGZ9cJJiw== - dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" +"@nomicfoundation/ethereumjs-tx@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" + integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@8.0.0-rc.3", "@nomicfoundation/ethereumjs-util@^8.0.0-rc.3": - version "8.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0-rc.3.tgz#d47dca076b5ea41b4498cf8292666d21f31b4e88" - integrity sha512-Ldd1NVbk+FtP/JKCQTOVrBJzHMXpMnUdqE9oetAqKVnaLszXMEUa/B0fBdJaPIXKU/c9tAba29/pGxRpcQbgKQ== +"@nomicfoundation/ethereumjs-util@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" + integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@^6.0.0-rc.3": - version "6.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0-rc.3.tgz#e1e3f29b45a206fdaafdff8316081c98a558407b" - integrity sha512-MF6WeU0sx+6zM8ustttlZZFZtI6/c/qIWVnxrT6K5VRaiC1Us1ih3S8HBr6xNkl6JgBHj0e0oC1CA9xiowwlUQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-blockchain" "6.0.0-rc.3" - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-evm" "1.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-statemanager" "1.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-tx" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" +"@nomicfoundation/ethereumjs-vm@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" + integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" @@ -556,92 +663,109 @@ deep-eql "^4.0.1" ordinal "^1.0.3" -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" - integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" - integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" - integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" - integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" - integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" - integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" - integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" - integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" - integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" - integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== - -"@nomicfoundation/solidity-analyzer@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" - integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== +"@nomicfoundation/hardhat-network-helpers@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.8.tgz#e4fe1be93e8a65508c46d73c41fa26c7e9f84931" + integrity sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz#342b79e19c456a56d8e76bc2e9cc8474cbcfc774" + integrity sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw== + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" - -"@nomiclabs/hardhat-ethers@^2.0.6", "@nomiclabs/hardhat-ethers@^2.1.1": + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@nomiclabs/hardhat-ethers@^2.0.6": version "2.1.1" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== +"@nomiclabs/hardhat-ethers@^2.1.1": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + "@nomiclabs/hardhat-etherscan@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz#7137554862b3b1c914f1b1bf110f0529fd2dec53" - integrity sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA== + version "3.1.7" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" + integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" + cbor "^8.1.0" chalk "^2.4.2" debug "^4.1.1" fs-extra "^7.0.1" lodash "^4.17.11" semver "^6.3.0" table "^6.8.0" - undici "^5.4.0" + undici "^5.14.0" "@openzeppelin/contracts-upgradeable@^4.8.3": version "4.8.3" @@ -681,21 +805,21 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== dependencies: - "@noble/hashes" "~1.1.1" + "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": @@ -786,10 +910,40 @@ hardhat-deploy "^0.11.10" js-yaml "^3.14.0" -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v5@^10.1.0": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" + integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^6.1.2": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.1.6.tgz#1a749eb35e5054c80df531cf440819cb347c62ea" + integrity sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA== + dependencies: + fs-extra "^9.1.0" "@types/bn.js@^4.11.3": version "4.11.6" @@ -849,10 +1003,15 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/mocha@^9.1.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + "@types/node@*": - version "18.7.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.16.tgz#0eb3cce1e37c79619943d2fd903919fc30850601" - integrity sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.1.tgz#de559d4b33be9a808fd43372ccee822c70f39704" + integrity sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg== "@types/node@^10.0.3": version "10.17.60" @@ -871,11 +1030,24 @@ dependencies: "@types/node" "*" +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + "@types/qs@^6.2.31", "@types/qs@^6.9.7": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -883,11 +1055,6 @@ dependencies: "@types/node" "*" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -923,11 +1090,21 @@ acorn-jsx@^5.0.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^6.0.7: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn@^8.4.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + address@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" @@ -969,9 +1146,9 @@ ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: uri-js "^4.2.2" ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1049,7 +1226,7 @@ antlr4ts@^0.5.0-alpha.4: resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== -anymatch@~3.1.1, anymatch@~3.1.2: +anymatch@~3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -1057,6 +1234,19 @@ anymatch@~3.1.1, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1069,6 +1259,16 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -1127,25 +1327,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1203,21 +1389,9 @@ bech32@1.1.4: integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== bigint-crypto-utils@^3.0.23: - version "3.1.4" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.4.tgz#b00aa00eb792b14f2f71ead916105c17aac98a4c" - integrity sha512-niSkvARUEe8MiAiH+zKXPkgXzlvGDbOqXL3JDevWaA1TrPhUGSCgV+iedm8qMEBQwvSlMMn8GpSuoUjvsm2QfQ== - dependencies: - bigint-mod-arith "^3.1.0" - -bigint-mod-arith@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.0.tgz#ee7186ff512248e245f8c6ed0aa5c0ccf0c116b4" - integrity sha512-vpiKCiv9B1nK8HhFOU7PMC4k9nrufQxeivgCj5yOH2ZMLD+UPwc/RfNgBCX+v8C6t0sF4q7mEZgZij6k53zpWA== - -bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + version "3.2.2" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz#e30a49ec38357c6981cd3da5aaa6480b1f752ee4" + integrity sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw== binary-extensions@^2.0.0: version "2.2.0" @@ -1379,6 +1553,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1389,15 +1568,7 @@ catering@^2.1.0, catering@^2.1.1: resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -cbor@^8.0.0: +cbor@^8.0.0, cbor@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== @@ -1500,14 +1671,14 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== dependencies: abstract-level "^1.0.2" catering "^2.1.0" module-error "^1.0.1" - napi-macros "~2.0.0" + napi-macros "^2.2.2" node-gyp-build "^4.3.0" clean-stack@^2.0.0: @@ -1605,6 +1776,26 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + commander@2.18.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -1688,6 +1879,11 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1723,7 +1919,7 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: +debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1761,6 +1957,11 @@ deep-eql@^4.0.1: dependencies: type-detect "^4.0.0" +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1812,6 +2013,11 @@ diff@5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + difflib@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -2133,14 +2339,14 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" ethereumjs-abi@^0.6.8: version "0.6.8" @@ -2163,7 +2369,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0: +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -2189,7 +2395,43 @@ ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0: +ethers@^5.4.7, ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^5.5.3, ethers@^5.6.8: version "5.7.0" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== @@ -2337,6 +2579,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -2385,7 +2634,12 @@ fmix@^0.1.0: dependencies: imul "^1.0.0" -follow-redirects@^1.12.1, follow-redirects@^1.14.0: +follow-redirects@^1.12.1: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +follow-redirects@^1.14.0: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== @@ -2452,7 +2706,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^7.0.1: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -2470,7 +2724,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: +fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -2535,7 +2789,17 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: +get-intrinsic@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== @@ -2591,6 +2855,18 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -2661,7 +2937,12 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -2704,6 +2985,13 @@ hardhat-abi-exporter@^2.10.0: "@ethersproject/abi" "^5.5.0" delete-empty "^3.0.0" +hardhat-celo@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/hardhat-celo/-/hardhat-celo-0.0.4.tgz#aef6fc91e694dd5c0811953d01b08964e3c0a078" + integrity sha512-K/USkJCTaWUGfmlEs/9EbwYovgfoQ6BfhZNCrG7zAkFfmcYXuUuARwzLyyZbCHjmDOyh17OHiL3ItS89MEAohA== + dependencies: + "@nomicfoundation/hardhat-toolbox" "^1.0.2" + hardhat-contract-sizer@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.6.1.tgz#2b0046a55fa1ec96f19fdab7fde372377401c874" @@ -2749,23 +3037,23 @@ hardhat-prettier@^0.0.1: glob "^7.1.6" hardhat@^2.11.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.1.tgz#9d7967dd360b9a217ac6b7d9ca7f5087db4db01d" - integrity sha512-7FoyfKjBs97GHNpQejHecJBBcRPOEhAE3VkjSWXB3GeeiXefWbw+zhRVOjI4eCsUUt7PyNFAdWje/lhnBT9fig== + version "2.14.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.14.0.tgz#b60c74861494aeb1b50803cf04cc47865a42b87a" + integrity sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0-rc.3" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0-rc.3" - "@nomicfoundation/ethereumjs-common" "^3.0.0-rc.3" - "@nomicfoundation/ethereumjs-evm" "^1.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-rc.3" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "^5.0.0-rc.3" - "@nomicfoundation/ethereumjs-tx" "^4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "^8.0.0-rc.3" - "@nomicfoundation/ethereumjs-vm" "^6.0.0-rc.3" - "@nomicfoundation/solidity-analyzer" "^0.0.3" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" @@ -2800,7 +3088,7 @@ hardhat@^2.11.1: source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" - undici "^5.4.0" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" @@ -2831,6 +3119,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -2967,9 +3260,9 @@ ignore@^5.1.1: integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" + integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== import-fresh@^2.0.0: version "2.0.0" @@ -3226,6 +3519,11 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +js-sdsl@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== + js-sha3@0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" @@ -3338,9 +3636,9 @@ jsprim@^1.2.2: verror "1.10.0" keccak@^3.0.0, keccak@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" @@ -3410,6 +3708,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -3454,6 +3757,11 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + markdown-table@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" @@ -3558,6 +3866,11 @@ mkdirp@0.5.x, mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -3596,11 +3909,10 @@ mocha@7.1.2: yargs-unparser "1.6.0" mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" @@ -3697,10 +4009,10 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== natural-compare@^1.4.0: version "1.4.0" @@ -3738,20 +4050,15 @@ node-environment-flags@1.0.6: semver "^5.7.0" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== node-watch@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.3.tgz#6d4db88e39c8d09d3ea61d6568d80e5975abc7ab" integrity sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ== -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - nofilter@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" @@ -3787,11 +4094,16 @@ object-assign@^4.1.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-keys@^1.0.11, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -4040,6 +4352,11 @@ prettier@^1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + prettier@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" @@ -4076,7 +4393,12 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -4086,13 +4408,20 @@ qrcode-terminal@^0.12.0: resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== -qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: +qs@^6.4.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" +qs@^6.7.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -4116,9 +4445,9 @@ randombytes@^2.1.0: safe-buffer "^5.1.0" raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -4139,9 +4468,9 @@ readable-stream@^2.2.2: util-deprecate "~1.0.1" readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -4175,6 +4504,11 @@ recursive-readdir@^2.2.2: dependencies: minimatch "3.0.4" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -4669,6 +5003,11 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + "string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -4821,6 +5160,16 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -4832,9 +5181,9 @@ table@^5.2.3: string-width "^3.0.0" table@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -4895,8 +5244,40 @@ tough-cookie@^2.3.3, tough-cookie@^4.1.3, tough-cookie@~2.5.0: dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@>=8.0.0: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" @@ -4952,6 +5333,22 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== +typechain@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.2.0.tgz#bd4fc8f111d4405e36858bae6f744604617b60f3" + integrity sha512-tZqhqjxJ9xAS/Lh32jccTjMkpx7sTdUVVHAy5Bf0TIer5QFNYXotiX74oCvoVYjyxUKDK3MXHtMFzMyD3kE+jg== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -4962,6 +5359,16 @@ typescript@^4.8.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + uglify-js@^3.1.4: version "3.17.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" @@ -4977,7 +5384,7 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici@^5.22.1, undici@^5.4.0: +undici@^5.14.0: version "5.22.1" resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b" integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== @@ -5044,6 +5451,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -5106,6 +5518,14 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -5237,6 +5657,11 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"