diff --git a/.github/workflows/contracts-testing.yml b/.github/workflows/contracts-testing.yml index 1d591fdcb..3b5dd04c0 100644 --- a/.github/workflows/contracts-testing.yml +++ b/.github/workflows/contracts-testing.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.5.0 + uses: step-security/harden-runner@v2.10.1 with: disable-sudo: true egress-policy: block @@ -40,14 +40,14 @@ jobs: 54.185.253.63:443 - name: Setup Node.js environment - uses: actions/setup-node@2a017f350dbf6c4b6bb4508cc83809719115162e + uses: actions/setup-node@v4 with: node-version: 18.x - - uses: actions/checkout@7739b9ba2efcda9dde65ad1e3c2dbe65b41dfba7 + - uses: actions/checkout@v4 - name: Cache node modules - uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -74,11 +74,11 @@ jobs: - name: Test with coverage run: | - yarn hardhat coverage --solcoverjs ./.solcover.js --temp artifacts --testfiles \"./test/**/*.ts\" --show-stack-traces + yarn hardhat coverage --solcoverjs ./.solcover.js --temp artifacts --testfiles './test/**/*.ts' --show-stack-traces working-directory: contracts - name: Upload a build artifact - uses: actions/upload-artifact@65d862660abb392b8c4a3d1195a2108db131dd05 + uses: actions/upload-artifact@v4 with: name: code-coverage-report path: contracts/coverage diff --git a/contracts/deploy/00-home-chain-arbitration-neo.ts b/contracts/deploy/00-home-chain-arbitration-neo.ts index eda64ca90..dc804565a 100644 --- a/contracts/deploy/00-home-chain-arbitration-neo.ts +++ b/contracts/deploy/00-home-chain-arbitration-neo.ts @@ -1,6 +1,5 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; -import { BigNumber, BigNumberish } from "ethers"; import { getContractAddress } from "./utils/getContractAddress"; import { deployUpgradable } from "./utils/deployUpgradable"; import { changeCurrencyRate } from "./utils/klerosCoreHelper"; @@ -12,7 +11,7 @@ import { DisputeKitClassic, KlerosCoreNeo } from "../typechain-types"; const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId } = hre; const { deploy, execute } = deployments; - const { AddressZero } = hre.ethers.constants; + const { ZeroAddress } = hre.ethers; const RNG_LOOKAHEAD = 20; // fallback to hardhat node signers on local network @@ -37,14 +36,14 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const rng = await deployUpgradable(deployments, "RandomizerRNG", { from: deployer, - args: [randomizerOracle.address, deployer], + args: [randomizerOracle.target, deployer], log: true, }); const disputeKit = await deployUpgradable(deployments, "DisputeKitClassicNeo", { from: deployer, contract: "DisputeKitClassic", - args: [deployer, AddressZero], + args: [deployer, ZeroAddress], log: true, }); @@ -83,15 +82,15 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) args: [ deployer, deployer, - pnk.address, - AddressZero, + pnk.target, + ZeroAddress, disputeKit.address, false, [minStake, alpha, feeForJuror, jurorsForCourtJump], [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.utils.hexlify(5), // Extra data for sortition module will return the default value of K + ethers.toBeHex(5), // Extra data for sortition module will return the default value of K sortitionModule.address, - nft.address, + nft.target, ], log: true, }); // nonce+2 (implementation), nonce+3 (proxy) @@ -106,7 +105,7 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const core = (await hre.ethers.getContract("KlerosCoreNeo")) as KlerosCoreNeo; try { - await changeCurrencyRate(core, weth.address, true, 1, 1); + await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); } catch (e) { console.error("failed to change currency rates:", e); } @@ -120,7 +119,7 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const resolver = await deploy("DisputeResolverNeo", { from: deployer, contract: "DisputeResolver", - args: [core.address, disputeTemplateRegistry.address], + args: [core.target, disputeTemplateRegistry.target], log: true, }); diff --git a/contracts/deploy/00-home-chain-arbitration-ruler.ts b/contracts/deploy/00-home-chain-arbitration-ruler.ts index ef9ca986b..bd9524084 100644 --- a/contracts/deploy/00-home-chain-arbitration-ruler.ts +++ b/contracts/deploy/00-home-chain-arbitration-ruler.ts @@ -1,14 +1,14 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; -import { BigNumber, BigNumberish } from "ethers"; import { deployUpgradable } from "./utils/deployUpgradable"; import { HomeChains, isSkipped } from "./utils"; import { deployERC20AndFaucet } from "./utils/deployTokens"; -import { KlerosCore } from "../typechain-types"; +import { KlerosCore, KlerosCoreRuler } from "../typechain-types"; import { getContractOrDeployUpgradable } from "./utils/getContractOrDeploy"; +import { changeCurrencyRate } from "./utils/klerosCoreHelper"; const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; + const { deployments, getNamedAccounts, getChainId } = hre; const { deploy } = deployments; // fallback to hardhat node signers on local network @@ -22,40 +22,23 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const minStake = 0; const alpha = 10000; - const feeForJuror = BigNumber.from(10).pow(17); + const feeForJuror = 10n ** 17n; const jurorsForCourtJump = 16; - const klerosCore = await deployUpgradable(deployments, "KlerosCoreRuler", { + await deployUpgradable(deployments, "KlerosCoreRuler", { from: deployer, args: [ deployer, // governor - pnk.address, + pnk.target, [minStake, alpha, feeForJuror, jurorsForCourtJump], ], log: true, }); - - const changeCurrencyRate = async ( - erc20: string, - accepted: boolean, - rateInEth: BigNumberish, - rateDecimals: BigNumberish - ) => { - const core = (await ethers.getContract("KlerosCoreRuler")) as KlerosCore; - const pnkRate = await core.currencyRates(erc20); - if (pnkRate.feePaymentAccepted !== accepted) { - console.log(`core.changeAcceptedFeeTokens(${erc20}, ${accepted})`); - await core.changeAcceptedFeeTokens(erc20, accepted); - } - if (!pnkRate.rateInEth.eq(rateInEth) || pnkRate.rateDecimals !== rateDecimals) { - console.log(`core.changeCurrencyRates(${erc20}, ${rateInEth}, ${rateDecimals})`); - await core.changeCurrencyRates(erc20, rateInEth, rateDecimals); - } - }; + const core = (await hre.ethers.getContract("KlerosCoreRuler")) as KlerosCoreRuler; try { - await changeCurrencyRate(pnk.address, true, 12225583, 12); - await changeCurrencyRate(dai.address, true, 60327783, 11); - await changeCurrencyRate(weth.address, true, 1, 1); + await changeCurrencyRate(core, await pnk.getAddress(), true, 12225583, 12); + await changeCurrencyRate(core, await dai.getAddress(), true, 60327783, 11); + await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); } catch (e) { console.error("failed to change currency rates:", e); } @@ -68,7 +51,7 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) await deploy("DisputeResolverRuler", { from: deployer, - args: [klerosCore.address, disputeTemplateRegistry.address], + args: [core.target, disputeTemplateRegistry.target], log: true, }); }; diff --git a/contracts/deploy/00-home-chain-arbitration-university.ts b/contracts/deploy/00-home-chain-arbitration-university.ts index 92835fa37..5bdd1fdd9 100644 --- a/contracts/deploy/00-home-chain-arbitration-university.ts +++ b/contracts/deploy/00-home-chain-arbitration-university.ts @@ -1,6 +1,5 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; -import { BigNumber, BigNumberish } from "ethers"; import { getContractAddress } from "./utils/getContractAddress"; import { deployUpgradable } from "./utils/deployUpgradable"; import { changeCurrencyRate } from "./utils/klerosCoreHelper"; @@ -12,7 +11,7 @@ import { getContractOrDeployUpgradable } from "./utils/getContractOrDeploy"; const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId } = hre; const { deploy } = deployments; - const { AddressZero } = hre.ethers.constants; + const { ZeroAddress } = hre.ethers; // fallback to hardhat node signers on local network const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; @@ -26,7 +25,7 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const disputeKit = await deployUpgradable(deployments, "DisputeKitClassicUniversity", { from: deployer, contract: "DisputeKitClassic", - args: [deployer, AddressZero], + args: [deployer, ZeroAddress], log: true, }); @@ -51,8 +50,8 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) args: [ deployer, // governor deployer, // instructor - pnk.address, - AddressZero, + pnk.target, + ZeroAddress, disputeKit.address, false, [minStake, alpha, feeForJuror, jurorsForCourtJump], @@ -72,11 +71,11 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const core = (await hre.ethers.getContract("KlerosCoreUniversity")) as KlerosCoreUniversity; try { - await changeCurrencyRate(core, pnk.address, true, 12225583, 12); - await changeCurrencyRate(core, dai.address, true, 60327783, 11); - await changeCurrencyRate(core, weth.address, true, 1, 1); + await changeCurrencyRate(core, await pnk.getAddress(), true, 12225583, 12); + await changeCurrencyRate(core, await dai.getAddress(), true, 60327783, 11); + await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); } catch (e) { - console.error("failed to change currency rates:", e); + console.error("Failed to change currency rates for token, with error:", e); } const disputeTemplateRegistry = await getContractOrDeployUpgradable(hre, "DisputeTemplateRegistry", { @@ -88,7 +87,7 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) await deploy("DisputeResolverUniversity", { from: deployer, contract: "DisputeResolver", - args: [core.address, disputeTemplateRegistry.address], + args: [core.target, disputeTemplateRegistry.target], log: true, }); }; diff --git a/contracts/deploy/00-home-chain-arbitration.ts b/contracts/deploy/00-home-chain-arbitration.ts index 78b435aa5..504eaf60b 100644 --- a/contracts/deploy/00-home-chain-arbitration.ts +++ b/contracts/deploy/00-home-chain-arbitration.ts @@ -1,6 +1,5 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; -import { BigNumber, BigNumberish } from "ethers"; import { getContractAddress } from "./utils/getContractAddress"; import { deployUpgradable } from "./utils/deployUpgradable"; import { changeCurrencyRate } from "./utils/klerosCoreHelper"; @@ -11,7 +10,7 @@ import { DisputeKitClassic, KlerosCore } from "../typechain-types"; const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { AddressZero } = hre.ethers.constants; + const { ZeroAddress } = hre.ethers; const RNG_LOOKAHEAD = 20; // fallback to hardhat node signers on local network @@ -36,13 +35,13 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const rng = await deployUpgradable(deployments, "RandomizerRNG", { from: deployer, - args: [randomizerOracle.address, deployer], + args: [randomizerOracle.target, deployer], log: true, }); const disputeKit = await deployUpgradable(deployments, "DisputeKitClassic", { from: deployer, - args: [deployer, AddressZero], + args: [deployer, ZeroAddress], log: true, }); @@ -70,13 +69,13 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) args: [ deployer, deployer, - pnk.address, - AddressZero, + pnk.target, + ZeroAddress, disputeKit.address, false, [minStake, alpha, feeForJuror, jurorsForCourtJump], [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.utils.hexlify(5), // Extra data for sortition module will return the default value of K + ethers.toBeHex(5), // Extra data for sortition module will return the default value of K sortitionModule.address, ], log: true, @@ -92,9 +91,9 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const core = (await hre.ethers.getContract("KlerosCore")) as KlerosCore; try { - await changeCurrencyRate(core, pnk.address, true, 12225583, 12); - await changeCurrencyRate(core, dai.address, true, 60327783, 11); - await changeCurrencyRate(core, weth.address, true, 1, 1); + await changeCurrencyRate(core, await pnk.getAddress(), true, 12225583, 12); + await changeCurrencyRate(core, await dai.getAddress(), true, 60327783, 11); + await changeCurrencyRate(core, await weth.getAddress(), true, 1, 1); } catch (e) { console.error("failed to change currency rates:", e); } diff --git a/contracts/deploy/00-home-chain-pnk-faucet.ts b/contracts/deploy/00-home-chain-pnk-faucet.ts index e6af9d071..e10eb93bf 100644 --- a/contracts/deploy/00-home-chain-pnk-faucet.ts +++ b/contracts/deploy/00-home-chain-pnk-faucet.ts @@ -8,7 +8,7 @@ const pnkByChain = new Map([ ]); const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { ethers, deployments, getNamedAccounts, getChainId } = hre; + const { deployments, getNamedAccounts, getChainId } = hre; const { deploy, execute } = deployments; // fallback to hardhat node signers on local network @@ -24,12 +24,7 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) args: [pnkAddress], log: true, }); - await execute( - "PNKFaucet", - { from: deployer, log: true }, - "changeAmount", - hre.ethers.utils.parseUnits("10000", "ether") - ); + await execute("PNKFaucet", { from: deployer, log: true }, "changeAmount", hre.ethers.parseUnits("10000", "ether")); } }; diff --git a/contracts/deploy/01-foreign-gateway-on-ethereum.ts b/contracts/deploy/01-foreign-gateway-on-ethereum.ts index bc482f7b3..4c85a3fdb 100644 --- a/contracts/deploy/01-foreign-gateway-on-ethereum.ts +++ b/contracts/deploy/01-foreign-gateway-on-ethereum.ts @@ -7,8 +7,8 @@ import { deployUpgradable } from "./utils/deployUpgradable"; const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId, config } = hre; - const { deploy, execute } = deployments; - const { hexZeroPad, hexlify } = ethers.utils; + const { execute } = deployments; + const { zeroPadValue, toBeHex } = ethers; // fallback to hardhat node signers on local network const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; @@ -19,7 +19,7 @@ const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironme // TODO: use deterministic deployments const network = config.networks[hre.network.name]; const homeNetwork = config.networks[network.companionNetworks.home] as HttpNetworkConfig; - const homeChainProvider = new ethers.providers.JsonRpcProvider(homeNetwork.url); + const homeChainProvider = new ethers.JsonRpcProvider(homeNetwork.url); let nonce = await homeChainProvider.getTransactionCount(deployer); nonce += 1; // HomeGatewayToEthereum Proxy deploy tx will be the 2nd tx after this on its home network, so we add 1 to the current nonce. const homeGatewayAddress = getContractAddress(deployer, nonce); @@ -29,7 +29,7 @@ const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironme console.log("using VeaOutboxArbToEthDevnet at %s", veaOutbox.address); const homeChainId = (await homeChainProvider.getNetwork()).chainId; - const homeChainIdAsBytes32 = hexZeroPad(hexlify(homeChainId), 32); + const homeChainIdAsBytes32 = zeroPadValue(toBeHex(homeChainId), 32); await deployUpgradable(deployments, "ForeignGatewayOnEthereum", { from: deployer, contract: "ForeignGateway", diff --git a/contracts/deploy/01-foreign-gateway-on-gnosis.ts b/contracts/deploy/01-foreign-gateway-on-gnosis.ts index cadec5e3d..e0ab6861f 100644 --- a/contracts/deploy/01-foreign-gateway-on-gnosis.ts +++ b/contracts/deploy/01-foreign-gateway-on-gnosis.ts @@ -1,4 +1,5 @@ -import { parseUnits } from "ethers/lib/utils"; +import { parseUnits } from "ethers"; +import { BigNumber } from "@ethersproject/bignumber"; import { HardhatRuntimeEnvironment, HttpNetworkConfig } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; import { getContractAddress } from "./utils/getContractAddress"; @@ -6,12 +7,12 @@ import { KlerosCore__factory } from "../typechain-types"; import { Courts, ForeignChains, isSkipped } from "./utils"; import { deployUpgradable } from "./utils/deployUpgradable"; -const ONE_GWEI = parseUnits("1", "gwei"); +const ONE_GWEI = BigNumber.from(parseUnits("1", "gwei")); const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId, config } = hre; const { deploy, execute } = deployments; - const { hexZeroPad, hexlify } = ethers.utils; + const { zeroPadValue, toBeHex } = ethers; // fallback to hardhat node signers on local network const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; @@ -22,7 +23,7 @@ const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironme // TODO: use deterministic deployments const network = config.networks[hre.network.name]; const homeNetwork = config.networks[network.companionNetworks.home] as HttpNetworkConfig; - const homeChainProvider = new ethers.providers.JsonRpcProvider(homeNetwork.url); + const homeChainProvider = new ethers.JsonRpcProvider(homeNetwork.url); let nonce = await homeChainProvider.getTransactionCount(deployer); nonce += 1; // HomeGatewayToEthereum Proxy deploy tx will be the 2nd tx after this on its home network, so we add 1 to the current nonce. const homeGatewayAddress = getContractAddress(deployer, nonce); // HomeGateway deploy tx will be the next tx home network @@ -32,7 +33,7 @@ const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironme console.log("using VeaOutboxArbToGnosisDevnet at %s", veaOutbox.address); const homeChainId = (await homeChainProvider.getNetwork()).chainId; - const homeChainIdAsBytes32 = hexZeroPad(hexlify(homeChainId), 32); + const homeChainIdAsBytes32 = zeroPadValue(toBeHex(homeChainId), 32); await deployUpgradable(deployments, "ForeignGatewayOnGnosis", { from: deployer, contract: "ForeignGateway", diff --git a/contracts/deploy/02-home-gateway-to-ethereum.ts b/contracts/deploy/02-home-gateway-to-ethereum.ts index 03fbbcee2..84cf1550c 100644 --- a/contracts/deploy/02-home-gateway-to-ethereum.ts +++ b/contracts/deploy/02-home-gateway-to-ethereum.ts @@ -32,7 +32,7 @@ const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) veaInbox.address, foreignChainId, foreignGateway.address, - ethers.constants.AddressZero, // feeToken is ETH + ethers.ZeroAddress, // feeToken is ETH ], log: true, }); // nonce+0 diff --git a/contracts/deploy/03-vea-mock.ts b/contracts/deploy/03-vea-mock.ts index b1c8e5010..f21d83869 100644 --- a/contracts/deploy/03-vea-mock.ts +++ b/contracts/deploy/03-vea-mock.ts @@ -11,7 +11,7 @@ import { deployUpgradable } from "./utils/deployUpgradable"; const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts } = hre; const { deploy, execute } = deployments; - const { hexZeroPad, hexlify } = ethers.utils; + const { zeroPadValue, toBeHex } = ethers; // fallback to hardhat node signers on local network const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; @@ -29,7 +29,7 @@ const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) const homeGatewayAddress = getContractAddress(deployer, nonce); console.log("calculated future HomeGatewayToEthereum address for nonce %d: %s", nonce, homeGatewayAddress); - const homeChainIdAsBytes32 = hexZeroPad(hexlify(HardhatChain.HARDHAT), 32); + const homeChainIdAsBytes32 = zeroPadValue(toBeHex(HardhatChain.HARDHAT), 32); const foreignGateway = await deployUpgradable(deployments, "ForeignGatewayOnEthereum", { from: deployer, contract: "ForeignGateway", @@ -48,7 +48,8 @@ const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) vea.address, HardhatChain.HARDHAT, foreignGateway.address, - ethers.constants.AddressZero, // feeToken + ethers.ZeroAddress, // feeToken + // Confirm that using ZeroAddress here is intentional and safe for the intended use case. ], gasLimit: 4000000, log: true, @@ -56,7 +57,7 @@ const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) // TODO: disable the gateway until fully initialized with the correct fees OR allow disputeCreators to add funds again if necessary. const signer = (await hre.ethers.getSigners())[0]; - const core = await KlerosCore__factory.connect(klerosCore.address, signer); + const core = KlerosCore__factory.connect(klerosCore.address, signer); // TODO: set up the correct fees for the FORKING_COURT const fee = (await core.courts(Courts.GENERAL)).feeForJuror; await execute("ForeignGatewayOnEthereum", { from: deployer, log: true }, "changeCourtJurorFee", Courts.GENERAL, fee); @@ -80,7 +81,7 @@ const deployHomeGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) "disputeTemplateMapping: TODO", extraData, disputeTemplateRegistry.address, - ethers.constants.AddressZero, + ethers.ZeroAddress, ], log: true, }); diff --git a/contracts/deploy/04-foreign-arbitrable.ts b/contracts/deploy/04-foreign-arbitrable.ts index 135d0b8fe..1a773a854 100644 --- a/contracts/deploy/04-foreign-arbitrable.ts +++ b/contracts/deploy/04-foreign-arbitrable.ts @@ -1,8 +1,9 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; -import { parseUnits } from "ethers/lib/utils"; +import { parseUnits } from "ethers"; import disputeTemplate from "../test/fixtures/DisputeTemplate.simple.json"; import { ForeignChains, isSkipped } from "./utils"; +import { BigNumber } from "@ethersproject/bignumber"; const foreignGatewayArtifactByChain = new Map([ [ForeignChains.ETHEREUM_MAINNET, "ForeignGatewayOnEthereum"], @@ -11,7 +12,7 @@ const foreignGatewayArtifactByChain = new Map([ [ForeignChains.GNOSIS_CHIADO, "ForeignGatewayOnGnosis"], ]); -const ONE_GWEI = parseUnits("1", "gwei"); +const ONE_GWEI = BigNumber.from(parseUnits("1", "gwei")); const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId, config } = hre; @@ -22,7 +23,7 @@ const deployForeignGateway: DeployFunction = async (hre: HardhatRuntimeEnvironme const chainId = Number(await getChainId()); console.log("deploying to chainId %s with deployer %s", chainId, deployer); - const foreignGatewayArtifact = foreignGatewayArtifactByChain.get(chainId) ?? ethers.constants.AddressZero; + const foreignGatewayArtifact = foreignGatewayArtifactByChain.get(chainId) ?? ethers.ZeroAddress; const foreignGateway = await deployments.get(foreignGatewayArtifact); console.log("using foreign gateway: %s", foreignGatewayArtifact); diff --git a/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts b/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts index 99ac9b7b7..7fd87c946 100644 --- a/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts +++ b/contracts/deploy/04-klerosliquid-to-v2-gnosis.ts @@ -1,14 +1,15 @@ -import { parseUnits, parseEther } from "ethers/lib/utils"; +import { parseUnits, parseEther } from "ethers"; import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; import disputeTemplate from "../test/fixtures/DisputeTemplate.simple.json"; import { ForeignChains, isSkipped } from "./utils"; +import { BigNumber } from "@ethersproject/bignumber"; const wrappedPNKByChain = new Map([ [ForeignChains.GNOSIS_MAINNET, "0xcb3231aBA3b451343e0Fddfc45883c842f223846"], ]); -const ONE_GWEI = parseUnits("1", "gwei"); +const ONE_GWEI = BigNumber.from(parseUnits("1", "gwei")); const deployKlerosLiquid: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId } = hre; @@ -40,7 +41,7 @@ const deployKlerosLiquid: DeployFunction = async (hre: HardhatRuntimeEnvironment } const wPnkAddress = wrappedPNKByChain.get(ForeignChains[ForeignChains[chainId]]); - const rng = ethers.constants.AddressZero; + const rng = ethers.ZeroAddress; const minStakingTime = 99999999; const maxFreezingTime = 0; const minStake = parseEther("9999999"); diff --git a/contracts/deploy/05-arbitrable-dispute-template.ts b/contracts/deploy/05-arbitrable-dispute-template.ts index 032d57ea8..0ac04fba8 100644 --- a/contracts/deploy/05-arbitrable-dispute-template.ts +++ b/contracts/deploy/05-arbitrable-dispute-template.ts @@ -1,6 +1,7 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; import { ArbitrableExample } from "../typechain-types"; +import { EventLog } from "ethers"; const deployResolver: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers } = hre; @@ -32,8 +33,8 @@ const deployResolver: DeployFunction = async (hre: HardhatRuntimeEnvironment) => const arbitrable = (await ethers.getContract("ArbitrableExample")) as ArbitrableExample; let tx = await (await arbitrable.changeDisputeTemplate(template, "disputeTemplateMapping: TODO")).wait(); - tx.events?.forEach((event) => { - console.log("event: %O", event.args); + tx?.logs?.forEach((event) => { + if (event instanceof EventLog) console.log("event: %O", event.args); }); }; diff --git a/contracts/deploy/fix1148.ts b/contracts/deploy/fix1148.ts index 601050290..fc3cde36e 100644 --- a/contracts/deploy/fix1148.ts +++ b/contracts/deploy/fix1148.ts @@ -7,7 +7,7 @@ import { HomeChains, isSkipped } from "./utils"; const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId } = hre; const { deploy, execute } = deployments; - const { AddressZero } = ethers.constants; + const { ZeroAddress } = ethers; // fallback to hardhat node signers on local network const deployer = (await getNamedAccounts()).deployer ?? (await ethers.getSigners())[0].address; @@ -16,27 +16,28 @@ const deployArbitration: DeployFunction = async (hre: HardhatRuntimeEnvironment) const klerosCore = (await ethers.getContract("KlerosCore")) as KlerosCore; const oldDisputeKit = (await ethers.getContract("DisputeKitClassic")) as DisputeKitClassic; + const oldDisputeKitAddress = await oldDisputeKit.getAddress(); await deploy("DisputeKitClassic", { from: deployer, - args: [deployer, AddressZero], + args: [deployer, ZeroAddress], log: true, }); const newDisputeKit = (await ethers.getContract("DisputeKitClassic")) as DisputeKitClassic; - - await execute("DisputeKitClassic", { from: deployer, log: true }, "changeCore", klerosCore.address); - await execute("KlerosCore", { from: deployer, log: true }, "addNewDisputeKit", newDisputeKit.address, 0); + const newDisputeKitAddress = await newDisputeKit.getAddress(); + await execute("DisputeKitClassic", { from: deployer, log: true }, "changeCore", await klerosCore.getAddress()); + await execute("KlerosCore", { from: deployer, log: true }, "addNewDisputeKit", await newDisputeKit.getAddress(), 0); const oldDisputeKitId = 1; const newDisputeKitId = 2; assert( - await klerosCore.disputeKits(oldDisputeKitId).then((dk) => dk === oldDisputeKit.address), + await klerosCore.disputeKits(oldDisputeKitId).then((dk) => dk === oldDisputeKitAddress), `wrong dispute kit id ${oldDisputeKitId}` ); assert( - await klerosCore.disputeKits(newDisputeKitId).then((dk) => dk === newDisputeKit.address), + await klerosCore.disputeKits(newDisputeKitId).then((dk) => dk === newDisputeKitAddress), `wrong dispute kit id ${newDisputeKitId}` ); diff --git a/contracts/deploy/upgrade-kleros-core.ts b/contracts/deploy/upgrade-kleros-core.ts index 956b1e65c..93472be91 100644 --- a/contracts/deploy/upgrade-kleros-core.ts +++ b/contracts/deploy/upgrade-kleros-core.ts @@ -1,12 +1,11 @@ import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; -import { BigNumber } from "ethers"; import { deployUpgradable } from "./utils/deployUpgradable"; import { HomeChains, isSkipped } from "./utils"; const deployUpgradeKlerosCore: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const { ethers, deployments, getNamedAccounts, getChainId } = hre; - const { AddressZero } = hre.ethers.constants; + const { ZeroAddress } = hre.ethers; // fallback to hardhat node signers on local network const deployer = (await getNamedAccounts()).deployer ?? (await hre.ethers.getSigners())[0].address; @@ -16,9 +15,9 @@ const deployUpgradeKlerosCore: DeployFunction = async (hre: HardhatRuntimeEnviro try { const pnk = await deployments.get("PNK"); const disputeKit = await deployments.get("DisputeKitClassic"); - const minStake = BigNumber.from(10).pow(20).mul(2); + const minStake = 2n * 10n ** 20n; const alpha = 10000; - const feeForJuror = BigNumber.from(10).pow(17); + const feeForJuror = 10n * 17n; const sortitionModule = await deployments.get("SortitionModule"); console.log("upgrading the KlerosCore..."); @@ -27,12 +26,12 @@ const deployUpgradeKlerosCore: DeployFunction = async (hre: HardhatRuntimeEnviro args: [ deployer, pnk, - AddressZero, + ZeroAddress, disputeKit.address, false, [minStake, alpha, feeForJuror, 256], // minStake, alpha, feeForJuror, jurorsForCourtJump [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.utils.hexlify(5), // Extra data for sortition module will return the default value of K + ethers.toBeHex(5), // Extra data for sortition module will return the default value of K sortitionModule.address, ], }); diff --git a/contracts/deploy/utils/deployTokens.ts b/contracts/deploy/utils/deployTokens.ts index 6dd7ed410..303af1ddc 100644 --- a/contracts/deploy/utils/deployTokens.ts +++ b/contracts/deploy/utils/deployTokens.ts @@ -1,6 +1,5 @@ -import { Contract } from "@ethersproject/contracts"; +import { Contract } from "ethers"; import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { BigNumber } from "ethers"; import { getContractOrDeploy } from "./getContractOrDeploy"; import { isMainnet } from "."; @@ -8,7 +7,7 @@ export const deployERC20AndFaucet = async ( hre: HardhatRuntimeEnvironment, deployer: string, ticker: string, - faucetFundingAmount: BigNumber = hre.ethers.utils.parseUnits("100000") + faucetFundingAmount: bigint = hre.ethers.parseUnits("100000") ): Promise => { const erc20 = await deployERC20(hre, deployer, ticker); if (!isMainnet(hre.network)) { @@ -35,20 +34,21 @@ export const deployFaucet = async ( deployer: string, ticker: string, erc20: Contract, - faucetFundingAmount: BigNumber + faucetFundingAmount: bigint ): Promise => { const faucet = await getContractOrDeploy(hre, `${ticker}Faucet`, { from: deployer, contract: "Faucet", - args: [erc20.address], + args: [erc20.target], log: true, }); - const faucetBalance = await erc20.balanceOf(faucet.address); + + const faucetBalance = await erc20.balanceOf(faucet.target); const deployerBalance = await erc20.balanceOf(deployer); - if (deployerBalance.gte(faucetFundingAmount) && faucetBalance.lt(faucetFundingAmount.div(5))) { + if (deployerBalance >= faucetFundingAmount && faucetBalance < faucetFundingAmount / 5n) { // Fund the faucet if deployer has enough tokens and if the faucet has less than 20% of the faucetFundingAmount console.log(`funding ${ticker}Faucet with ${faucetFundingAmount}`); - await erc20.transfer(faucet.address, faucetFundingAmount); + await erc20.transfer(faucet.target, faucetFundingAmount); } }; diff --git a/contracts/deploy/utils/getContractOrDeploy.ts b/contracts/deploy/utils/getContractOrDeploy.ts index d83adfbf4..fcaf27041 100644 --- a/contracts/deploy/utils/getContractOrDeploy.ts +++ b/contracts/deploy/utils/getContractOrDeploy.ts @@ -1,18 +1,17 @@ -import { Contract } from "@ethersproject/contracts"; import { DeployOptions } from "hardhat-deploy/types"; import { HardhatRuntimeEnvironment } from "hardhat/types"; import { deployUpgradable } from "./deployUpgradable"; - +import { Contract } from "ethers"; export const getContractOrDeploy = async ( hre: HardhatRuntimeEnvironment, contractName: string, options: DeployOptions ): Promise => { - let contract = await hre.ethers.getContractOrNull(contractName); + let contract = await hre.ethers.getContractOrNull(contractName); if (!contract) { console.log(`contract ${contractName} not deployed, deploying now...`); await hre.deployments.deploy(contractName, options); - contract = await hre.ethers.getContract(contractName); + contract = await hre.ethers.getContract(contractName); } else { console.log(`contract ${contractName} already deployed`); } @@ -24,11 +23,11 @@ export const getContractOrDeployUpgradable = async ( contractName: string, options: DeployOptions ): Promise => { - let contract = await hre.ethers.getContractOrNull(contractName); + let contract = await hre.ethers.getContractOrNull(contractName); if (!contract) { console.log(`contract ${contractName} not deployed, deploying as upgradable now...`); await deployUpgradable(hre.deployments, contractName, options); - contract = await hre.ethers.getContract(contractName); + contract = await hre.ethers.getContract(contractName); } else { console.log(`contract ${contractName} already deployed`); } diff --git a/contracts/deploy/utils/index.ts b/contracts/deploy/utils/index.ts index 71291f57d..bb14bf0fd 100644 --- a/contracts/deploy/utils/index.ts +++ b/contracts/deploy/utils/index.ts @@ -37,5 +37,5 @@ export const isSkipped = async (network: Network, skip: boolean) => { return false; }; -export const PNK = (n: number) => ethers.utils.parseUnits(String(n)); -export const ETH = (n: number) => ethers.utils.parseUnits(String(n)); +export const PNK = (n: number) => ethers.parseUnits(String(n)); +export const ETH = (n: number) => ethers.parseUnits(String(n)); diff --git a/contracts/deploy/utils/klerosCoreHelper.ts b/contracts/deploy/utils/klerosCoreHelper.ts index b2eb70dc0..fa9318841 100644 --- a/contracts/deploy/utils/klerosCoreHelper.ts +++ b/contracts/deploy/utils/klerosCoreHelper.ts @@ -1,8 +1,8 @@ -import { KlerosCore, KlerosCoreNeo, KlerosCoreUniversity } from "../../typechain-types"; -import { BigNumberish } from "ethers"; +import { KlerosCore, KlerosCoreNeo, KlerosCoreRuler, KlerosCoreUniversity } from "../../typechain-types"; +import { BigNumberish, toBigInt } from "ethers"; export const changeCurrencyRate = async ( - core: KlerosCore | KlerosCoreNeo | KlerosCoreUniversity, + core: KlerosCore | KlerosCoreNeo | KlerosCoreRuler | KlerosCoreUniversity, erc20: string, accepted: boolean, rateInEth: BigNumberish, @@ -13,7 +13,7 @@ export const changeCurrencyRate = async ( console.log(`core.changeAcceptedFeeTokens(${erc20}, ${accepted})`); await core.changeAcceptedFeeTokens(erc20, accepted); } - if (!pnkRate.rateInEth.eq(rateInEth) || pnkRate.rateDecimals !== rateDecimals) { + if (pnkRate.rateInEth !== toBigInt(rateInEth) || pnkRate.rateDecimals !== rateDecimals) { console.log(`core.changeCurrencyRates(${erc20}, ${rateInEth}, ${rateDecimals})`); await core.changeCurrencyRates(erc20, rateInEth, rateDecimals); } diff --git a/contracts/package.json b/contracts/package.json index 0de65bd30..39941fff5 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -65,12 +65,12 @@ "@kleros/kleros-v2-prettier-config": "workspace:^", "@kleros/kleros-v2-tsconfig": "workspace:^", "@logtail/pino": "^0.4.22", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.6", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "@nomiclabs/hardhat-solhint": "^3.0.1", - "@openzeppelin/contracts": "^5.0.2", - "@typechain/ethers-v5": "^11.1.2", - "@typechain/hardhat": "^7.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.8", + "@nomicfoundation/hardhat-ethers": "^3.0.8", + "@nomiclabs/hardhat-solhint": "^4.0.1", + "@openzeppelin/contracts": "^5.1.0", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^20.17.1", @@ -79,24 +79,24 @@ "chai": "^4.4.1", "dotenv": "^16.3.1", "ethereumjs-util": "^7.1.5", - "ethers": "^5.7.2", + "ethers": "^6.13.4", "graphql": "^16.9.0", "graphql-request": "^6.1.0", - "hardhat": "2.15.0", + "hardhat": "2.22.15", "hardhat-contract-sizer": "^2.10.0", - "hardhat-deploy": "0.11.42", - "hardhat-deploy-ethers": "0.4.0-next.1", + "hardhat-deploy": "^0.14.0", + "hardhat-deploy-ethers": "^0.4.2", "hardhat-deploy-tenderly": "^0.2.0", "hardhat-docgen": "^1.3.0", - "hardhat-gas-reporter": "^1.0.9", - "hardhat-tracer": "^2.7.0", + "hardhat-gas-reporter": "^2.2.1", + "hardhat-tracer": "^3.1.0", "hardhat-watcher": "^2.5.0", "node-fetch": "^3.3.2", "pino": "^8.21.0", "pino-pretty": "^10.3.1", "shelljs": "^0.8.5", "solhint-plugin-prettier": "^0.1.0", - "solidity-coverage": "0.8.2", + "solidity-coverage": "^0.8.13", "ts-node": "^10.9.2", "typechain": "^8.3.2", "typescript": "^5.3.3" diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts index 68152a965..0dfdfb8e8 100644 --- a/contracts/scripts/deploy.ts +++ b/contracts/scripts/deploy.ts @@ -17,9 +17,9 @@ async function main() { const ConstantRNG = await ethers.getContractFactory("ConstantNG"); const constantRNG = await ConstantRNG.deploy(42); - await constantRNG.deployed(); + await constantRNG.deploymentTransaction(); - console.log("ConstantRNG deployed to:", constantRNG.address); + console.log("ConstantRNG deployed to:", constantRNG.target); } // We recommend this pattern to be able to use async/await everywhere diff --git a/contracts/scripts/disputeCreatorBot.ts b/contracts/scripts/disputeCreatorBot.ts index d8c18fa5e..b2e2ede07 100644 --- a/contracts/scripts/disputeCreatorBot.ts +++ b/contracts/scripts/disputeCreatorBot.ts @@ -2,7 +2,7 @@ import env from "./utils/env"; import loggerFactory from "./utils/logger"; import hre = require("hardhat"); import { KlerosCore, DisputeResolver } from "../typechain-types"; -import { BigNumber } from "ethers"; + const { ethers } = hre; const HEARTBEAT_URL = env.optionalNoDefault("HEARTBEAT_URL_DISPUTOR_BOT"); @@ -43,7 +43,7 @@ export default async function main() { ]; const randomTemplate = templates[Math.floor(Math.random() * templates.length)]; const nbOfChoices = 2; - const cost = (await core.functions["arbitrationCost(bytes)"](extraData)).cost; + const cost = await core["arbitrationCost(bytes)"](extraData); const tx = await resolver.createDisputeForTemplate( extraData, randomTemplate, @@ -55,10 +55,10 @@ export default async function main() { ); logger.info(`Dispute creation tx: ${tx.hash}`); - const blockNumber = await tx.wait().then((receipt) => receipt.blockNumber); + const blockNumber = await tx.wait().then((receipt) => receipt?.blockNumber); const disputeId = await resolver .queryFilter(resolver.filters.DisputeRequest(), blockNumber, blockNumber) - .then((events) => BigNumber.from(events[0].args[1])); + .then((events) => ethers.toBigInt(events[0].args[1])); logger.info(`Dispute created with disputeId ${disputeId.toString()}`); logger.info("Shutting down"); diff --git a/contracts/scripts/getCourtsV1.ts b/contracts/scripts/getCourtsV1.ts index 628d404e3..e6963f2a8 100644 --- a/contracts/scripts/getCourtsV1.ts +++ b/contracts/scripts/getCourtsV1.ts @@ -37,7 +37,7 @@ const configByChain = new Map([ async function main() { const chainId = Number(await hre.getChainId()); - const courtAddress = configByChain.get(chainId)?.courtAddress ?? hre.ethers.constants.AddressZero; + const courtAddress = configByChain.get(chainId)?.courtAddress ?? hre.ethers.ZeroAddress; const courtsV1 = (await ethers.getContractAt("IKlerosLiquid", courtAddress)) as IKlerosLiquid; const courts: Court[] = []; @@ -47,7 +47,7 @@ async function main() { (result) => ({ id: courtId, - parent: result.parent.toNumber(), + parent: ethers.getNumber(result.parent), hiddenVotes: result.hiddenVotes, minStake: result.minStake.toString(), alpha: result.alpha.toString(), @@ -58,7 +58,7 @@ async function main() { ); court.timesPerPeriod = await courtsV1.getSubcourt(courtId).then((result) => { - return result.timesPerPeriod.map((bn) => bn.toNumber()); + return result.timesPerPeriod.map((bn) => ethers.getNumber(bn)); }); court.id = courtId; diff --git a/contracts/scripts/getPoliciesV1.ts b/contracts/scripts/getPoliciesV1.ts index c1ee27ddc..a992be223 100644 --- a/contracts/scripts/getPoliciesV1.ts +++ b/contracts/scripts/getPoliciesV1.ts @@ -18,7 +18,7 @@ const policyRegistryByChain = new Map([ async function main() { const chainId = Number(await hre.getChainId()); - const policyRegistryAddress = policyRegistryByChain.get(chainId) ?? hre.ethers.constants.AddressZero; + const policyRegistryAddress = policyRegistryByChain.get(chainId) ?? hre.ethers.ZeroAddress; const policyRegistryV1 = await ethers.getContractAt("PolicyRegistry", policyRegistryAddress); const fetchPolicy = (url: string): Promise => { diff --git a/contracts/scripts/keeperBot.ts b/contracts/scripts/keeperBot.ts index 792a13f55..d26c9989f 100644 --- a/contracts/scripts/keeperBot.ts +++ b/contracts/scripts/keeperBot.ts @@ -2,7 +2,7 @@ import { DisputeKitClassic, KlerosCore, PNK, RandomizerRNG, BlockHashRNG, Sortit import request from "graphql-request"; import env from "./utils/env"; import loggerFactory from "./utils/logger"; -import { BigNumber } from "ethers"; +import { toBigInt, BigNumberish, getNumber } from "ethers"; import hre = require("hardhat"); const { ethers } = hre; @@ -153,8 +153,8 @@ const handleError = (e: any) => { const isRngReady = async () => { const { randomizerRng, blockHashRNG, sortition } = await getContracts(); const currentRng = await sortition.rng(); - if (currentRng === randomizerRng.address) { - const requesterID = await randomizerRng.requesterToID(sortition.address); + if (currentRng === randomizerRng.target) { + const requesterID = await randomizerRng.requesterToID(sortition.target); const n = await randomizerRng.randomNumbers(requesterID); if (Number(n) === 0) { logger.info("RandomizerRNG is NOT ready yet"); @@ -163,10 +163,10 @@ const isRngReady = async () => { logger.info(`RandomizerRNG is ready: ${n.toString()}`); return true; } - } else if (currentRng === blockHashRNG.address) { + } else if (currentRng === blockHashRNG.target) { const requestBlock = await sortition.randomNumberRequestBlock(); const lookahead = await sortition.rngLookahead(); - const n = await blockHashRNG.callStatic.receiveRandomness(requestBlock.add(lookahead)); + const n = await blockHashRNG.receiveRandomness.staticCall(requestBlock + lookahead); if (Number(n) === 0) { logger.info("BlockHashRNG is NOT ready yet"); return false; @@ -184,21 +184,21 @@ const passPhase = async () => { const { sortition } = await getContracts(); let success = false; try { - await sortition.callStatic.passPhase(); + await sortition.passPhase.staticCall(); } catch (e) { const error = e as CustomError; logger.info(`passPhase: not ready yet because of ${error?.reason ?? error?.errorName ?? error?.code}`); return success; } - const before = await sortition.phase(); + const before = getNumber(await sortition.phase()); try { - const gas = (await sortition.estimateGas.passPhase()).mul(150).div(100); // 50% extra gas + const gas = ((await sortition.passPhase.estimateGas()) * 150n) / 100n; // 50% extra gas const tx = await (await sortition.passPhase({ gasLimit: gas })).wait(); - logger.info(`passPhase txID: ${tx?.transactionHash}`); + logger.info(`passPhase txID: ${tx?.hash}`); } catch (e) { handleError(e); } finally { - const after = await sortition.phase(); + const after = getNumber(await sortition.phase()); logger.info(`passPhase: ${PHASES[before]} -> ${PHASES[after]}`); success = before !== after; // true if successful } @@ -209,7 +209,7 @@ const passPeriod = async (dispute: { id: string }) => { const { core } = await getContracts(); let success = false; try { - await core.callStatic.passPeriod(dispute.id); + await core.passPeriod.staticCall(dispute.id); } catch (e) { const error = e as CustomError; logger.info( @@ -221,9 +221,9 @@ const passPeriod = async (dispute: { id: string }) => { } const before = (await core.disputes(dispute.id)).period; try { - const gas = (await core.estimateGas.passPeriod(dispute.id)).mul(150).div(100); // 50% extra gas + const gas = ((await core.passPeriod.estimateGas(dispute.id)) * 150n) / 100n; // 50% extra gas const tx = await (await core.passPeriod(dispute.id, { gasLimit: gas })).wait(); - logger.info(`passPeriod txID: ${tx?.transactionHash}`); + logger.info(`passPeriod txID: ${tx?.hash}`); } catch (e) { handleError(e); } finally { @@ -238,14 +238,14 @@ const drawJurors = async (dispute: { id: string; currentRoundIndex: string }, it const { core } = await getContracts(); let success = false; try { - await core.callStatic.draw(dispute.id, iterations, HIGH_GAS_LIMIT); + await core.draw.staticCall(dispute.id, iterations, HIGH_GAS_LIMIT); } catch (e) { logger.error(`Draw: will fail for ${dispute.id}, skipping`); return success; } try { const tx = await (await core.draw(dispute.id, iterations, HIGH_GAS_LIMIT)).wait(); - logger.info(`Draw txID: ${tx?.transactionHash}`); + logger.info(`Draw txID: ${tx?.hash}`); success = true; } catch (e) { handleError(e); @@ -260,14 +260,14 @@ const executeRepartitions = async (dispute: { id: string; currentRoundIndex: str const { core } = await getContracts(); let success = false; try { - await core.callStatic.execute(dispute.id, dispute.currentRoundIndex, iterations, HIGH_GAS_LIMIT); + await core.execute.staticCall(dispute.id, dispute.currentRoundIndex, iterations, HIGH_GAS_LIMIT); } catch (e) { logger.error(`Execute: will fail for ${dispute.id}, skipping`); return success; } try { const tx = await (await core.execute(dispute.id, dispute.currentRoundIndex, iterations, HIGH_GAS_LIMIT)).wait(); - logger.info(`Execute txID: ${tx?.transactionHash}`); + logger.info(`Execute txID: ${tx?.hash}`); success = true; } catch (e) { handleError(e); @@ -279,15 +279,15 @@ const executeRuling = async (dispute: { id: string }) => { const { core } = await getContracts(); let success = false; try { - await core.callStatic.executeRuling(dispute.id); + await core.executeRuling.staticCall(dispute.id); } catch (e) { logger.error(`ExecuteRuling: will fail for ${dispute.id}, skipping`); return success; } try { - const gas = (await core.estimateGas.executeRuling(dispute.id)).mul(150).div(100); // 50% extra gas + const gas = ((await core.executeRuling.estimateGas(dispute.id)) * 150n) / 100n; // 50% extra gas const tx = await (await core.executeRuling(dispute.id, { gasLimit: gas })).wait(); - logger.info(`ExecuteRuling txID: ${tx?.transactionHash}`); + logger.info(`ExecuteRuling txID: ${tx?.hash}`); success = true; } catch (e) { handleError(e); @@ -302,9 +302,9 @@ const withdrawAppealContribution = async ( ): Promise => { const { disputeKitClassic: kit } = await getContracts(); let success = false; - let amountWithdrawn = BigNumber.from(0); + let amountWithdrawn = 0n; try { - amountWithdrawn = await kit.callStatic.withdrawFeesAndRewards( + amountWithdrawn = await kit.withdrawFeesAndRewards.staticCall( disputeId, contribution.contributor.id, roundId, @@ -316,7 +316,7 @@ const withdrawAppealContribution = async ( ); return success; } - if (amountWithdrawn.isZero()) { + if (amountWithdrawn === 0n) { logger.debug( `WithdrawFeesAndRewards: no fees or rewards to withdraw for dispute #${disputeId}, round #${roundId}, choice ${contribution.choice} and beneficiary ${contribution.contributor.id}, skipping` ); @@ -326,17 +326,21 @@ const withdrawAppealContribution = async ( logger.info( `WithdrawFeesAndRewards: appeal contribution for dispute #${disputeId}, round #${roundId}, choice ${contribution.choice} and beneficiary ${contribution.contributor.id}` ); - const gas = ( - await kit.estimateGas.withdrawFeesAndRewards(disputeId, contribution.contributor.id, roundId, contribution.choice) - ) - .mul(150) - .div(100); // 50% extra gas + const gas = + ((await kit.withdrawFeesAndRewards.estimateGas( + disputeId, + contribution.contributor.id, + roundId, + contribution.choice + )) * + 150n) / + 100n; // 50% extra gas const tx = await ( await kit.withdrawFeesAndRewards(disputeId, contribution.contributor.id, roundId, contribution.choice, { gasLimit: gas, }) ).wait(); - logger.info(`WithdrawFeesAndRewards txID: ${tx?.transactionHash}`); + logger.info(`WithdrawFeesAndRewards txID: ${tx?.hash}`); success = true; } catch (e) { handleError(e); @@ -348,30 +352,30 @@ const executeDelayedStakes = async () => { const { sortition } = await getContracts(); // delayedStakes = 1 + delayedStakeWriteIndex - delayedStakeReadIndex - const delayedStakesRemaining = BigNumber.from(1) - .add(await sortition.delayedStakeWriteIndex()) - .sub(await sortition.delayedStakeReadIndex()); + const delayedStakesRemaining = + 1n + (await sortition.delayedStakeWriteIndex()) - (await sortition.delayedStakeReadIndex()); - const delayedStakes = delayedStakesRemaining.lt(MAX_DELAYED_STAKES_ITERATIONS) - ? delayedStakesRemaining - : BigNumber.from(MAX_DELAYED_STAKES_ITERATIONS); + const delayedStakes = + delayedStakesRemaining < MAX_DELAYED_STAKES_ITERATIONS + ? delayedStakesRemaining + : toBigInt(MAX_DELAYED_STAKES_ITERATIONS); - if (delayedStakes.eq(0)) { + if (delayedStakes === 0n) { logger.info("No delayed stakes to execute"); return true; } logger.info(`Executing ${delayedStakes} delayed stakes, ${delayedStakesRemaining} remaining`); let success = false; try { - await sortition.callStatic.executeDelayedStakes(delayedStakes); + await sortition.executeDelayedStakes.staticCall(delayedStakes); } catch (e) { logger.error(`executeDelayedStakes: will fail because of ${JSON.stringify(e)}`); return success; } try { - const gas = (await sortition.estimateGas.executeDelayedStakes(delayedStakes)).mul(150).div(100); // 50% extra gas + const gas = ((await sortition.executeDelayedStakes.estimateGas(delayedStakes)) * 150n) / 100n; // 50% extra gas const tx = await (await sortition.executeDelayedStakes(delayedStakes, { gasLimit: gas })).wait(); - logger.info(`executeDelayedStakes txID: ${tx?.transactionHash}`); + logger.info(`executeDelayedStakes txID: ${tx?.hash}`); } catch (e) { handleError(e); } @@ -381,22 +385,22 @@ const executeDelayedStakes = async () => { const getMissingJurors = async (dispute: { id: string; currentRoundIndex: string }) => { const { core } = await getContracts(); const { nbVotes, drawnJurors } = await core.getRoundInfo(dispute.id, dispute.currentRoundIndex); - return nbVotes.sub(drawnJurors.length); + return nbVotes - toBigInt(drawnJurors.length); }; const isDisputeFullyDrawn = async (dispute: { id: string; currentRoundIndex: string }): Promise => { - return (await getMissingJurors(dispute)).eq(0); + return (await getMissingJurors(dispute)) === 0n; }; const getNumberOfMissingRepartitions = async ( dispute: { id: string; currentRoundIndex: string }, - coherentCount: BigNumber + coherentCount: BigNumberish ) => { const { core } = await getContracts(); const { repartitions, drawnJurors } = await core.getRoundInfo(dispute.id, dispute.currentRoundIndex); - return coherentCount.eq(0) - ? drawnJurors.length - repartitions.toNumber() - : 2 * drawnJurors.length - repartitions.toNumber(); + return coherentCount === 0n + ? drawnJurors.length - getNumber(repartitions) + : 2 * drawnJurors.length - getNumber(repartitions); }; const filterDisputesToSkip = (disputes: Dispute[]) => { @@ -436,7 +440,8 @@ async function main() { const getBlockTime = async () => { return await ethers.provider.getBlock("latest").then((block) => { - return BigNumber.from(block.timestamp); + if (block?.timestamp === undefined) return 0; + return block?.timestamp; }); }; @@ -444,7 +449,7 @@ async function main() { const minStakingTime = await sortition.minStakingTime(); const blockTime = await getBlockTime(); return await sortition.lastPhaseChange().then((lastPhaseChange) => { - return blockTime.sub(lastPhaseChange).gt(minStakingTime); + return toBigInt(blockTime) - lastPhaseChange > minStakingTime; }); }; @@ -452,40 +457,41 @@ async function main() { const maxDrawingTime = await sortition.maxDrawingTime(); const blockTime = await getBlockTime(); return await sortition.lastPhaseChange().then((lastPhaseChange) => { - return blockTime.sub(lastPhaseChange).gt(maxDrawingTime); + return toBigInt(blockTime) - lastPhaseChange > maxDrawingTime; }); }; const isPhaseStaking = async (): Promise => { - return PHASES[await sortition.phase()] === Phase.STAKING; + return PHASES[getNumber(await sortition.phase())] === Phase.STAKING; }; const isPhaseGenerating = async (): Promise => { - return PHASES[await sortition.phase()] === Phase.GENERATING; + return PHASES[getNumber(await sortition.phase())] === Phase.GENERATING; }; const isPhaseDrawing = async (): Promise => { - return PHASES[await sortition.phase()] === Phase.DRAWING; + return PHASES[getNumber(await sortition.phase())] === Phase.DRAWING; }; logger.info("Starting up"); await sendHeartbeat(); - logger.info(`Current phase: ${PHASES[await sortition.phase()]}`); + logger.info(`Current phase: ${PHASES[getNumber(await sortition.phase())]}`); // Retrieve the disputes which are in a non-final period let disputes = await getNonFinalDisputes().catch((e) => handleError(e)); if (!disputes) { return; } + let disputesWithoutJurors = await filterAsync(disputes, async (dispute) => { return !(await isDisputeFullyDrawn(dispute)); }); // Just a sanity check const numberOfDisputesWithoutJurors = await sortition.disputesWithoutJurors(); - if (!numberOfDisputesWithoutJurors.eq(disputesWithoutJurors.length)) { + if (!(numberOfDisputesWithoutJurors === toBigInt(disputesWithoutJurors.length))) { logger.error("Discrepancy between SortitionModule.disputesWithoutJurors and KlerosCore.disputes"); logger.error(`KlerosCore.disputes without jurors = ${disputesWithoutJurors.length}`); logger.error(`SortitionModule.disputesWithoutJurors = ${numberOfDisputesWithoutJurors}`); @@ -523,12 +529,12 @@ async function main() { break; } let numberOfMissingJurors = await getMissingJurors(dispute); - if (numberOfMissingJurors.gt(MAX_JURORS_PER_DISPUTE)) { + if (numberOfMissingJurors > MAX_JURORS_PER_DISPUTE) { logger.warn(`Skipping dispute #${dispute.id} with too many jurors to draw`); continue; } do { - const drawIterations = Math.min(MAX_DRAW_ITERATIONS, numberOfMissingJurors.toNumber()); + const drawIterations = Math.min(MAX_DRAW_ITERATIONS, getNumber(numberOfMissingJurors)); logger.info( `Drawing ${drawIterations} out of ${numberOfMissingJurors} jurors needed for dispute #${dispute.id}` ); @@ -539,7 +545,7 @@ async function main() { await delay(ITERATIONS_COOLDOWN_PERIOD); // To avoid spiking the gas price maxDrawingTimePassed = await hasMaxDrawingTimePassed(); numberOfMissingJurors = await getMissingJurors(dispute); - } while (!numberOfMissingJurors.eq(0) && !maxDrawingTimePassed); + } while (!(numberOfMissingJurors === 0n) && !maxDrawingTimePassed); } // At this point, either all disputes are fully drawn or max drawing time has passed } @@ -554,7 +560,7 @@ async function main() { await sendHeartbeat(); - logger.info(`Current phase: ${PHASES[await sortition.phase()]}`); + logger.info(`Current phase: ${PHASES[getNumber(await sortition.phase())]}`); for (var dispute of disputes) { // ----------------------------------------------- // @@ -583,7 +589,7 @@ async function main() { for (var dispute of unprocessedDisputesInExecution) { const { period } = await core.disputes(dispute.id); - if (period !== 4) { + if (period !== 4n) { logger.info(`Skipping dispute #${dispute.id} because it is not in the execution period`); continue; } @@ -636,14 +642,14 @@ async function main() { contributions = [...new Set(contributions)]; for (let contribution of contributions) { // Could be improved by pinpointing exactly which round requires a withdrawal, just try all of them for now. - for (let round = BigNumber.from(dispute.currentRoundIndex); round.gte(0); round = round.sub(1)) { + for (let round = toBigInt(dispute.currentRoundIndex); round >= 0; round = round - 1n) { await withdrawAppealContribution(dispute.id, round.toString(), contribution); await delay(ITERATIONS_COOLDOWN_PERIOD); // To avoid spiking the gas price } } } - logger.info(`Current phase: ${PHASES[await sortition.phase()]}`); + logger.info(`Current phase: ${PHASES[getNumber(await sortition.phase())]}`); // ----------------------------------------------- // // EXECUTE DELAYED STAKES // diff --git a/contracts/scripts/populateCourts.ts b/contracts/scripts/populateCourts.ts index a786fc305..7047b10fe 100644 --- a/contracts/scripts/populateCourts.ts +++ b/contracts/scripts/populateCourts.ts @@ -1,6 +1,6 @@ import { task, types } from "hardhat/config"; import { KlerosCore, KlerosCoreNeo, KlerosCoreUniversity } from "../typechain-types"; -import { BigNumber, BigNumberish } from "ethers"; +import { BigNumberish, toBigInt, toNumber } from "ethers"; import courtsV1Mainnet from "../config/courts.v1.mainnet.json"; import courtsV1GnosisChain from "../config/courts.v1.gnosischain.json"; import courtsV2ArbitrumTestnet from "../config/courts.v2.testnet.json"; @@ -38,9 +38,9 @@ type Court = { supportedDisputeKits?: BigNumberish[]; }; -const ETH_USD = BigNumber.from(4000); -const DISPUTE_KIT_CLASSIC = BigNumber.from(1); -const TEN_THOUSAND_GWEI = BigNumber.from(10).pow(13); +const ETH_USD = 4000n; +const DISPUTE_KIT_CLASSIC = 1n; +const TEN_THOUSAND_GWEI = 10n ** 13n; task("populate:courts", "Populates the courts and their parameters") .addOptionalParam( @@ -94,18 +94,18 @@ task("populate:courts", "Populates the courts and their parameters") } console.log("Using core type %s", Cores[coreType]); - const truncateWei = (x: BigNumber) => x.div(TEN_THOUSAND_GWEI).mul(TEN_THOUSAND_GWEI); + const truncateWei = (x: bigint) => (x / TEN_THOUSAND_GWEI) * TEN_THOUSAND_GWEI; const parametersUsdToEth = (court: Court): Court => ({ ...court, - minStake: truncateWei(BigNumber.from(court.minStake).div(ETH_USD)), - feeForJuror: truncateWei(BigNumber.from(court.feeForJuror).div(ETH_USD)), + minStake: truncateWei(toBigInt(court.minStake) / ETH_USD), + feeForJuror: truncateWei(toBigInt(court.feeForJuror) / ETH_USD), }); const parametersProductionToDev = (court: Court): Court => ({ ...court, - minStake: truncateWei(BigNumber.from(court.minStake).div(10000)), - feeForJuror: truncateWei(ethers.utils.parseEther("0.00001")), + minStake: truncateWei(toBigInt(court.minStake) / 10000n), + feeForJuror: truncateWei(ethers.parseEther("0.00001")), timesPerPeriod: [120, 120, 120, 240], }); @@ -183,17 +183,17 @@ task("populate:courts", "Populates the courts and their parameters") ); } - if (!courtPresent.minStake.eq(court.minStake)) { + if (courtPresent.minStake !== court.minStake) { change = true; console.log("Court %d: changing minStake from %d to %d", court.id, courtPresent.minStake, court.minStake); } - if (!courtPresent.alpha.eq(court.alpha)) { + if (courtPresent.alpha !== court.alpha) { change = true; console.log("Court %d: changing alpha from %d to %d", court.id, courtPresent.alpha, court.alpha); } - if (!courtPresent.feeForJuror.eq(court.feeForJuror)) { + if (courtPresent.feeForJuror !== court.feeForJuror) { change = true; console.log( "Court %d: changing feeForJuror from %d to %d", @@ -203,7 +203,7 @@ task("populate:courts", "Populates the courts and their parameters") ); } - if (!courtPresent.jurorsForCourtJump.eq(court.jurorsForCourtJump)) { + if (courtPresent.jurorsForCourtJump !== court.jurorsForCourtJump) { change = true; console.log( "Court %d: changing jurorsForCourtJump from %d to %d", @@ -213,7 +213,7 @@ task("populate:courts", "Populates the courts and their parameters") ); } - const timesPerPeriodPresent = (await core.getTimesPerPeriod(court.id)).map((bn) => bn.toNumber()); + const timesPerPeriodPresent = (await core.getTimesPerPeriod(court.id)).map((bn) => toNumber(bn)); if (!timesPerPeriodPresent.every((val, index) => val === court.timesPerPeriod[index])) { change = true; console.log( @@ -228,7 +228,6 @@ task("populate:courts", "Populates the courts and their parameters") console.log("Court %d: no parameter change", court.id); continue; } - await core.changeCourtParameters( court.id, court.hiddenVotes, @@ -236,7 +235,7 @@ task("populate:courts", "Populates the courts and their parameters") court.alpha, court.feeForJuror, court.jurorsForCourtJump, - court.timesPerPeriod + [court.timesPerPeriod[0], court.timesPerPeriod[1], court.timesPerPeriod[2], court.timesPerPeriod[3]] ); } else { console.log("Court %d not found, creating it with", court.id, court); @@ -260,7 +259,7 @@ task("populate:courts", "Populates the courts and their parameters") court.feeForJuror, court.jurorsForCourtJump, [court.timesPerPeriod[0], court.timesPerPeriod[1], court.timesPerPeriod[2], court.timesPerPeriod[3]], - ethers.utils.hexlify(5), // Not accessible on-chain, but has always been set to the same value so far. + ethers.toBeHex(5), // Not accessible on-chain, but has always been set to the same value so far. [DISPUTE_KIT_CLASSIC] ); } diff --git a/contracts/scripts/simulations/tasks.ts b/contracts/scripts/simulations/tasks.ts index b41899664..2079b502d 100644 --- a/contracts/scripts/simulations/tasks.ts +++ b/contracts/scripts/simulations/tasks.ts @@ -1,5 +1,6 @@ /* eslint-disable promise/param-names */ -import { BigNumber, utils } from "ethers"; +import { toBigInt, BigNumberish, AddressLike } from "ethers"; +import { ethers } from "ethers"; import { task } from "hardhat/config"; import { Period, @@ -34,7 +35,10 @@ task("simulate:approve", "Grants permission to KlerosCore to use your PNK tokens // Approve PNK tokens for transfer to KlerosCore try { - const approvePNKFunctionArgs: [string, BigNumber] = [core.address, utils.parseEther(pnkamount.toString())]; + const approvePNKFunctionArgs: [AddressLike, BigNumberish] = [ + await core.getAddress(), + ethers.parseEther(pnkamount.toString()), + ]; const resultApproveTx = await pnk.connect(wallet).approve(...approvePNKFunctionArgs, options); await resultApproveTx.wait(); console.log(`Approved ${pnkamount} PNK tokens for transfer to KlerosCore from wallet ${wallet.address}`); @@ -56,7 +60,7 @@ task("simulate:set-stake", "Stakes PNK tokens to participate in the Kleros dispu // Stakes PNK tokens in the Court you specified as parameter of this task try { - const setStakeFunctionArgs: [string, BigNumber] = [courtid, utils.parseEther(pnkamount.toString())]; + const setStakeFunctionArgs: [string, bigint] = [courtid, ethers.parseEther(pnkamount.toString())]; const resultSetStakeTx = await core.connect(wallet).setStake(...setStakeFunctionArgs, options); await resultSetStakeTx.wait(); console.log(`setStake wallet ${wallet.address}, txID: %s`, resultSetStakeTx?.hash); @@ -73,15 +77,15 @@ task("simulate:create-court", "callable by Governor only. Create a new Court") const { wallet } = await getWallet(hre, walletindex); - const parent = 1; - const minStake = BigNumber.from(10).pow(20).mul(2); - const alpha = 10000; - const feeForJuror = BigNumber.from(10).pow(17); - const jurorsForCourtJump = 3; - const hiddenVotes = false; - const timesPerPeriod = [300, 300, 300, 300] as any; - const sortitionSumTreeK = 3; - const supportedDisputeKits = [1]; // IDs of supported dispute kits + const parent = 1n; + const minStake = 2n * 10n ** 20n; + const alpha = 10000n; + const feeForJuror = 10n * 17n; + const jurorsForCourtJump = 3n; + const hiddenVotes = false as boolean; + const timesPerPeriod = [300, 300, 300, 300] as [BigNumberish, BigNumberish, BigNumberish, BigNumberish]; + const sortitionSumTreeK = ethers.toBeHex(3); + const supportedDisputeKits = [1] as BigNumberish[]; // IDs of supported dispute kits let courtID; try { const tx = await ( @@ -99,10 +103,10 @@ task("simulate:create-court", "callable by Governor only. Create a new Court") supportedDisputeKits ) ).wait(); - console.log("createCourt txID: %s", tx?.transactionHash); + console.log("createCourt txID: %s", tx?.hash); // Get the court ID from the KlerosCore contract event logs const filter = core.filters.CourtCreated(); - const logs = await core.queryFilter(filter, tx.blockNumber, tx.blockNumber); + const logs = await core.queryFilter(filter, tx?.blockNumber, tx?.blockNumber); const courtCreatedLog = logs[logs.length - 1]; courtID = courtCreatedLog.args._courtID; console.log( @@ -130,19 +134,12 @@ task("simulate:create-dispute", "Creates a dispute on an arbitrable contract") const { wallet } = await getWallet(hre, walletindex); // Create a random evidence group ID - const evidenceGroupID = ethers.BigNumber.from(ethers.utils.randomBytes(32)).toString(); + const evidenceGroupID = toBigInt(ethers.randomBytes(32)).toString(); let disputeID; - - // Construct the arbitratorExtraData parameter - const courtIdBytes = ethers.utils.defaultAbiCoder.encode(["uint256"], [courtid]); - const minJurorsBytes = ethers.utils.defaultAbiCoder.encode(["uint256"], [3]); // default value for minimum jurors - - const arbitratorExtraData = ethers.utils.hexConcat([courtIdBytes, minJurorsBytes]); - try { // Create a dispute on the arbitrable contract - const tx = await arbitrable.connect(wallet).createDispute(nbofchoices, arbitratorExtraData, evidenceGroupID, { + const tx = await arbitrable.connect(wallet)["createDispute(string)"]("hello world", { value: getArbitrationFees(hre, nbofjurors, feeforjuror), ...options, }); @@ -151,7 +148,7 @@ task("simulate:create-dispute", "Creates a dispute on an arbitrable contract") // Get the dispute ID from the KlerosCore contract event logs const filter = core.filters.DisputeCreation(); - const logs = await core.queryFilter(filter, tx.blockNumber, tx.blockNumber); + const logs = await core.queryFilter(filter); disputeID = logs[logs.length - 1]?.args?._disputeID; console.log("Created Dispute %s on Court %s with evidenceGroupID %s", disputeID, courtid, evidenceGroupID); } catch (e) { @@ -175,7 +172,7 @@ task("simulate:pass-phase", "Pass the phase of the SortitionModule") const before = await sortition.phase(); try { const tx = await (await sortition.connect(wallet).passPhase(options)).wait(); - console.log("passPhaseCore txID: %s", tx?.transactionHash); + console.log("passPhaseCore txID: %s", tx?.hash); } catch (e) { handleError(e); } finally { @@ -189,6 +186,7 @@ task("simulate:wait-for-rng", "Waits for the RNG to be ready").setAction(async ( const { wallet } = await getWallet(hre, walletIndex); let ready: boolean; + try { ready = await isRngReady(wallet, hre); } catch (e) { @@ -213,7 +211,7 @@ task("simulate:draw", "Draws jurors for a dispute on Kleros") console.log("Drawn jurors before: %O", info.drawnJurors); try { const tx = await (await core.connect(wallet).draw(disputeid, 10, options)).wait(); - console.log("draw txID: %s", tx?.transactionHash); + console.log("draw txID: %s", tx?.hash); } catch (e) { handleError(e); } finally { @@ -234,7 +232,7 @@ task("simulate:pass-period", "Passes the period of a dispute on Kleros Core") try { const tx = await (await core.connect(wallet).passPeriod(disputeid, options)).wait(); - console.log("passPeriod txID: %s", tx?.transactionHash); + console.log("passPeriod txID: %s", tx?.hash); } catch (e) { handleError(e); } finally { @@ -256,8 +254,8 @@ task("simulate:cast-commit", "Casts a commit for a drawn juror") const salt = "123"; console.log("salt used on juror %s is: %s", walletindex, salt); const generateCommit = (choice: number, justification: string) => { - const hash = utils.solidityKeccak256(["string", "string", "string"], [choice, justification, salt]); - return utils.hexlify(hash); + const hash = ethers.solidityPackedKeccak256(["uint256", "string", "string"], [choice, justification, salt]); + return ethers.toBeHex(hash); }; const commitHash = generateCommit(choice, taskArgs.justification); const drawnJurors = await getDrawnJurors(hre, disputeid, getRoundId(taskArgs, hre, disputeid)); @@ -307,7 +305,7 @@ task("simulate:fund-appeal", "Funds an appeal on a dispute") const { disputeid, walletindex, appealchoice } = taskArgs; const { wallet } = await getWallet(hre, walletindex); - const fundAppealFunctionArgs: [number, number, { value: BigNumber }] = [ + const fundAppealFunctionArgs: [number, number, { value: BigNumberish }] = [ disputeid, appealchoice, { value: await getAppealCost(hre, disputeid) }, @@ -319,7 +317,7 @@ task("simulate:fund-appeal", "Funds an appeal on a dispute") await mineBlocks(numberOfBlocksToMine, hre.network); } const fundAppealTx = await (await disputeKitClassic.connect(wallet).fundAppeal(...fundAppealFunctionArgs)).wait(); - console.log("fundAppeal (in DisputeKitClassic) txID: %s", fundAppealTx?.transactionHash); + console.log("fundAppeal (in DisputeKitClassic) txID: %s", fundAppealTx?.hash); } catch (e) { handleError(e); } @@ -337,10 +335,10 @@ task("simulate:execute-ruling", "Executes the ruling for a dispute on KlerosCore let executeRulingTx; try { const executeTx = await (await connectedKlerosCore.execute(disputeid, 0, 10)).wait(); // redistribute - console.log("txID execute: %s", executeTx?.transactionHash); + console.log("txID execute: %s", executeTx?.hash); executeRulingTx = await (await connectedKlerosCore.executeRuling(disputeid)).wait(); // rule - console.log("txID executeRuling: %s", executeRulingTx?.transactionHash); + console.log("txID executeRuling: %s", executeRulingTx?.hash); } catch (e) { handleError(e); } finally { @@ -363,14 +361,20 @@ task("simulate:withdraw-fees-and-rewards", "Withdraws fees and rewards for peopl const { disputeid, walletindex, beneficiary, choice } = taskArgs; const { wallet } = await getWallet(hre, walletindex); - + // disputeid, beneficiary, getRoundId(taskArgs, hre, disputeid), choice + // toBigInt(disputeid), + // await ethers.getAddress(beneficiary), + // getRoundId(taskArgs, hre, disputeid), + // choice + const _disputeId: BigNumberish = disputeid; + const _beneficiary: AddressLike = beneficiary; + const _coreRoundId: BigNumberish = await getRoundId(taskArgs, hre, disputeid); + const _choice: BigNumberish = choice; try { const withdrawTx = await ( - await disputeKitClassic - .connect(wallet) - .withdrawFeesAndRewards(disputeid, beneficiary, getRoundId(taskArgs, hre, disputeid), choice) + await disputeKitClassic.connect(wallet).withdrawFeesAndRewards(_disputeId, _beneficiary, _coreRoundId, _choice) ).wait(); // redistribute - console.log("txID withdrawFeesAndRewards: %s", withdrawTx?.transactionHash); + console.log("txID withdrawFeesAndRewards: %s", withdrawTx?.hash); } catch (e) { handleError(e); } @@ -408,7 +412,7 @@ task("simulate:to-freezing-and-generating-phase", "Pass phase from 'staking' to const { wallet } = await getWallet(hre, walletindex); const numberOfBlocksToMine = Number(await sortition.rngLookahead()); await mineBlocks(numberOfBlocksToMine, hre.network); - await randomizerMock.connect(wallet).relay(randomizerRng.address, 0, utils.randomBytes(32)); + await randomizerMock.connect(wallet).relay(randomizerRng.target, 0, ethers.randomBytes(32)); } }); @@ -431,7 +435,8 @@ task("simulate:split-pnk", "one wallet funds with PNK the other 4 wallets") const { pnk } = await getContracts(hre); const { walletindex, pnkperwallet } = taskArgs; const { wallet } = await getWallet(hre, walletindex); - const amount = utils.parseUnits(pnkperwallet.toString(), "18"); + const amount = ethers.parseEther(pnkperwallet.toString()); + const firstWallet = await (await getWallet(hre, 1)).wallet; const secondWallet = await (await getWallet(hre, 2)).wallet; const thirdWallet = await (await getWallet(hre, 3)).wallet; @@ -450,14 +455,14 @@ task("simulate:submit-evidence", "Submits evidence to a dispute") .addParam("walletindex", "Index of the wallet to use for submitting evidence") .addParam("evidencegroupid", "The evidenceGroupID, which is linked to the dispute") .setAction(async (taskArgs, hre) => { - const { disputeKitClassic } = await getContracts(hre); + const { evidenceModule } = await getContracts(hre); const { walletindex, evidencegroupid } = taskArgs; const { wallet } = await getWallet(hre, walletindex); const evidence = "/ipfs/QmaNEknCUEKDy74sDNLFXo8Vc3PqX7QC1ZyvUx4n7V6q1L/evidence.json"; try { - const tx = await (await disputeKitClassic.connect(wallet).submitEvidence(evidencegroupid, evidence)).wait(); - console.log("txID submitEvidence: %s", tx?.transactionHash); + const tx = await (await evidenceModule.connect(wallet).submitEvidence(evidencegroupid, evidence)).wait(); + console.log("txID submitEvidence: %s", tx?.hash); } catch (e) { handleError(e); } @@ -471,41 +476,48 @@ task("simulate:all", "Simulates arbitration activity to troubleshoot the subgrap const courtId = "1"; const appealChoice = "1"; + console.log("split pnk....."); await hre.run("simulate:split-pnk", { walletindex: operator.toString(), pnkperwallet: stake.toString() }); + console.log("stake five jurors...."); await hre.run("simulate:stake-five-jurors", { walletindexes: "0,1,2,3,4", pnkamounts: `${stake},${stake},${stake},${stake},${stake}`, courtid: courtId, }); + console.log("create dispute...."); const dispute = await hre.run("simulate:create-dispute", { walletindex: operator.toString(), courtid: courtId.toString(), nbofchoices: "2", nbofjurors: "3", - feeforjuror: utils.parseEther("0.1").toString(), + feeforjuror: ethers.parseEther("0.1").toString(), }); // Wait for minStakingTime const minStakingTime = await sortition.minStakingTime(); - await waitFor(minStakingTime.toNumber(), hre); + await waitFor(ethers.getNumber(minStakingTime), hre); // Phase Staking -> Generating + console.log("to freezing and generating phase....."); await hre.run("simulate:to-freezing-and-generating-phase", { walletindex: operator.toString() }); // Wait for RNG + console.log("wait for rng...."); await hre.run("simulate:wait-for-rng"); // Phase: Generating -> Drawing // Draws // Phase: Drawing -> Staking + console.log("pass phase draw unfreeze....."); await hre.run("simulate:pass-phase-draw-unfreeze", { walletindex: operator.toString(), disputeid: dispute.id.toString(), }); // Submit evidence + console.log("submit evidence....."); await hre.run("simulate:submit-evidence", { walletindex: operator.toString(), evidencegroupid: dispute.evidenceGroupID, @@ -513,6 +525,7 @@ task("simulate:all", "Simulates arbitration activity to troubleshoot the subgrap // Period: Evidence -> Vote await waitForPeriod(dispute.id, Period.Evidence, hre); + console.log("pass period....."); await hre.run("simulate:pass-period", { walletindex: operator.toString(), disputeid: dispute.id.toString() }); // Find the first drawn juror and the corresponding wallet index @@ -520,6 +533,7 @@ task("simulate:all", "Simulates arbitration activity to troubleshoot the subgrap const firstDrawnJurorWalletIndex = (await findFirstDrawnJurorWalletIndex(hre, drawnJurors)) as number; // Vote + console.log("cast vote....."); await hre.run("simulate:cast-vote", { walletindex: firstDrawnJurorWalletIndex.toString(), disputeid: dispute.id.toString(), @@ -529,9 +543,11 @@ task("simulate:all", "Simulates arbitration activity to troubleshoot the subgrap // Period: Vote -> Appeal await waitForPeriod(dispute.id, Period.Vote, hre); + console.log("pass period...."); await hre.run("simulate:pass-period", { walletindex: operator.toString(), disputeid: dispute.id.toString() }); // Fund Appeal + console.log("fund appeal...."); await hre.run("simulate:fund-appeal", { walletindex: operator.toString(), disputeid: dispute.id.toString(), @@ -540,9 +556,11 @@ task("simulate:all", "Simulates arbitration activity to troubleshoot the subgrap // Period: Appeal -> Execution await waitForPeriod(dispute.id, Period.Appeal, hre); + console.log("pass period...."); await hre.run("simulate:pass-period", { walletindex: operator.toString(), disputeid: dispute.id.toString() }); // Execution + console.log("execute ruling...."); await hre.run("simulate:execute-ruling", { walletindex: operator.toString(), disputeid: dispute.id.toString() }); } ); diff --git a/contracts/scripts/simulations/utils.ts b/contracts/scripts/simulations/utils.ts index 3a9780f6e..454df6bfd 100644 --- a/contracts/scripts/simulations/utils.ts +++ b/contracts/scripts/simulations/utils.ts @@ -5,9 +5,11 @@ import { DisputeKitClassic, PNK, RandomizerRNG, - ArbitrableExampleEthFee, - RandomizerOracle, + EvidenceModule, + ArbitrableExample, + RandomizerMock, } from "../../typechain-types"; +import { toBigInt, ethers } from "ethers"; export enum Period { Evidence, @@ -24,7 +26,8 @@ export const getContracts = async (hre) => { const disputeKitClassic = (await hre.ethers.getContract("DisputeKitClassic")) as DisputeKitClassic; const pnk = (await hre.ethers.getContract("PNK")) as PNK; const randomizerRng = (await hre.ethers.getContract("RandomizerRNG")) as RandomizerRNG; - const arbitrable = (await hre.ethers.getContract("ArbitrableExampleEthFee")) as ArbitrableExampleEthFee; + const arbitrable = (await hre.ethers.getContract("ArbitrableExample")) as ArbitrableExample; + const evidenceModule = (await hre.ethers.getContract("EvidenceModule")) as EvidenceModule; const randomizerMock = (await hre.ethers.getContract("RandomizerOracle")) as RandomizerMock; return { @@ -34,6 +37,7 @@ export const getContracts = async (hre) => { pnk, randomizerRng, arbitrable, + evidenceModule, randomizerMock, }; }; @@ -54,7 +58,7 @@ export const getWallet = async (hre: any, walletIndex: number) => { export const isRngReady = async (wallet, hre) => { const { randomizerRng, disputeKitClassic } = await getContracts(hre); - const requesterID = await randomizerRng.connect(wallet).requesterToID(disputeKitClassic.address); + const requesterID = await randomizerRng.connect(wallet).requesterToID(disputeKitClassic.target); const n = await randomizerRng.connect(wallet).randomNumbers(requesterID); if (Number(n) === 0) { console.log("rng is NOT ready."); @@ -77,7 +81,7 @@ export const isNetworkLocal = (hre: any): boolean => { export const getArbitrationFees = (hre, nbofjurors: bigint, feeforjuror: bigint) => { if (isNetworkLocal(hre)) { - return hre.ethers.utils.parseUnits("1"); + return hre.ethers.parseEther("1"); } else { return nbofjurors * feeforjuror; } @@ -147,7 +151,7 @@ export const waitForPeriod = async (disputeId: number, period: Period, hre) => { const { lastPeriodChange, courtID } = await core.disputes(disputeId); const periodDuration = (await core.getTimesPerPeriod(courtID))[period]; const now = await latest(hre.network); - const remainingDuration = lastPeriodChange.add(periodDuration).sub(now).toNumber(); + const remainingDuration = ethers.getNumber(lastPeriodChange + periodDuration - toBigInt(now)); if (remainingDuration > 0) { await waitFor(remainingDuration, hre); } diff --git a/contracts/scripts/viemTest.ts b/contracts/scripts/viemTest.ts index 17c19d783..bbd08d68f 100644 --- a/contracts/scripts/viemTest.ts +++ b/contracts/scripts/viemTest.ts @@ -12,7 +12,7 @@ const main = async () => { const disputeKit = getContract({ address: disputeKitClassicConfig.address[arbitrumSepolia.id], abi: disputeKitClassicConfig.abi, - publicClient: client, + client: client, }); await disputeKit.read.governor().then(console.log); diff --git a/contracts/src/arbitration/arbitrables/ArbitrableExample.sol b/contracts/src/arbitration/arbitrables/ArbitrableExample.sol index 0979a6920..301328f92 100644 --- a/contracts/src/arbitration/arbitrables/ArbitrableExample.sol +++ b/contracts/src/arbitration/arbitrables/ArbitrableExample.sol @@ -37,7 +37,7 @@ contract ArbitrableExample is IArbitrableV2 { // ************************************* // modifier onlyByGovernor() { - require(address(this) == msg.sender, "Only the governor allowed."); + require(msg.sender == governor, "Only the governor allowed."); _; } diff --git a/contracts/test/arbitration/draw.ts b/contracts/test/arbitration/draw.ts index d8de54169..9498c3e0a 100644 --- a/contracts/test/arbitration/draw.ts +++ b/contracts/test/arbitration/draw.ts @@ -1,6 +1,6 @@ import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { BigNumber, ContractReceipt, ContractTransaction, Wallet } from "ethers"; +import { toBigInt, ContractTransactionResponse, HDNodeWallet } from "ethers"; import { PNK, KlerosCore, @@ -8,17 +8,17 @@ import { HomeGateway, DisputeKitClassic, SortitionModule, + IncrementalNG, } from "../../typechain-types"; import { expect } from "chai"; -import { DrawEvent } from "../../typechain-types/src/kleros-v1/kleros-liquid-xdai/XKlerosLiquidV2"; import { Courts } from "../../deploy/utils"; /* eslint-disable no-unused-vars */ /* eslint-disable no-unused-expressions */ // https://github.com/standard/standard/issues/690#issuecomment-278533482 describe("Draw Benchmark", async () => { - const ONE_TENTH_ETH = BigNumber.from(10).pow(17); - const ONE_THOUSAND_PNK = BigNumber.from(10).pow(21); + const ONE_TENTH_ETH = 10n ** 17n; + const ONE_THOUSAND_PNK = 10n ** 21n; const enum Period { evidence, // Evidence can be submitted. This is also when drawing has to take place. @@ -39,20 +39,21 @@ describe("Draw Benchmark", async () => { drawing, // Jurors can be drawn. } - let deployer; - let relayer; - let disputeKit; - let pnk; - let core; - let arbitrable; - let homeGateway; - let sortitionModule; - let rng; - let parentCourtMinStake: BigNumber; - let childCourtMinStake: BigNumber; - const RANDOM = BigNumber.from("61688911660239508166491237672720926005752254046266901728404745669596507231249"); + let deployer: string; + let relayer: string; + let disputeKit: DisputeKitClassic; + let pnk: PNK; + let core: KlerosCore; + let arbitrable: ArbitrableExample; + let homeGateway: HomeGateway; + let sortitionModule: SortitionModule; + let rng: IncrementalNG; + let parentCourtMinStake: bigint; + let childCourtMinStake: bigint; + const RANDOM = 61688911660239508166491237672720926005752254046266901728404745669596507231249n; const PARENT_COURT = 1; const CHILD_COURT = 2; + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); beforeEach("Setup", async () => { ({ deployer, relayer } = await getNamedAccounts()); @@ -70,21 +71,22 @@ describe("Draw Benchmark", async () => { parentCourtMinStake = await core.courts(Courts.GENERAL).then((court) => court.minStake); - childCourtMinStake = BigNumber.from(10).pow(20).mul(3); // 300 PNK + childCourtMinStake = 3n * 10n ** 20n; // 300 PNK // Make the tests more deterministic with this dummy RNG - rng = await deployments.deploy("IncrementalNG", { + await deployments.deploy("IncrementalNG", { from: deployer, args: [RANDOM], log: true, }); + rng = (await ethers.getContract("IncrementalNG")) as IncrementalNG; - await sortitionModule.changeRandomNumberGenerator(rng.address, 20); + await sortitionModule.changeRandomNumberGenerator(rng.target, 20); // CourtId 2 = CHILD_COURT - const minStake = BigNumber.from(10).pow(20).mul(3); // 300 PNK - const alpha = 10000; - const feeForJuror = BigNumber.from(10).pow(17); + const minStake = 3n * 10n ** 20n; // 300 PNK + const alpha = 10000n; + const feeForJuror = 10n * 17n; await core.createCourt( 1, false, @@ -93,14 +95,14 @@ describe("Draw Benchmark", async () => { feeForJuror, 256, [0, 0, 0, 10], // evidencePeriod, commitPeriod, votePeriod, appealPeriod - ethers.utils.hexlify(5), // Extra data for sortition module will return the default value of K) + ethers.toBeHex(5), // Extra data for sortition module will return the default value of K) [1] ); }); type CountedDraws = { [address: string]: number }; - type SetStake = (wallet: Wallet) => Promise; - type ExpectFromDraw = (drawTx: Promise) => Promise; + type SetStake = (wallet: HDNodeWallet) => Promise; + type ExpectFromDraw = (drawTx: Promise) => Promise; const draw = async ( stake: SetStake, @@ -108,9 +110,9 @@ describe("Draw Benchmark", async () => { expectFromDraw: ExpectFromDraw, unstake: SetStake ) => { - const arbitrationCost = ONE_TENTH_ETH.mul(3); + const arbitrationCost = ONE_TENTH_ETH * 3n; const [bridger] = await ethers.getSigners(); - const wallets: Wallet[] = []; + const wallets: HDNodeWallet[] = []; // Stake some jurors for (let i = 0; i < 16; i++) { @@ -119,36 +121,38 @@ describe("Draw Benchmark", async () => { await bridger.sendTransaction({ to: wallet.address, - value: ethers.utils.parseEther("10"), + value: ethers.parseEther("10"), }); - expect(await wallet.getBalance()).to.equal(ethers.utils.parseEther("10")); + expect(await ethers.provider.getBalance(wallet)).to.equal(ethers.parseEther("10")); - await pnk.transfer(wallet.address, ONE_THOUSAND_PNK.mul(10)); - expect(await pnk.balanceOf(wallet.address)).to.equal(ONE_THOUSAND_PNK.mul(10)); + await pnk.transfer(wallet.address, ONE_THOUSAND_PNK * 10n); + expect(await pnk.balanceOf(wallet.address)).to.equal(ONE_THOUSAND_PNK * 10n); - await pnk.connect(wallet).approve(core.address, ONE_THOUSAND_PNK.mul(10), { gasLimit: 300000 }); + await pnk.connect(wallet).approve(core.target, ONE_THOUSAND_PNK * 10n, { gasLimit: 300000 }); await stake(wallet); } // Create a dispute - const tx = await arbitrable.functions["createDispute(string)"]("future of france", { + const tx = await arbitrable["createDispute(string)"]("future of france", { value: arbitrationCost, }); + await tx.wait(); + if (tx.blockNumber === null) throw new Error("tx.blockNumber is null"); const trace = await network.provider.send("debug_traceTransaction", [tx.hash]); - const [disputeId] = ethers.utils.defaultAbiCoder.decode(["uint"], `0x${trace.returnValue}`); + const [disputeId] = abiCoder.decode(["uint"], ethers.getBytes(`${trace.returnValue}`)); const lastBlock = await ethers.provider.getBlock(tx.blockNumber - 1); - + if (lastBlock?.hash === null || lastBlock?.hash === undefined) throw new Error("lastBlock is null || undefined"); // Relayer tx - const tx2 = await homeGateway + await homeGateway .connect(await ethers.getSigner(relayer)) - .functions["relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))"]( + ["relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))"]( { - foreignBlockHash: lastBlock.hash, + foreignBlockHash: lastBlock?.hash, foreignChainID: 31337, - foreignArbitrable: arbitrable.address, + foreignArbitrable: arbitrable.target, foreignDisputeID: disputeId, - externalDisputeID: ethers.utils.keccak256(ethers.utils.toUtf8Bytes("future of france")), + externalDisputeID: ethers.keccak256(ethers.toUtf8Bytes("future of france")), templateId: 0, templateUri: "", choices: 2, @@ -180,7 +184,7 @@ describe("Draw Benchmark", async () => { }; const countDraws = async (blockNumber: number) => { - const draws: Array = await core.queryFilter(core.filters.Draw(), blockNumber, blockNumber); + const draws: Array = await core.queryFilter(core.filters.Draw(), blockNumber, blockNumber); return draws.reduce((acc: { [address: string]: number }, draw) => { const address = draw.args._address; acc[address] = acc[address] ? acc[address] + 1 : 1; @@ -189,21 +193,23 @@ describe("Draw Benchmark", async () => { }; it("Stakes in parent court and should draw jurors in parent court", async () => { - const stake = async (wallet: Wallet) => { - await core.connect(wallet).setStake(PARENT_COURT, ONE_THOUSAND_PNK.mul(5), { gasLimit: 5000000 }); + const stake = async (wallet: HDNodeWallet) => { + await core.connect(wallet).setStake(PARENT_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }); expect(await sortitionModule.getJurorBalance(wallet.address, 1)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - 0, // totalLocked - ONE_THOUSAND_PNK.mul(5), // stakedInCourt + ONE_THOUSAND_PNK * 5n, // totalStaked + 0n, // totalLocked + ONE_THOUSAND_PNK * 5n, // stakedInCourt PARENT_COURT, // nbOfCourts ]); }; let countedDraws: CountedDraws; - const expectFromDraw = async (drawTx: Promise) => { + const expectFromDraw = async (drawTx: Promise) => { + console.log((await core.getRoundInfo(0, 0)).drawIterations); expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(3); const tx = await (await drawTx).wait(); + if (!tx) throw new Error("Failed to get transaction receipt"); expect(tx) .to.emit(core, "Draw") .withArgs(anyValue, 0, 0, 0) @@ -211,27 +217,27 @@ describe("Draw Benchmark", async () => { .withArgs(anyValue, 0, 0, 1) .to.emit(core, "Draw") .withArgs(anyValue, 0, 0, 2); - + if (tx?.blockNumber === undefined) throw new Error("txBlockNumber is null"); countedDraws = await countDraws(tx.blockNumber); for (const [address, draws] of Object.entries(countedDraws)) { expect(await sortitionModule.getJurorBalance(address, PARENT_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - parentCourtMinStake.mul(draws), // totalLocked - ONE_THOUSAND_PNK.mul(5), // stakedInCourt + ONE_THOUSAND_PNK * 5n, // totalStaked + parentCourtMinStake * toBigInt(draws), // totalLocked + ONE_THOUSAND_PNK * 5n, // stakedInCourt 1, // nbOfCourts ]); expect(await sortitionModule.getJurorBalance(address, CHILD_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - parentCourtMinStake.mul(draws), // totalLocked - 0, // stakedInCourt + ONE_THOUSAND_PNK * 5n, // totalStaked + parentCourtMinStake * toBigInt(draws), // totalLocked + 0n, // stakedInCourt 1, // nbOfCourts ]); } }; - const unstake = async (wallet: Wallet) => { + const unstake = async (wallet: HDNodeWallet) => { await core.connect(wallet).setStake(PARENT_COURT, 0, { gasLimit: 5000000 }); - const locked = parentCourtMinStake.mul(countedDraws[wallet.address] ?? 0); + const locked = parentCourtMinStake * toBigInt(countedDraws[wallet.address] ?? 0); expect( await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), "Drawn jurors have a locked stake in the parent court" @@ -257,16 +263,17 @@ describe("Draw Benchmark", async () => { // Warning: we are skipping this during `hardhat coverage` because it fails, although it passes with `hardhat test` it("Stakes in parent court and should draw nobody in subcourt [ @skip-on-coverage ]", async () => { - const stake = async (wallet: Wallet) => { - await core.connect(wallet).setStake(PARENT_COURT, ONE_THOUSAND_PNK.mul(5), { gasLimit: 5000000 }); + const stake = async (wallet: HDNodeWallet) => { + await core.connect(wallet).setStake(PARENT_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }); }; - const expectFromDraw = async (drawTx: Promise) => { + const expectFromDraw = async (drawTx: Promise) => { + console.log((await core.getRoundInfo(0, 0)).drawIterations); expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(20); expect(await drawTx).to.not.emit(core, "Draw"); }; - const unstake = async (wallet: Wallet) => { + const unstake = async (wallet: HDNodeWallet) => { await core.connect(wallet).setStake(PARENT_COURT, 0, { gasLimit: 5000000 }); expect( await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), @@ -292,14 +299,16 @@ describe("Draw Benchmark", async () => { }); it("Stakes in subcourt and should draw jurors in parent court", async () => { - const stake = async (wallet: Wallet) => { - await core.connect(wallet).setStake(CHILD_COURT, ONE_THOUSAND_PNK.mul(5), { gasLimit: 5000000 }); + const stake = async (wallet: HDNodeWallet) => { + await core.connect(wallet).setStake(CHILD_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }); }; let countedDraws: CountedDraws; - const expectFromDraw = async (drawTx: Promise) => { + const expectFromDraw = async (drawTx: Promise) => { + console.log((await core.getRoundInfo(0, 0)).drawIterations); expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(3); const tx = await (await drawTx).wait(); + if (!tx) throw new Error("Failed to get transaction receipt"); expect(tx) .to.emit(core, "Draw") .withArgs(anyValue, 0, 0, 0) @@ -311,23 +320,23 @@ describe("Draw Benchmark", async () => { countedDraws = await countDraws(tx.blockNumber); for (const [address, draws] of Object.entries(countedDraws)) { expect(await sortitionModule.getJurorBalance(address, PARENT_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - parentCourtMinStake.mul(draws), // totalLocked + ONE_THOUSAND_PNK * 5n, // totalStaked + parentCourtMinStake * toBigInt(draws), // totalLocked 0, // stakedInCourt 1, // nbOfCourts ]); expect(await sortitionModule.getJurorBalance(address, CHILD_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - parentCourtMinStake.mul(draws), // totalLocked - ONE_THOUSAND_PNK.mul(5), // stakedInCourt + ONE_THOUSAND_PNK * 5n, // totalStaked + parentCourtMinStake * toBigInt(draws), // totalLocked + ONE_THOUSAND_PNK * 5n, // stakedInCourt 1, // nbOfCourts ]); } }; - const unstake = async (wallet: Wallet) => { + const unstake = async (wallet: HDNodeWallet) => { await core.connect(wallet).setStake(CHILD_COURT, 0, { gasLimit: 5000000 }); - const locked = parentCourtMinStake.mul(countedDraws[wallet.address] ?? 0); + const locked = parentCourtMinStake * toBigInt(countedDraws[wallet.address] ?? 0); expect( await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), "No locked stake in the parent court" @@ -352,14 +361,16 @@ describe("Draw Benchmark", async () => { }); it("Stakes in subcourt and should draw jurors in subcourt", async () => { - const stake = async (wallet: Wallet) => { - await core.connect(wallet).setStake(CHILD_COURT, ONE_THOUSAND_PNK.mul(5), { gasLimit: 5000000 }); + const stake = async (wallet: HDNodeWallet) => { + await core.connect(wallet).setStake(CHILD_COURT, ONE_THOUSAND_PNK * 5n, { gasLimit: 5000000 }); }; let countedDraws: CountedDraws; - const expectFromDraw = async (drawTx: Promise) => { + const expectFromDraw = async (drawTx: Promise) => { + console.log((await core.getRoundInfo(0, 0)).drawIterations); expect(await core.getRoundInfo(0, 0).then((round) => round.drawIterations)).to.equal(3); const tx = await (await drawTx).wait(); + if (!tx) throw new Error("Failed to get transaction receipt"); expect(tx) .to.emit(core, "Draw") .withArgs(anyValue, 0, 0, 0) @@ -371,23 +382,23 @@ describe("Draw Benchmark", async () => { countedDraws = await countDraws(tx.blockNumber); for (const [address, draws] of Object.entries(countedDraws)) { expect(await sortitionModule.getJurorBalance(address, PARENT_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - childCourtMinStake.mul(draws), // totalLocked - 0, // stakedInCourt + ONE_THOUSAND_PNK * 5n, // totalStaked + childCourtMinStake * toBigInt(draws), // totalLocked + 0n, // stakedInCourt 1, // nbOfCourts ]); expect(await sortitionModule.getJurorBalance(address, CHILD_COURT)).to.deep.equal([ - ONE_THOUSAND_PNK.mul(5), // totalStaked - childCourtMinStake.mul(draws), // totalLocked - ONE_THOUSAND_PNK.mul(5), // stakedInCourt + ONE_THOUSAND_PNK * 5n, // totalStaked + childCourtMinStake * toBigInt(draws), // totalLocked + ONE_THOUSAND_PNK * 5n, // stakedInCourt 1, // nbOfCourts ]); } }; - const unstake = async (wallet: Wallet) => { + const unstake = async (wallet: HDNodeWallet) => { await core.connect(wallet).setStake(CHILD_COURT, 0, { gasLimit: 5000000 }); - const locked = childCourtMinStake.mul(countedDraws[wallet.address] ?? 0); + const locked = childCourtMinStake * toBigInt(countedDraws[wallet.address] ?? 0); expect( await sortitionModule.getJurorBalance(wallet.address, PARENT_COURT), "No locked stake in the parent court" diff --git a/contracts/test/arbitration/index.ts b/contracts/test/arbitration/index.ts index bf8b4bb02..5c861c537 100644 --- a/contracts/test/arbitration/index.ts +++ b/contracts/test/arbitration/index.ts @@ -1,57 +1,57 @@ import { expect } from "chai"; import { deployments, ethers } from "hardhat"; -import { BigNumber } from "ethers"; import { KlerosCore, DisputeKitClassic } from "../../typechain-types"; +import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; describe("DisputeKitClassic", async () => { // eslint-disable-next-line no-unused-vars - let deployer; - let core, disputeKit; + let deployer: HardhatEthersSigner; + let core: KlerosCore, disputeKit: DisputeKitClassic; before("Deploying", async () => { [deployer] = await ethers.getSigners(); - [core, disputeKit] = await deployContracts(deployer); + [core, disputeKit] = await deployContracts(); }); it("Kleros Core initialization", async () => { - let events = await core.queryFilter(core.filters.DisputeKitCreated()); + const events = await core.queryFilter(core.filters.DisputeKitCreated()); expect(events.length).to.equal(1); expect(events[0].args._disputeKitID).to.equal(1); - expect(events[0].args._disputeKitAddress).to.equal(disputeKit.address); + expect(events[0].args._disputeKitAddress).to.equal(disputeKit.target); // Reminder: the Forking court will be added which will break these expectations. - events = await core.queryFilter(core.filters.CourtCreated()); - expect(events.length).to.equal(1); - expect(events[0].args._courtID).to.equal(1); - expect(events[0].args._parent).to.equal(0); - expect(events[0].args._hiddenVotes).to.equal(false); - expect(events[0].args._minStake).to.equal(ethers.utils.parseUnits("200", 18)); - expect(events[0].args._alpha).to.equal(10000); - expect(events[0].args._feeForJuror).to.equal(ethers.utils.parseUnits("0.1", 18)); - expect(events[0].args._jurorsForCourtJump).to.equal(256); - expect(events[0].args._timesPerPeriod).to.deep.equal([0, 0, 0, 10]); - expect(events[0].args._supportedDisputeKits).to.deep.equal([]); + const events2 = await core.queryFilter(core.filters.CourtCreated()); + expect(events2.length).to.equal(1); + expect(events2[0].args._courtID).to.equal(1); + expect(events2[0].args._parent).to.equal(0); + expect(events2[0].args._hiddenVotes).to.equal(false); + expect(events2[0].args._minStake).to.equal(ethers.parseUnits("200", 18)); + expect(events2[0].args._alpha).to.equal(10000); + expect(events2[0].args._feeForJuror).to.equal(ethers.parseUnits("0.1", 18)); + expect(events2[0].args._jurorsForCourtJump).to.equal(256); + expect(events2[0].args._timesPerPeriod).to.deep.equal([0, 0, 0, 10]); + expect(events2[0].args._supportedDisputeKits).to.deep.equal([]); - events = await core.queryFilter(core.filters.DisputeKitEnabled()); - expect(events.length).to.equal(1); - expect(events[0].args._courtID).to.equal(1); - expect(events[0].args._disputeKitID).to.equal(1); - expect(events[0].args._enable).to.equal(true); + const events3 = await core.queryFilter(core.filters.DisputeKitEnabled()); + expect(events3.length).to.equal(1); + expect(events3[0].args._courtID).to.equal(1); + expect(events3[0].args._disputeKitID).to.equal(1); + expect(events3[0].args._enable).to.equal(true); }); it("Should create a dispute", async () => { - await expect(disputeKit.connect(deployer).createDispute(0, 0, 3, "0x00")).to.be.revertedWith( + await expect(disputeKit.connect(deployer).createDispute(0, 0, ethers.toBeHex(3), "0x00")).to.be.revertedWith( "Access not allowed: KlerosCore only." ); const tx = await core .connect(deployer) - .functions["createDispute(uint256,bytes)"](2, "0x00", { value: ethers.utils.parseEther("0.3") }); + ["createDispute(uint256,bytes)"](2, "0x00", { value: ethers.parseEther("0.3") }); expect(tx).to.emit(core, "DisputeCreation").withArgs(0, deployer.address); expect(tx).to.emit(disputeKit, "DisputeCreation").withArgs(0, 2, "0x00"); await disputeKit.disputes(0).then((disputes) => { - expect(BigNumber.from(Object.values(disputes)[0])).to.equal(2); + expect(disputes[0]).to.equal(2); }); console.log(`choice 0: ${await disputeKit.getRoundInfo(0, 0, 0)}`); @@ -60,7 +60,7 @@ describe("DisputeKitClassic", async () => { }); }); -async function deployContracts(deployer) { +async function deployContracts(): Promise<[KlerosCore, DisputeKitClassic]> { await deployments.fixture(["Arbitration", "VeaMock"], { fallbackToGlobal: true, keepExistingDeployments: false, diff --git a/contracts/test/arbitration/ruler.ts b/contracts/test/arbitration/ruler.ts index 97b7c3251..bf5754295 100644 --- a/contracts/test/arbitration/ruler.ts +++ b/contracts/test/arbitration/ruler.ts @@ -1,12 +1,13 @@ import { expect } from "chai"; import { deployments, ethers } from "hardhat"; -import { BigNumber } from "ethers"; +import { ZeroAddress, parseEther } from "ethers"; import { DisputeResolver, KlerosCoreRuler } from "../../typechain-types"; import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; describe("KlerosCoreRuler", async () => { // eslint-disable-next-line no-unused-vars - let deployer, dev, dev2; + let deployer: HardhatEthersSigner, dev: HardhatEthersSigner, dev2: HardhatEthersSigner; let core: KlerosCoreRuler; let resolver: DisputeResolver; @@ -20,18 +21,18 @@ describe("KlerosCoreRuler", async () => { const courtId = 1; const minJurors = 3; const disputeKitId = 1; - const extraData = ethers.utils.defaultAbiCoder.encode( + const extraData = ethers.AbiCoder.defaultAbiCoder().encode( ["uint96", "uint96", "uint256"], [courtId, minJurors, disputeKitId] ); before("Deploying", async () => { [deployer, dev, dev2] = await ethers.getSigners(); - [core, resolver] = await deployContracts(deployer); + [core, resolver] = await deployContracts(); // Create dummy disputes to distinguish between arbitrable-level and arbitrator-level disputeIDs await core.changeRulingModeToManual(deployer.address); - await core["createDispute(uint256,bytes)"](2, extraData, { value: ethers.utils.parseEther("0.3") }); + await core["createDispute(uint256,bytes)"](2, extraData, { value: parseEther("0.3") }); }); it("Should have initialized the Arbitrator", async () => { @@ -41,104 +42,104 @@ describe("KlerosCoreRuler", async () => { expect(events[0].args._courtID).to.equal(1); expect(events[0].args._parent).to.equal(0); expect(events[0].args._alpha).to.equal(10000); - expect(events[0].args._feeForJuror).to.equal(BigNumber.from(10).pow(17)); + expect(events[0].args._feeForJuror).to.equal(10n ** 17n); expect(events[0].args._jurorsForCourtJump).to.equal(16); }); it("Should fail to create a dispute without setting the RulingMode first", async () => { await expect( - resolver.createDisputeForTemplate(extraData, "", "", 3, { value: ethers.utils.parseEther("0.3") }) + resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") }) ).to.be.revertedWithCustomError(core, "RulingModeNotSet"); }); it("Should allow anyone to set the RulingMode for an uninitialized arbitrable", async () => { - expect(await core.rulers(resolver.address)).to.equal(ethers.constants.AddressZero); + expect(await core.rulers(resolver.target)).to.equal(ZeroAddress); - await expect(core.connect(dev).changeRulingModeToAutomaticRandom(resolver.address)) + await expect(core.connect(dev).changeRulingModeToAutomaticRandom(resolver.target)) .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.address, [RulingMode.automaticRandom, 0, false, false]); + .withArgs(resolver.target, [RulingMode.automaticRandom, 0, false, false]); - expect(await core.rulers(resolver.address)).to.equal(dev.address); + expect(await core.rulers(resolver.target)).to.equal(dev.address); }); it("Should only allow the arbitrable's ruler to set the RulingMode", async () => { - expect(await core.rulers(resolver.address)).to.equal(dev.address); + expect(await core.rulers(resolver.target)).to.equal(dev.address); - await expect(core.connect(dev2).changeRulingModeToManual(resolver.address)).revertedWithCustomError( + await expect(core.connect(dev2).changeRulingModeToManual(resolver.target)).revertedWithCustomError( core, "RulerOnly" ); - await expect(core.connect(deployer).changeRulingModeToManual(resolver.address)).revertedWithCustomError( + await expect(core.connect(deployer).changeRulingModeToManual(resolver.target)).revertedWithCustomError( core, "RulerOnly" ); - expect(await core.rulers(resolver.address)).to.equal(dev.address); + expect(await core.rulers(resolver.target)).to.equal(dev.address); }); it("Should create a dispute and automatically execute a random ruling", async () => { - await expect(core.connect(dev).changeRulingModeToAutomaticRandom(resolver.address)) + await expect(core.connect(dev).changeRulingModeToAutomaticRandom(resolver.target)) .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.address, [RulingMode.automaticRandom, 0, false, false]); + .withArgs(resolver.target, [RulingMode.automaticRandom, 0, false, false]); const disputeID = 1; const localDisputeID = disputeID - 1; const templateId = disputeID - 1; - await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: ethers.utils.parseEther("0.3") })) + await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") })) .to.emit(core, "DisputeCreation") - .withArgs(disputeID, resolver.address) + .withArgs(disputeID, resolver.target) .and.to.emit(core, "AutoRuled") - .withArgs(resolver.address, RulingMode.automaticRandom, disputeID, anyValue, anyValue, anyValue) + .withArgs(resolver.target, RulingMode.automaticRandom, disputeID, anyValue, anyValue, anyValue) .and.to.emit(core, "Ruling") - .withArgs(resolver.address, disputeID, anyValue) + .withArgs(resolver.target, disputeID, anyValue) .and.to.emit(core, "TokenAndETHShift") - .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ethers.constants.AddressZero) + .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ZeroAddress) .and.to.emit(resolver, "DisputeRequest") - .withArgs(core.address, disputeID, localDisputeID, templateId, "") + .withArgs(core.target, disputeID, localDisputeID, templateId, "") .and.to.emit(resolver, "Ruling") - .withArgs(core.address, disputeID, anyValue); + .withArgs(core.target, disputeID, anyValue); }); it("Should create a dispute and automatically execute a preset ruling", async () => { - await expect(core.connect(dev).changeRulingModeToAutomaticPreset(resolver.address, 2, true, false)) + await expect(core.connect(dev).changeRulingModeToAutomaticPreset(resolver.target, 2, true, false)) .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.address, [RulingMode.automaticPreset, 2, true, false]); + .withArgs(resolver.target, [RulingMode.automaticPreset, 2, true, false]); const disputeID = 2; const localDisputeID = disputeID - 1; const templateId = disputeID - 1; - await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: ethers.utils.parseEther("0.3") })) + await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") })) .to.emit(core, "DisputeCreation") - .withArgs(disputeID, resolver.address) + .withArgs(disputeID, resolver.target) .and.to.emit(core, "AutoRuled") - .withArgs(resolver.address, RulingMode.automaticPreset, disputeID, 2, true, false) + .withArgs(resolver.target, RulingMode.automaticPreset, disputeID, 2, true, false) .and.to.emit(core, "Ruling") - .withArgs(resolver.address, disputeID, 2) + .withArgs(resolver.target, disputeID, 2) .and.to.emit(core, "TokenAndETHShift") - .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ethers.constants.AddressZero) + .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ZeroAddress) .and.to.emit(resolver, "DisputeRequest") - .withArgs(core.address, disputeID, localDisputeID, templateId, "") + .withArgs(core.target, disputeID, localDisputeID, templateId, "") .and.to.emit(resolver, "Ruling") - .withArgs(core.address, disputeID, 2); + .withArgs(core.target, disputeID, 2); }); it("Should create a dispute and manually execute a ruling", async () => { - await expect(core.connect(dev).changeRulingModeToManual(resolver.address)) + await expect(core.connect(dev).changeRulingModeToManual(resolver.target)) .to.emit(core, "RulerSettingsChanged") - .withArgs(resolver.address, [RulingMode.manual, 0, false, false]); + .withArgs(resolver.target, [RulingMode.manual, 0, false, false]); const disputeID = 3; const localDisputeID = disputeID - 1; const templateId = disputeID - 1; - await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: ethers.utils.parseEther("0.3") })) + await expect(resolver.createDisputeForTemplate(extraData, "", "", 3, { value: parseEther("0.3") })) .to.emit(core, "DisputeCreation") - .withArgs(disputeID, resolver.address) + .withArgs(disputeID, resolver.target) .and.to.emit(resolver, "DisputeRequest") - .withArgs(core.address, disputeID, localDisputeID, templateId, ""); + .withArgs(core.target, disputeID, localDisputeID, templateId, ""); await expect(core.connect(deployer).executeRuling(disputeID, 3, true, true)).revertedWithCustomError( core, @@ -147,17 +148,17 @@ describe("KlerosCoreRuler", async () => { await expect(core.connect(dev).executeRuling(disputeID, 3, true, true)) .and.to.emit(core, "Ruling") - .withArgs(resolver.address, disputeID, 3) + .withArgs(resolver.target, disputeID, 3) .and.to.emit(resolver, "Ruling") - .withArgs(core.address, disputeID, 3); + .withArgs(core.target, disputeID, 3); await expect(core.execute(disputeID, 0)) .and.to.emit(core, "TokenAndETHShift") - .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ethers.constants.AddressZero); + .withArgs(dev.address, disputeID, 0, 1, 0, anyValue, ZeroAddress); }); }); -async function deployContracts(deployer): Promise<[KlerosCoreRuler, DisputeResolver]> { +async function deployContracts(): Promise<[KlerosCoreRuler, DisputeResolver]> { await deployments.fixture(["ArbitrationRuler"], { fallbackToGlobal: true, keepExistingDeployments: false, diff --git a/contracts/test/arbitration/staking-neo.ts b/contracts/test/arbitration/staking-neo.ts index 68f870125..1104bb4dc 100644 --- a/contracts/test/arbitration/staking-neo.ts +++ b/contracts/test/arbitration/staking-neo.ts @@ -1,6 +1,4 @@ import { ethers, getNamedAccounts, network, deployments } from "hardhat"; -const { anyValue } = require("@nomicfoundation/hardhat-chai-matchers/withArgs"); -import { BigNumber } from "ethers"; import { PNK, RandomizerRNG, @@ -11,6 +9,7 @@ import { DisputeResolver, } from "../../typechain-types"; import { expect } from "chai"; +import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; /* eslint-disable no-unused-vars */ /* eslint-disable no-unused-expressions */ @@ -28,27 +27,29 @@ Otherwise it should behave like a Neo arbitrator. // TODO: assert on sortition.totalStaked in happy case describe("Staking", async () => { - const ETH = (amount: number) => ethers.utils.parseUnits(amount.toString()); + const ETH = (amount: number) => ethers.parseUnits(amount.toString()); const PNK = ETH; - // 2nd court, 3 jurors, 1 dispute kit - const extraData = - "0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001"; - - let deployer; - let juror; - let guardian; - let pnk; - let core; - let sortition; - let rng; - let randomizer; - let nft; - let resolver; - let balanceBefore; + const extraData = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256"], + [2, 3, 1] // courtId 2, minJurors 3, disputeKitId 1 + ); + + let deployer: string; + let juror: HardhatEthersSigner; + let guardian: HardhatEthersSigner; + let pnk: PNK; + let core: KlerosCoreNeo; + let sortition: SortitionModuleNeo; + let rng: RandomizerRNG; + let randomizer: RandomizerMock; + let nft: TestERC721; + let resolver: DisputeResolver; + let balanceBefore: bigint; const deployUnhappy = async () => { ({ deployer } = await getNamedAccounts()); + await deployments.fixture(["ArbitrationNeo"], { fallbackToGlobal: true, keepExistingDeployments: false, @@ -107,7 +108,7 @@ describe("Staking", async () => { await network.provider.send("evm_mine"); } - await randomizer.relay(rng.address, 0, ethers.utils.randomBytes(32)); + await randomizer.relay(rng.target, 0, ethers.randomBytes(32)); await sortition.passPhase(); // Generating -> Drawing expect(await sortition.phase()).to.be.equal(2); // Drawing @@ -131,7 +132,7 @@ describe("Staking", async () => { describe("When arbitrable is not whitelisted", () => { before("Setup", async () => { await deployUnhappy(); - await core.changeArbitrableWhitelist(resolver.address, false); + await core.changeArbitrableWhitelist(resolver.target, false); }); it("Should fail to create a dispute", async () => { @@ -145,14 +146,14 @@ describe("Staking", async () => { describe("When arbitrable is whitelisted", () => { before("Setup", async () => { await deployUnhappy(); - await core.changeArbitrableWhitelist(resolver.address, true); + await core.changeArbitrableWhitelist(resolver.target, true); }); it("Should create a dispute", async () => { const arbitrationCost = ETH(0.5); expect(await resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost })) .to.emit(core, "DisputeCreation") - .withArgs(1, resolver.address); + .withArgs(1, resolver.target); }); }); @@ -162,7 +163,7 @@ describe("Staking", async () => { }); it("Should not be able to stake", async () => { - await pnk.connect(juror).approve(core.address, PNK(1000)); + await pnk.connect(juror).approve(core.target, PNK(1000)); await expect(core.connect(juror).setStake(1, PNK(1000))).to.be.revertedWithCustomError( core, "NotEligibleForStaking" @@ -177,7 +178,7 @@ describe("Staking", async () => { }); it("Should be able to stake", async () => { - await pnk.connect(juror).approve(core.address, PNK(1000)); + await pnk.connect(juror).approve(core.target, PNK(1000)); await expect(await core.connect(juror).setStake(1, PNK(1000))) .to.emit(sortition, "StakeSet") .withArgs(juror.address, 1, PNK(1000)); @@ -190,7 +191,7 @@ describe("Staking", async () => { await deployUnhappy(); await nft.safeMint(juror.address); - await pnk.connect(juror).approve(core.address, PNK(10_000)); + await pnk.connect(juror).approve(core.target, PNK(10_000)); await core.connect(juror).setStake(1, PNK(1000)); }); @@ -241,7 +242,7 @@ describe("Staking", async () => { describe("When totalStaked is low", async () => { describe("When stakes are NOT delayed", () => { it("Should not be able to stake more than maxStakePerJuror", async () => { - await pnk.connect(juror).approve(core.address, PNK(5000)); + await pnk.connect(juror).approve(core.target, PNK(5000)); await expect(core.connect(juror).setStake(1, PNK(5000))).to.be.revertedWithCustomError( core, "StakingMoreThanMaxStakePerJuror" @@ -253,7 +254,7 @@ describe("Staking", async () => { describe("When stakes are delayed", () => { it("Should not be able to stake more than maxStakePerJuror", async () => { await createDisputeAndReachGeneratingPhaseFromStaking(); - await pnk.connect(juror).approve(core.address, PNK(5000)); + await pnk.connect(juror).approve(core.target, PNK(5000)); await expect(core.connect(juror).setStake(1, PNK(5000))).to.be.revertedWithCustomError( core, "StakingMoreThanMaxStakePerJuror" @@ -265,7 +266,7 @@ describe("Staking", async () => { }); it("Should be able to stake exactly maxStakePerJuror", async () => { - await pnk.connect(juror).approve(core.address, PNK(5000)); + await pnk.connect(juror).approve(core.target, PNK(5000)); await core.connect(juror).setStake(1, PNK(1000)); await createDisputeAndReachGeneratingPhaseFromStaking(); expect(await core.connect(juror).setStake(1, PNK(2000))) @@ -288,13 +289,13 @@ describe("Staking", async () => { // deployer increases totalStaked to 2000 await nft.safeMint(deployer); - await pnk.approve(core.address, PNK(2000)); + await pnk.approve(core.target, PNK(2000)); await core.setStake(1, PNK(2000)); }); describe("When stakes are NOT delayed", () => { it("Should not be able to stake more than maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.address, PNK(2000)); + await pnk.connect(juror).approve(core.target, PNK(2000)); await expect(core.connect(juror).setStake(1, PNK(2000))).to.be.revertedWithCustomError( core, "StakingMoreThanMaxTotalStaked" @@ -303,7 +304,7 @@ describe("Staking", async () => { }); it("Should be able to stake exactly maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.address, PNK(1000)); + await pnk.connect(juror).approve(core.target, PNK(1000)); await expect(await core.connect(juror).setStake(1, PNK(1000))) .to.emit(sortition, "StakeSet") .withArgs(juror.address, 1, PNK(1000)); @@ -317,7 +318,7 @@ describe("Staking", async () => { }); it("Should not be able to stake more than maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.address, PNK(2000)); + await pnk.connect(juror).approve(core.target, PNK(2000)); await expect(core.connect(juror).setStake(1, PNK(2000))).to.be.revertedWithCustomError( core, "StakingMoreThanMaxTotalStaked" @@ -329,7 +330,7 @@ describe("Staking", async () => { }); it("Should be able to stake exactly maxTotalStaked", async () => { - await pnk.connect(juror).approve(core.address, PNK(1000)); + await pnk.connect(juror).approve(core.target, PNK(1000)); await expect(await core.connect(juror).setStake(1, PNK(1000))) .to.emit(sortition, "StakeDelayedAlreadyTransferred") .withArgs(juror.address, 1, PNK(1000)); @@ -372,7 +373,7 @@ describe("Staking", async () => { beforeEach("Setup", async () => { await deploy(); - await pnk.approve(core.address, PNK(2000)); + await pnk.approve(core.target, PNK(2000)); await core.setStake(1, PNK(500)); await core.connect(guardian).pause(); @@ -396,14 +397,14 @@ describe("Staking", async () => { describe("When outside the Staking phase", async () => { const createSubcourtStakeAndCreateDispute = async () => { expect(await sortition.phase()).to.be.equal(0); // Staking - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], 3, [1]); // Parent - general court, Classic dispute kit + await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - await pnk.approve(core.address, PNK(4000)); + await pnk.approve(core.target, PNK(4000)); await core.setStake(1, PNK(2000)); await core.setStake(2, PNK(2000)); - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([BigNumber.from("1"), BigNumber.from("2")]); + expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1n, 2n]); - const arbitrationCost = ETH(0.1).mul(3); + const arbitrationCost = ETH(0.1) * 3n; await resolver.createDisputeForTemplate(extraData, "", "", 2, { value: arbitrationCost }); }; @@ -424,7 +425,7 @@ describe("Staking", async () => { it("Should transfer PNK but delay the stake increase", async () => { expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.address, PNK(1000)); + await pnk.approve(core.target, PNK(1000)); expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); await expect(core.setStake(2, PNK(3000))) .to.emit(sortition, "StakeDelayedAlreadyTransferred") @@ -433,7 +434,7 @@ describe("Staking", async () => { }); it("Should transfer some PNK out of the juror's account", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.sub(PNK(1000))); // PNK is transferred out of the juror's account + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore - PNK(1000)); // PNK is transferred out of the juror's account }); it("Should store the delayed stake for later", async () => { @@ -465,8 +466,8 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // no delayed stakes left }); @@ -530,13 +531,13 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // no delayed stakes left }); it("Should withdraw some PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.add(PNK(1000))); // No PNK transfer yet + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore + PNK(1000)); // No PNK transfer yet }); }); }); @@ -596,7 +597,7 @@ describe("Staking", async () => { expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(2); expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); }); }); @@ -619,8 +620,8 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // no delayed stakes left }); @@ -647,7 +648,7 @@ describe("Staking", async () => { it("Should transfer PNK but delay the stake increase", async () => { expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.address, PNK(1000)); + await pnk.approve(core.target, PNK(1000)); expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); await expect(core.setStake(2, PNK(3000))) .to.emit(sortition, "StakeDelayedAlreadyTransferred") @@ -656,7 +657,7 @@ describe("Staking", async () => { }); it("Should transfer some PNK out of the juror's account", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.sub(PNK(1000))); // PNK is transferred out of the juror's account + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore - PNK(1000)); // PNK is transferred out of the juror's account }); it("Should store the delayed stake for later", async () => { @@ -680,14 +681,14 @@ describe("Staking", async () => { }); it("Should transfer back some PNK to the juror", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.add(PNK(1000))); // PNK is sent back to the juror + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore + PNK(1000)); // PNK is sent back to the juror }); it("Should store the delayed stake for later", async () => { expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(2); expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); }); }); @@ -713,8 +714,8 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // no delayed stakes left }); @@ -731,9 +732,9 @@ describe("Staking", async () => { }); it("Should unstake from all courts", async () => { - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], 3, [1]); // Parent - general court, Classic dispute kit + await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - await pnk.approve(core.address, PNK(4000)); + await pnk.approve(core.target, PNK(4000)); await core.setStake(1, PNK(2000)); await core.setStake(2, PNK(2000)); expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1, 2]); diff --git a/contracts/test/arbitration/staking.ts b/contracts/test/arbitration/staking.ts index 22df64f2c..ffd534470 100644 --- a/contracts/test/arbitration/staking.ts +++ b/contracts/test/arbitration/staking.ts @@ -1,6 +1,4 @@ import { ethers, getNamedAccounts, network, deployments } from "hardhat"; -const { anyValue } = require("@nomicfoundation/hardhat-chai-matchers/withArgs"); -import { BigNumber } from "ethers"; import { PNK, KlerosCore, SortitionModule, RandomizerRNG, RandomizerMock } from "../../typechain-types"; import { expect } from "chai"; @@ -8,19 +6,20 @@ import { expect } from "chai"; /* eslint-disable no-unused-expressions */ describe("Staking", async () => { - const ETH = (amount: number) => ethers.utils.parseUnits(amount.toString()); + const ETH = (amount: number) => ethers.parseUnits(amount.toString()); const PNK = ETH; - // 2nd court, 3 jurors, 1 dispute kit - const extraData = - "0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001"; + const extraData = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256", "uint256"], + [2, 3, 1] // courtId 2, minJurors 3, disputeKitId 1 + ); - let deployer; - let pnk; - let core; - let sortition; - let rng; - let randomizer; + let deployer: string; + let pnk: PNK; + let core: KlerosCore; + let sortition: SortitionModule; + let rng: RandomizerRNG; + let randomizer: RandomizerMock; const deploy = async () => { ({ deployer } = await getNamedAccounts()); @@ -36,21 +35,20 @@ describe("Staking", async () => { }; describe("When outside the Staking phase", async () => { - let balanceBefore; + let balanceBefore: bigint; const reachDrawingPhase = async () => { expect(await sortition.phase()).to.be.equal(0); // Staking - const arbitrationCost = ETH(0.1).mul(3); + const arbitrationCost = ETH(0.1) * 3n; + await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], 3, [1]); // Parent - general court, Classic dispute kit - - await pnk.approve(core.address, PNK(4000)); + await pnk.approve(core.target, PNK(4000)); await core.setStake(1, PNK(2000)); await core.setStake(2, PNK(2000)); - expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([BigNumber.from("1"), BigNumber.from("2")]); + expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1n, 2n]); - await core.functions["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }); + await core["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }); await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime await network.provider.send("evm_mine"); @@ -65,7 +63,7 @@ describe("Staking", async () => { }; const reachStakingPhaseAfterDrawing = async () => { - await randomizer.relay(rng.address, 0, ethers.utils.randomBytes(32)); + await randomizer.relay(rng.target, 0, ethers.randomBytes(32)); await sortition.passPhase(); // Generating -> Drawing await core.draw(0, 5000); await sortition.passPhase(); // Drawing -> Staking @@ -86,7 +84,7 @@ describe("Staking", async () => { it("Should transfer PNK but delay the stake increase", async () => { expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.address, PNK(1000)); + await pnk.approve(core.target, PNK(1000)); expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); await expect(core.setStake(2, PNK(3000))) .to.emit(sortition, "StakeDelayedAlreadyTransferred") @@ -95,7 +93,7 @@ describe("Staking", async () => { }); it("Should transfer some PNK out of the juror's account", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.sub(PNK(1000))); // PNK is transferred out of the juror's account + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore - PNK(1000)); // PNK is transferred out of the juror's account }); it("Should store the delayed stake for later", async () => { @@ -127,8 +125,8 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // no delayed stakes left }); @@ -190,13 +188,13 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(1); expect(await sortition.delayedStakeReadIndex()).to.be.equal(2); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 1)).to.be.equal(0); // no delayed stakes left }); it("Should withdraw some PNK", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.add(PNK(1000))); // No PNK transfer yet + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore + PNK(1000)); // No PNK transfer yet }); }); }); @@ -254,7 +252,7 @@ describe("Staking", async () => { expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(2); expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); }); }); @@ -277,8 +275,8 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // no delayed stakes left }); @@ -303,7 +301,7 @@ describe("Staking", async () => { it("Should transfer PNK but delay the stake increase", async () => { expect(await sortition.delayedStakeWriteIndex()).to.be.equal(0); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - await pnk.approve(core.address, PNK(1000)); + await pnk.approve(core.target, PNK(1000)); expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); await expect(core.setStake(2, PNK(3000))) .to.emit(sortition, "StakeDelayedAlreadyTransferred") @@ -312,7 +310,7 @@ describe("Staking", async () => { }); it("Should transfer some PNK out of the juror's account", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.sub(PNK(1000))); // PNK is transferred out of the juror's account + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore - PNK(1000)); // PNK is transferred out of the juror's account }); it("Should store the delayed stake for later", async () => { @@ -336,14 +334,14 @@ describe("Staking", async () => { }); it("Should transfer back some PNK to the juror", async () => { - expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore.add(PNK(1000))); // PNK is sent back to the juror + expect(await pnk.balanceOf(deployer)).to.be.equal(balanceBefore + PNK(1000)); // PNK is sent back to the juror }); it("Should store the delayed stake for later", async () => { expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(2); expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(1); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted expect(await sortition.delayedStakes(2)).to.be.deep.equal([deployer, 2, PNK(2000), false]); }); }); @@ -369,8 +367,8 @@ describe("Staking", async () => { ]); // stake unchanged, delayed expect(await sortition.delayedStakeWriteIndex()).to.be.equal(2); expect(await sortition.delayedStakeReadIndex()).to.be.equal(3); - expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 1st delayed stake got deleted - expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.constants.AddressZero, 0, 0, false]); // the 2nd delayed stake got deleted + expect(await sortition.delayedStakes(1)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 1st delayed stake got deleted + expect(await sortition.delayedStakes(2)).to.be.deep.equal([ethers.ZeroAddress, 0, 0, false]); // the 2nd delayed stake got deleted expect(await sortition.latestDelayedStakeIndex(deployer, 2)).to.be.equal(0); // no delayed stakes left }); @@ -387,17 +385,16 @@ describe("Staking", async () => { }); it("Should unstake from all courts", async () => { - const arbitrationCost = ETH(0.1).mul(3); - - await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], 3, [1]); // Parent - general court, Classic dispute kit + const arbitrationCost = ETH(0.1) * 3n; + await core.createCourt(1, false, PNK(1000), 1000, ETH(0.1), 3, [0, 0, 0, 0], ethers.toBeHex(3), [1]); // Parent - general court, Classic dispute kit - await pnk.approve(core.address, PNK(4000)); + await pnk.approve(core.target, PNK(4000)); await core.setStake(1, PNK(2000)); await core.setStake(2, PNK(2000)); expect(await sortition.getJurorCourtIDs(deployer)).to.be.deep.equal([1, 2]); - await core.functions["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }); + await core["createDispute(uint256,bytes)"](2, extraData, { value: arbitrationCost }); await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime await network.provider.send("evm_mine"); @@ -407,7 +404,7 @@ describe("Staking", async () => { for (let index = 0; index < lookahead; index++) { await network.provider.send("evm_mine"); } - await randomizer.relay(rng.address, 0, ethers.utils.randomBytes(32)); + await randomizer.relay(rng.target, 0, ethers.randomBytes(32)); await sortition.passPhase(); // Generating -> Drawing await core.draw(0, 5000); diff --git a/contracts/test/evidence/index.ts b/contracts/test/evidence/index.ts index cb136657c..30d79ab28 100644 --- a/contracts/test/evidence/index.ts +++ b/contracts/test/evidence/index.ts @@ -1,8 +1,8 @@ import { expect } from "chai"; import { deployments, ethers } from "hardhat"; -import { BigNumber } from "ethers"; -import { DisputeTemplateRegistry, KlerosCore, KlerosCoreRuler, ModeratedEvidenceModule } from "../../typechain-types"; -const hre = require("hardhat"); +import { ContractTransactionReceipt, EventLog } from "ethers"; +import { DisputeTemplateRegistry, KlerosCore, ModeratedEvidenceModule } from "../../typechain-types"; +import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; const Party = { None: 0, @@ -10,34 +10,36 @@ const Party = { Moderator: 2, }; -function getEmittedEvent(eventName: any, receipt: any) { - return receipt.events.find(({ event }) => event === eventName); +function getEmittedEvent(eventName: any, receipt: ContractTransactionReceipt): EventLog { + const logs = receipt.logs as Array; + const event = logs.find((log) => log.eventName === eventName); + if (event === undefined) throw new Error(`Event ${eventName} not found`); + return event; } describe("Home Evidence contract", async () => { - const arbitrationFee = 1000; + const arbitrationFee = 1000n; const appealFee = arbitrationFee; - const arbitratorExtraData = ethers.utils.defaultAbiCoder.encode( + const arbitratorExtraData = ethers.AbiCoder.defaultAbiCoder().encode( ["uint256", "uint256"], [1, 1] // courtId 1, minJurors 1 ); const appealTimeout = 100; const bondTimeout = 60 * 10; - const totalCostMultiplier = 15000; - const initialDepositMultiplier = 625; + const totalCostMultiplier = 15000n; + const initialDepositMultiplier = 625n; const disputeTemplate = '{ "disputeTemplate": "foo"}'; - const MULTIPLIER_DIVISOR = BigNumber.from(10000); - const totalCost = BigNumber.from(arbitrationFee).mul(BigNumber.from(totalCostMultiplier)).div(MULTIPLIER_DIVISOR); - const minRequiredDeposit = totalCost.mul(BigNumber.from(initialDepositMultiplier)).div(MULTIPLIER_DIVISOR); - const ZERO = BigNumber.from(0); - - let deployer; - let user1; - let user2; - let user3; - let user4; - let evidenceID; - + const MULTIPLIER_DIVISOR = 10000n; + const totalCost = (arbitrationFee * totalCostMultiplier) / MULTIPLIER_DIVISOR; + const minRequiredDeposit = (totalCost * initialDepositMultiplier) / MULTIPLIER_DIVISOR; + const ZERO = 0n; + + let deployer: HardhatEthersSigner; + let user1: HardhatEthersSigner; + let user2: HardhatEthersSigner; + let user3: HardhatEthersSigner; + let user4: HardhatEthersSigner; + let evidenceID: string; let arbitrator: KlerosCore; let evidenceModule: ModeratedEvidenceModule; let disputeTemplateRegistry: DisputeTemplateRegistry; @@ -65,9 +67,9 @@ describe("Home Evidence contract", async () => { const EvidenceModule = await ethers.getContractFactory("ModeratedEvidenceModule"); evidenceModule = await EvidenceModule.deploy( - arbitrator.address, + arbitrator.target, deployer.address, // governor - disputeTemplateRegistry.address, + disputeTemplateRegistry.target, totalCostMultiplier, initialDepositMultiplier, bondTimeout, @@ -98,13 +100,13 @@ describe("Home Evidence contract", async () => { let receipt = await tx.wait(); let lastArbitratorIndex = await evidenceModule.getCurrentArbitratorIndex(); let newArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex); - let oldArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex.sub(BigNumber.from(1))); + let oldArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex - 1n); expect(newArbitratorData.arbitratorExtraData).to.equal(oldArbitratorData.arbitratorExtraData); const disputeTemplateEvents = await disputeTemplateRegistry.queryFilter( disputeTemplateRegistry.filters.DisputeTemplate(), - receipt.blockNumber, - receipt.blockNumber + receipt?.blockNumber, + receipt?.blockNumber ); const [_templateId, _, _templateData] = disputeTemplateEvents[0].args; expect(_templateData).to.equal(newDisputeTemplate, "Wrong Template Data."); @@ -112,7 +114,7 @@ describe("Home Evidence contract", async () => { const newArbitratorExtraData = "0x86"; await evidenceModule.changeArbitratorExtraData(newArbitratorExtraData); - newArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex.add(BigNumber.from(1))); + newArbitratorData = await evidenceModule.arbitratorDataList(lastArbitratorIndex + 1n); expect(newArbitratorData.arbitratorExtraData).to.equal(newArbitratorExtraData, "Wrong extraData"); }); @@ -150,17 +152,18 @@ describe("Home Evidence contract", async () => { value: minRequiredDeposit, }); // id: 0 const receipt = await tx.wait(); - const evidenceID = ethers.utils.solidityKeccak256(["uint", "string"], [1234, newEvidence]); + if (receipt === null) throw new Error("Receipt is null"); + const evidenceID = ethers.solidityPackedKeccak256(["uint", "string"], [1234, newEvidence]); const [_arbitrator, _externalDisputeID, _party, _evidence] = getEmittedEvent("ModeratedEvidence", receipt).args; - expect(_arbitrator).to.equal(arbitrator.address, "Wrong arbitrator."); + expect(_arbitrator).to.equal(arbitrator.target, "Wrong arbitrator."); expect(_externalDisputeID).to.equal(1234, "Wrong external dispute ID."); expect(_party).to.equal(user1.address, "Wrong submitter."); expect(_evidence).to.equal(newEvidence, "Wrong evidence message."); let contributions = await evidenceModule.getContributions(evidenceID, 0, user1.address); expect(contributions[0]).to.equal(ZERO); // it's 1am and to.deep.equal() won't work, can't be bothered - expect(contributions[1]).to.equal(BigNumber.from("93")); + expect(contributions[1]).to.equal(93n); expect(contributions[2]).to.equal(ZERO); expect(contributions.length).to.equal(3); }); @@ -181,7 +184,7 @@ describe("Home Evidence contract", async () => { const newEvidence = "Irrefutable evidence"; await expect( evidenceModule.submitEvidence(1234, newEvidence, { - value: minRequiredDeposit.sub(BigNumber.from(1)), + value: minRequiredDeposit - 1n, }) ).to.be.revertedWith("Insufficient funding."); }); @@ -193,13 +196,13 @@ describe("Home Evidence contract", async () => { await evidenceModule.connect(user1).submitEvidence(1234, newEvidence, { value: minRequiredDeposit, }); - evidenceID = ethers.utils.solidityKeccak256(["uint", "string"], [1234, newEvidence]); + evidenceID = ethers.solidityPackedKeccak256(["uint", "string"], [1234, newEvidence]); }); it("Should not allow moderation after bond timeout passed.", async () => { await expect(evidenceModule.resolveModerationMarket(evidenceID)).to.be.revertedWith("Moderation still ongoing."); - await hre.ethers.provider.send("evm_increaseTime", [60 * 10]); + await ethers.provider.send("evm_increaseTime", [60 * 10]); // Moderate await expect( @@ -220,51 +223,51 @@ describe("Home Evidence contract", async () => { it("Should create dispute after moderation escalation is complete.", async () => { await evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { - value: minRequiredDeposit.mul(2), + value: minRequiredDeposit * 2n, }); let moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); let paidFees = moderationInfo.paidFees; - let depositRequired = paidFees[Party.Moderator].mul(2).sub(paidFees[Party.Submitter]); + let depositRequired = paidFees[Party.Moderator] * 2n - paidFees[Party.Submitter]; await evidenceModule.connect(user4).moderate(evidenceID, Party.Submitter, { value: depositRequired, }); moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Submitter].mul(2).sub(paidFees[Party.Moderator]); + depositRequired = paidFees[Party.Submitter] * 2n - paidFees[Party.Moderator]; await evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { value: depositRequired, }); moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Moderator].mul(2).sub(paidFees[Party.Submitter]); + depositRequired = paidFees[Party.Moderator] * 2n - paidFees[Party.Submitter]; await evidenceModule.connect(user4).moderate(evidenceID, Party.Submitter, { value: depositRequired, }); moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Submitter].mul(2).sub(paidFees[Party.Moderator]); + depositRequired = paidFees[Party.Submitter] * 2n - paidFees[Party.Moderator]; await evidenceModule.connect(user2).moderate(evidenceID, Party.Moderator, { value: depositRequired, }); moderationInfo = await evidenceModule.getModerationInfo(evidenceID, 0); paidFees = moderationInfo.paidFees; - depositRequired = paidFees[Party.Moderator].mul(2).sub(paidFees[Party.Submitter]); + depositRequired = paidFees[Party.Moderator] * 2n - paidFees[Party.Submitter]; let tx = await evidenceModule.connect(user4).moderate(evidenceID, Party.Submitter, { value: depositRequired, // Less is actually needed. Overpaid fees are reimbursed }); let receipt = await tx.wait(); - - let [_arbitrator, _arbitratorDisputeID, _externalDisputeID, _templateId, _templateUri] = getEmittedEvent( + if (receipt === null) throw new Error("Receipt is null"); + let [_arbitrator, _arbitrableDisputeID, _externalDisputeID, _templateId, _templateUri] = getEmittedEvent( "DisputeRequest", receipt ).args; - expect(_arbitrator).to.equal(arbitrator.address, "Wrong arbitrator."); - expect(_arbitratorDisputeID).to.equal(0, "Wrong dispute ID."); + expect(_arbitrator).to.equal(arbitrator.target, "Wrong arbitrator."); + expect(_arbitrableDisputeID).to.equal(0, "Wrong dispute ID."); expect(_templateId).to.equal(1, "Wrong template ID."); expect(_externalDisputeID).to.equal(evidenceID, "Wrong external dispute ID."); diff --git a/contracts/test/integration/index.ts b/contracts/test/integration/index.ts index d149d72a6..c4b008b27 100644 --- a/contracts/test/integration/index.ts +++ b/contracts/test/integration/index.ts @@ -1,7 +1,6 @@ import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; import { expect } from "chai"; import { deployments, ethers, getNamedAccounts, network } from "hardhat"; -import { BigNumber } from "ethers"; import { PNK, KlerosCore, @@ -19,10 +18,11 @@ import { /* eslint-disable no-unused-expressions */ // https://github.com/standard/standard/issues/690#issuecomment-278533482 describe("Integration tests", async () => { - const ONE_TENTH_ETH = BigNumber.from(10).pow(17); - const ONE_ETH = BigNumber.from(10).pow(18); - const ONE_HUNDRED_PNK = BigNumber.from(10).pow(20); - const ONE_THOUSAND_PNK = BigNumber.from(10).pow(21); + const ONE_TENTH_ETH = 10n ** 17n; + const ONE_ETH = 10n ** 18n; + const ONE_HUNDRED_PNK = 10n ** 20n; + const ONE_THOUSAND_PNK = 10n ** 21n; + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); const enum Period { evidence, // Evidence can be submitted. This is also when drawing has to take place. @@ -38,8 +38,17 @@ describe("Integration tests", async () => { drawing, // Jurors can be drawn. } - let deployer; - let rng, randomizer, disputeKit, pnk, core, vea, foreignGateway, arbitrable, homeGateway, sortitionModule; + let deployer: string; + let rng: RandomizerRNG; + let randomizer: RandomizerMock; + let disputeKit: DisputeKitClassic; + let pnk: PNK; + let core: KlerosCore; + let vea: VeaMock; + let foreignGateway: ForeignGateway; + let arbitrable: ArbitrableExample; + let homeGateway: HomeGateway; + let sortitionModule: SortitionModule; beforeEach("Setup", async () => { ({ deployer } = await getNamedAccounts()); @@ -60,10 +69,10 @@ describe("Integration tests", async () => { }); it("Resolves a dispute on the home chain with no appeal", async () => { - const arbitrationCost = ONE_TENTH_ETH.mul(3); + const arbitrationCost = ONE_TENTH_ETH * 3n; const [, , relayer] = await ethers.getSigners(); - await pnk.approve(core.address, ONE_THOUSAND_PNK.mul(100)); + await pnk.approve(core.target, ONE_THOUSAND_PNK * 100n); await core.setStake(1, ONE_THOUSAND_PNK); await sortitionModule.getJurorBalance(deployer, 1).then((result) => { @@ -72,9 +81,9 @@ describe("Integration tests", async () => { logJurorBalance(result); }); - await core.setStake(1, ONE_HUNDRED_PNK.mul(5)); + await core.setStake(1, ONE_HUNDRED_PNK * 5n); await sortitionModule.getJurorBalance(deployer, 1).then((result) => { - expect(result.totalStaked).to.equal(ONE_HUNDRED_PNK.mul(5)); + expect(result.totalStaked).to.equal(ONE_HUNDRED_PNK * 5n); expect(result.totalLocked).to.equal(0); logJurorBalance(result); }); @@ -86,48 +95,52 @@ describe("Integration tests", async () => { logJurorBalance(result); }); - await core.setStake(1, ONE_THOUSAND_PNK.mul(4)); + await core.setStake(1, ONE_THOUSAND_PNK * 4n); await sortitionModule.getJurorBalance(deployer, 1).then((result) => { - expect(result.totalStaked).to.equal(ONE_THOUSAND_PNK.mul(4)); + expect(result.totalStaked).to.equal(ONE_THOUSAND_PNK * 4n); expect(result.totalLocked).to.equal(0); logJurorBalance(result); }); - const tx = await arbitrable.functions["createDispute(string)"]("future of france", { + const tx = await arbitrable["createDispute(string)"]("future of france", { value: arbitrationCost, }); + const trace = await network.provider.send("debug_traceTransaction", [tx.hash]); - const [disputeId] = ethers.utils.defaultAbiCoder.decode(["uint"], `0x${trace.returnValue}`); // get returned value from createDispute() + const [disputeId] = abiCoder.decode(["uint"], ethers.getBytes(`${trace.returnValue}`)); // get returned value from createDispute() console.log("Dispute Created with disputeId: %d", disputeId); await expect(tx) .to.emit(foreignGateway, "CrossChainDisputeOutgoing") - .withArgs(anyValue, arbitrable.address, 1, 2, "0x00"); + .withArgs(anyValue, arbitrable.target, 1, 2, "0x00"); await expect(tx) .to.emit(arbitrable, "DisputeRequest") .withArgs( - foreignGateway.address, + foreignGateway.target, 1, - BigNumber.from("46619385602526556702049273755915206310773794210139929511467397410441395547901"), + 46619385602526556702049273755915206310773794210139929511467397410441395547901n, 0, "" ); - + if (tx.blockNumber === null) throw new Error("tx.blockNumber is null"); const lastBlock = await ethers.provider.getBlock(tx.blockNumber - 1); - const disputeHash = ethers.utils.solidityKeccak256( + if (lastBlock === null) throw new Error("lastBlock is null"); + const disputeHash = ethers.solidityPackedKeccak256( ["bytes", "bytes32", "uint256", "address", "uint256", "uint256", "bytes"], - [ethers.utils.toUtf8Bytes("createDispute"), lastBlock.hash, 31337, arbitrable.address, disputeId, 2, "0x00"] + [ethers.toUtf8Bytes("createDispute"), lastBlock.hash, 31337, arbitrable.target, disputeId, 2, "0x00"] ); console.log("dispute hash: ", disputeHash); - + if (lastBlock.hash === null) { + throw new Error("Block hash is null - cannot calculate dispute hash"); + } // Relayer tx const tx2 = await homeGateway .connect(relayer) - .functions["relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))"]( + ["relayCreateDispute((bytes32,uint256,address,uint256,uint256,uint256,string,uint256,bytes))"]( { - foreignBlockHash: lastBlock.hash, + foreignBlockHash: ethers.toBeHex(lastBlock.hash), foreignChainID: 31337, - foreignArbitrable: arbitrable.address, + foreignArbitrable: arbitrable.target, foreignDisputeID: disputeId, - externalDisputeID: ethers.utils.keccak256(ethers.utils.toUtf8Bytes("future of france")), + externalDisputeID: ethers.keccak256(ethers.toUtf8Bytes("future of france")), templateId: 0, templateUri: "", choices: 2, @@ -136,7 +149,7 @@ describe("Integration tests", async () => { { value: arbitrationCost } ); expect(tx2).to.emit(homeGateway, "Dispute"); - const events2 = (await tx2.wait()).events; + await tx2.wait(); await network.provider.send("evm_increaseTime", [2000]); // Wait for minStakingTime await network.provider.send("evm_mine"); @@ -146,23 +159,23 @@ describe("Integration tests", async () => { console.log("KC phase: %d", await sortitionModule.phase()); await sortitionModule.passPhase(); // Staking -> Generating - await mineBlocks(await sortitionModule.rngLookahead()); // Wait for finality + await mineBlocks(ethers.getNumber(await sortitionModule.rngLookahead())); // Wait for finality expect(await sortitionModule.phase()).to.equal(Phase.generating); console.log("KC phase: %d", await sortitionModule.phase()); - await randomizer.relay(rng.address, 0, ethers.utils.randomBytes(32)); + await randomizer.relay(rng.target, 0, ethers.randomBytes(32)); await sortitionModule.passPhase(); // Generating -> Drawing expect(await sortitionModule.phase()).to.equal(Phase.drawing); console.log("KC phase: %d", await sortitionModule.phase()); const tx3 = await core.draw(0, 1000); console.log("draw successful"); - const events3 = (await tx3.wait()).events; + await tx3.wait(); const roundInfo = await core.getRoundInfo(0, 0); expect(roundInfo.drawnJurors).deep.equal([deployer, deployer, deployer]); - expect(roundInfo.pnkAtStakePerJuror).to.equal(ONE_HUNDRED_PNK.mul(2)); + expect(roundInfo.pnkAtStakePerJuror).to.equal(ONE_HUNDRED_PNK * 2n); expect(roundInfo.totalFeesForJurors).to.equal(arbitrationCost); - expect(roundInfo.feeToken).to.equal(ethers.constants.AddressZero); + expect(roundInfo.feeToken).to.equal(ethers.ZeroAddress); expect((await core.disputes(0)).period).to.equal(Period.evidence); @@ -180,8 +193,8 @@ describe("Integration tests", async () => { const tx4 = await core.executeRuling(0, { gasLimit: 10000000, gasPrice: 5000000000 }); console.log("Ruling executed on KlerosCore"); - expect(tx4).to.emit(core, "Ruling").withArgs(homeGateway.address, 0, 0); - expect(tx4).to.emit(arbitrable, "Ruling").withArgs(foreignGateway.address, 1, 0); // The ForeignGateway starts counting disputeID from 1. + expect(tx4).to.emit(core, "Ruling").withArgs(homeGateway.target, 0, 0); + expect(tx4).to.emit(arbitrable, "Ruling").withArgs(foreignGateway.target, 1, 0); // The ForeignGateway starts counting disputeID from 1. }); const mineBlocks = async (n: number) => { @@ -192,9 +205,5 @@ describe("Integration tests", async () => { }); const logJurorBalance = async (result) => { - console.log( - "staked=%s, locked=%s", - ethers.utils.formatUnits(result.totalStaked), - ethers.utils.formatUnits(result.totalLocked) - ); + console.log("staked=%s, locked=%s", ethers.formatUnits(result.totalStaked), ethers.formatUnits(result.totalLocked)); }; diff --git a/contracts/test/proxy/index.ts b/contracts/test/proxy/index.ts index 429a75323..6793530da 100644 --- a/contracts/test/proxy/index.ts +++ b/contracts/test/proxy/index.ts @@ -68,22 +68,22 @@ describe("Upgradability", async () => { const UUPSUnsupportedProxiableUUIDFactory = await ethers.getContractFactory("UUPSUnsupportedProxiableUUID"); const uupsUnsupportedUUID = await UUPSUnsupportedProxiableUUIDFactory.deploy(); await expect( - proxy.connect(deployer).upgradeToAndCall(uupsUnsupportedUUID.address, "0x") + proxy.connect(deployer).upgradeToAndCall(uupsUnsupportedUUID.target, "0x") ).to.be.revertedWithCustomError(proxy, "UUPSUnsupportedProxiableUUID"); }); it("Should revert on upgrades to non UUPS-compliant implementation", async () => { const NonUpgradeableMockFactory = await ethers.getContractFactory("NonUpgradeableMock"); const nonUpgradeableMock = await NonUpgradeableMockFactory.deploy(); - await expect(proxy.upgradeToAndCall(nonUpgradeableMock.address, "0x")) + await expect(proxy.upgradeToAndCall(nonUpgradeableMock.target, "0x")) .to.be.revertedWithCustomError(proxy, "InvalidImplementation") - .withArgs(nonUpgradeableMock.address); + .withArgs(nonUpgradeableMock.target); }); it("Should revert if upgrade is performed directly through the implementation", async () => { // In the implementation, the `governor` storage slot is not initialized so `governor === address(0)`, which fails _authorizeUpgrade() const UUPSUpgradeableMockV2Factory = await ethers.getContractFactory("UUPSUpgradeableMockV2"); const newImplementation = await UUPSUpgradeableMockV2Factory.connect(deployer).deploy(); await expect( - implementation.connect(deployer).upgradeToAndCall(newImplementation.address, "0x") + implementation.connect(deployer).upgradeToAndCall(newImplementation.target, "0x") ).to.be.revertedWith("No privilege to upgrade"); }); }); @@ -93,15 +93,15 @@ describe("Upgradability", async () => { // Unauthorized user try to upgrade the implementation const UUPSUpgradeableMockV2Factory = await ethers.getContractFactory("UUPSUpgradeableMockV2"); let upgradable = await UUPSUpgradeableMockV2Factory.connect(user1).deploy(); - await expect(proxy.connect(user1).upgradeToAndCall(upgradable.address, "0x")).to.be.revertedWith( + await expect(proxy.connect(user1).upgradeToAndCall(upgradable.target, "0x")).to.be.revertedWith( "No privilege to upgrade" ); // Governor updates the implementation upgradable = await UUPSUpgradeableMockV2Factory.connect(deployer).deploy(); - await expect(proxy.connect(deployer).upgradeToAndCall(upgradable.address, "0x")) + await expect(proxy.connect(deployer).upgradeToAndCall(upgradable.target, "0x")) .to.emit(proxy, "Upgraded") - .withArgs(upgradable.address); + .withArgs(upgradable.target); }); }); }); diff --git a/contracts/test/rng/index.ts b/contracts/test/rng/index.ts index d046c489c..e11d4b8ff 100644 --- a/contracts/test/rng/index.ts +++ b/contracts/test/rng/index.ts @@ -1,47 +1,48 @@ import { expect } from "chai"; import { ethers, network } from "hardhat"; -import { BigNumber } from "ethers"; import { IncrementalNG, BlockHashRNG } from "../../typechain-types"; -let rng, rngFactory; const initialNg = 424242; +const abiCoder = ethers.AbiCoder.defaultAbiCoder(); describe("IncrementalNG", async () => { + let rng: IncrementalNG; + beforeEach("Setup", async () => { - rngFactory = await ethers.getContractFactory("IncrementalNG"); + const rngFactory = await ethers.getContractFactory("IncrementalNG"); rng = (await rngFactory.deploy(initialNg)) as IncrementalNG; - await rng.deployed(); }); it("Should return a number incrementing each time", async () => { - expect(await rng.callStatic.receiveRandomness(689376)).to.equal(initialNg); + expect(await rng.receiveRandomness.staticCall(689376)).to.equal(initialNg); await rng.receiveRandomness(29543); - expect(await rng.callStatic.receiveRandomness(5894382)).to.equal(initialNg + 1); + expect(await rng.receiveRandomness.staticCall(5894382)).to.equal(initialNg + 1); await rng.receiveRandomness(0); - expect(await rng.callStatic.receiveRandomness(3465)).to.equal(initialNg + 2); - await rng.receiveRandomness(BigNumber.from(2).pow(255)); - expect(await rng.callStatic.receiveRandomness(0)).to.equal(initialNg + 3); + expect(await rng.receiveRandomness.staticCall(3465)).to.equal(initialNg + 2); + await rng.receiveRandomness(2n ** 255n); + expect(await rng.receiveRandomness.staticCall(0)).to.equal(initialNg + 3); }); }); describe("BlockHashRNG", async () => { + let rng: BlockHashRNG; + beforeEach("Setup", async () => { - rngFactory = await ethers.getContractFactory("BlockHashRNG"); + const rngFactory = await ethers.getContractFactory("BlockHashRNG"); rng = (await rngFactory.deploy()) as BlockHashRNG; - await rng.deployed(); }); it("Should return a non-zero number for a block number in the past", async () => { - const tx = await rng.receiveRandomness(9876543210); + const tx = await rng.receiveRandomness(5); const trace = await network.provider.send("debug_traceTransaction", [tx.hash]); - const [rn] = ethers.utils.defaultAbiCoder.decode(["uint"], `0x${trace.returnValue}`); - expect(rn).to.equal(0); + const [rn] = abiCoder.decode(["uint"], ethers.getBytes(`${trace.returnValue}`)); + expect(rn).to.not.equal(0); }); it("Should return zero for a block number in the future", async () => { - const tx = await rng.receiveRandomness(5); + const tx = await rng.receiveRandomness(9876543210); const trace = await network.provider.send("debug_traceTransaction", [tx.hash]); - const [rn] = ethers.utils.defaultAbiCoder.decode(["uint"], `0x${trace.returnValue}`); - expect(rn).to.not.equal(0); + const [rn] = abiCoder.decode(["uint"], ethers.getBytes(`${trace.returnValue}`)); + expect(rn).to.equal(0); }); }); diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json index 932cefbdb..c30fc6c5e 100644 --- a/contracts/tsconfig.json +++ b/contracts/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "@kleros/kleros-v2-tsconfig/base18.json", + "compilerOptions": { + "resolveJsonModule": true + }, "include": [ "./src", "./scripts", diff --git a/kleros-sdk/package.json b/kleros-sdk/package.json index e70b312a2..817ff5a27 100644 --- a/kleros-sdk/package.json +++ b/kleros-sdk/package.json @@ -44,7 +44,7 @@ "vitest": "^1.1.3" }, "dependencies": { - "@reality.eth/reality-eth-lib": "^3.2.43", + "@reality.eth/reality-eth-lib": "^3.2.44", "@urql/core": "^5.0.8", "mustache": "^4.2.0", "viem": "^2.21.35", diff --git a/yarn.lock b/yarn.lock index a1757b193..6425ed733 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31,6 +31,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: 10/4cb938c4abb88a346d50cb0ea44243ab3574330c81d4f5aaaf9dfee584b96189d0faa404de0fcbef5a1b73909ea4ebc3e63d84bd23f9949e5c8d4085207a5091 + languageName: node + linkType: hard + "@adraffy/ens-normalize@npm:1.11.0": version: 1.11.0 resolution: "@adraffy/ens-normalize@npm:1.11.0" @@ -3268,13 +3275,6 @@ __metadata: languageName: node linkType: hard -"@chainsafe/as-sha256@npm:^0.3.1": - version: 0.3.1 - resolution: "@chainsafe/as-sha256@npm:0.3.1" - checksum: 10/3bae7b4bc6e307baa3cf1f9d2c75827874cd0fb458bc592656d741d374b48e71c042fe21616a506cb821487a5abfc6b92181e4b7fbf49b7370cee4df0b67d95a - languageName: node - linkType: hard - "@chainsafe/is-ip@npm:^2.0.1": version: 2.0.1 resolution: "@chainsafe/is-ip@npm:2.0.1" @@ -3291,45 +3291,6 @@ __metadata: languageName: node linkType: hard -"@chainsafe/persistent-merkle-tree@npm:^0.4.2": - version: 0.4.2 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.4.2" - dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - checksum: 10/a7e59f80be3ce0a86fe452a3c003bd159a1719ed22cae22e9841668f0eda8c35412fa16b3b150d96f583a24f430a5cc2a1bfcabafc1b9cf6e1fdb227e98c4dc7 - languageName: node - linkType: hard - -"@chainsafe/persistent-merkle-tree@npm:^0.5.0": - version: 0.5.0 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.5.0" - dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - checksum: 10/c8a37eb2fbe04d8b6f219774400dad5c50e109a9daf427883c9e33826a294a1bbd6bc759b5d6d38fefb2398443d2d880b67130eacab55b34d95d1332ac8ab680 - languageName: node - linkType: hard - -"@chainsafe/ssz@npm:^0.10.0": - version: 0.10.2 - resolution: "@chainsafe/ssz@npm:0.10.2" - dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - "@chainsafe/persistent-merkle-tree": "npm:^0.5.0" - checksum: 10/359b3a672b460ad7fee524115fe7e5d9518c62b667dfc3dc6d8be0286ebb785ce303a68070cde5b31fc2860f99fda40df4296030cb9af42554143290f542326b - languageName: node - linkType: hard - -"@chainsafe/ssz@npm:^0.9.2": - version: 0.9.4 - resolution: "@chainsafe/ssz@npm:0.9.4" - dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - "@chainsafe/persistent-merkle-tree": "npm:^0.4.2" - case: "npm:^1.6.3" - checksum: 10/2fe83d0b3ef131e14b51b88bb3343b14e7a02185fa9fd3da84b4726dbd857daaa4f7f6f4840fe3772fc1380352b1675a13b5f6153c4211c0f00ffa542b62bf2f - languageName: node - linkType: hard - "@codemirror/autocomplete@npm:^6.12.0": version: 6.12.0 resolution: "@codemirror/autocomplete@npm:6.12.0" @@ -4683,7 +4644,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.7.0": +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" dependencies: @@ -4910,7 +4871,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.1, @ethersproject/providers@npm:^5.7.2": +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.2": version: 5.7.2 resolution: "@ethersproject/providers@npm:5.7.2" dependencies: @@ -5025,7 +4986,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/units@npm:5.7.0": +"@ethersproject/units@npm:5.7.0, @ethersproject/units@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/units@npm:5.7.0" dependencies: @@ -6569,7 +6530,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kleros/kleros-sdk@workspace:kleros-sdk" dependencies: - "@reality.eth/reality-eth-lib": "npm:^3.2.43" + "@reality.eth/reality-eth-lib": "npm:^3.2.44" "@types/mustache": "npm:^4.2.5" "@urql/core": "npm:^5.0.8" "@vitest/ui": "npm:^1.1.3" @@ -6602,12 +6563,12 @@ __metadata: "@kleros/kleros-v2-tsconfig": "workspace:^" "@kleros/vea-contracts": "npm:^0.4.0" "@logtail/pino": "npm:^0.4.22" - "@nomicfoundation/hardhat-chai-matchers": "npm:^1.0.6" - "@nomiclabs/hardhat-ethers": "npm:^2.2.3" - "@nomiclabs/hardhat-solhint": "npm:^3.0.1" - "@openzeppelin/contracts": "npm:^5.0.2" - "@typechain/ethers-v5": "npm:^11.1.2" - "@typechain/hardhat": "npm:^7.0.0" + "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.8" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" + "@nomiclabs/hardhat-solhint": "npm:^4.0.1" + "@openzeppelin/contracts": "npm:^5.1.0" + "@typechain/ethers-v6": "npm:^0.5.1" + "@typechain/hardhat": "npm:^9.1.0" "@types/chai": "npm:^4.3.11" "@types/mocha": "npm:^10.0.6" "@types/node": "npm:^20.17.1" @@ -6616,24 +6577,24 @@ __metadata: chai: "npm:^4.4.1" dotenv: "npm:^16.3.1" ethereumjs-util: "npm:^7.1.5" - ethers: "npm:^5.7.2" + ethers: "npm:^6.13.4" graphql: "npm:^16.9.0" graphql-request: "npm:^6.1.0" - hardhat: "npm:2.15.0" + hardhat: "npm:2.22.15" hardhat-contract-sizer: "npm:^2.10.0" - hardhat-deploy: "npm:0.11.42" - hardhat-deploy-ethers: "npm:0.4.0-next.1" + hardhat-deploy: "npm:^0.14.0" + hardhat-deploy-ethers: "npm:^0.4.2" hardhat-deploy-tenderly: "npm:^0.2.0" hardhat-docgen: "npm:^1.3.0" - hardhat-gas-reporter: "npm:^1.0.9" - hardhat-tracer: "npm:^2.7.0" + hardhat-gas-reporter: "npm:^2.2.1" + hardhat-tracer: "npm:^3.1.0" hardhat-watcher: "npm:^2.5.0" node-fetch: "npm:^3.3.2" pino: "npm:^8.21.0" pino-pretty: "npm:^10.3.1" shelljs: "npm:^0.8.5" solhint-plugin-prettier: "npm:^0.1.0" - solidity-coverage: "npm:0.8.2" + solidity-coverage: "npm:^0.8.13" ts-node: "npm:^10.9.2" typechain: "npm:^8.3.2" typescript: "npm:^5.3.3" @@ -8072,6 +8033,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": "npm:1.3.2" + checksum: 10/94e02e9571a9fd42a3263362451849d2f54405cb3ce9fa7c45bc6b9b36dcd7d1d20e2e1e14cfded24937a13d82f1e60eefc4d7a14982ce0bc219a9fc0f51d1f9 + languageName: node + linkType: hard + "@noble/curves@npm:1.4.0": version: 1.4.0 resolution: "@noble/curves@npm:1.4.0" @@ -8081,6 +8051,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.4.2, @noble/curves@npm:^1.1.0, @noble/curves@npm:^1.4.2, @noble/curves@npm:~1.4.0": + version: 1.4.2 + resolution: "@noble/curves@npm:1.4.2" + dependencies: + "@noble/hashes": "npm:1.4.0" + checksum: 10/f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 + languageName: node + linkType: hard + "@noble/curves@npm:1.6.0, @noble/curves@npm:^1.4.0, @noble/curves@npm:^1.6.0, @noble/curves@npm:~1.6.0": version: 1.6.0 resolution: "@noble/curves@npm:1.6.0" @@ -8090,15 +8069,6 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:^1.1.0, @noble/curves@npm:^1.4.2, @noble/curves@npm:~1.4.0": - version: 1.4.2 - resolution: "@noble/curves@npm:1.4.2" - dependencies: - "@noble/hashes": "npm:1.4.0" - checksum: 10/f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 - languageName: node - linkType: hard - "@noble/ed25519@npm:^1.6.0": version: 1.7.3 resolution: "@noble/ed25519@npm:1.7.3" @@ -8127,6 +8097,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: 10/685f59d2d44d88e738114b71011d343a9f7dce9dfb0a121f1489132f9247baa60bc985e5ec6f3213d114fbd1e1168e7294644e46cbd0ce2eba37994f28eeb51b + languageName: node + linkType: hard + "@noble/hashes@npm:1.4.0, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.4.0": version: 1.4.0 resolution: "@noble/hashes@npm:1.4.0" @@ -8141,7 +8118,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.1": +"@noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.1, @noble/hashes@npm:~1.3.2": version: 1.3.3 resolution: "@noble/hashes@npm:1.3.3" checksum: 10/1025ddde4d24630e95c0818e63d2d54ee131b980fe113312d17ed7468bc18f54486ac86c907685759f8a7e13c2f9b9e83ec7b67d1cc20836f36b5e4a65bb102d @@ -8189,179 +8166,147 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-block@npm:5.0.1": - version: 5.0.1 - resolution: "@nomicfoundation/ethereumjs-block@npm:5.0.1" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.1" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - ethereum-cryptography: "npm:0.1.3" - ethers: "npm:^5.7.1" - checksum: 10/a7e646326d661fc87f064713f63e92ddf0e5ab9a916a1c38015ac94ce3d0794e97f9d669fa9159acfc8d1fce29f1371043211af3b09bdcc81cc3fdd77520aa99 +"@nomicfoundation/edr-darwin-arm64@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.6.4" + checksum: 10/9dd7ed96986f12973c715ba12031a5d91dff131baf1fffe58d7e2d1a990ea356b6192e4b74b46105f4831035262fb86f214a59b776aaa961c3a90a72d476794f languageName: node linkType: hard -"@nomicfoundation/ethereumjs-blockchain@npm:7.0.1": - version: 7.0.1 - resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.1" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.1" - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-ethash": "npm:3.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.1" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - abstract-level: "npm:^1.0.3" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - level: "npm:^8.0.0" - lru-cache: "npm:^5.1.1" - memory-level: "npm:^1.0.0" - checksum: 10/ba148ed3b7223e555b41dc73fff15ddf5ce8141746c78f06d07be29045770de19b3cfd06acdd785331a775e8fd129639017e17843c32b10a1069dee8893245f7 +"@nomicfoundation/edr-darwin-x64@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-darwin-x64@npm:0.6.4" + checksum: 10/6b283ea5382f7e0e78a89f6f4935f3eeb68744f7453ba5faddbb9e15d687d8cc096fe78b4ba0386671311200680e9ae7745436259d52a2bddb274394b9c30ca5 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-common@npm:4.0.1": - version: 4.0.1 - resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.1" - dependencies: - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - crc-32: "npm:^1.2.0" - checksum: 10/d4b842527145078d82b2b7140f97fad31644ae3e42ebd461f4b2c44d20924dbb47179f174e7dca28390b4bb8f28588ead5279c1facea8bb2047810a29bbbf1ed +"@nomicfoundation/edr-linux-arm64-gnu@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.6.4" + checksum: 10/8393b71350366f8029f19e61ebd7ec0f7588af50defab03ccb48d4f4c9b1a59d12aa2b73766cfbef9ae2bd5122798824a33b6cbbcf5fb34126e8532d9db1461b languageName: node linkType: hard -"@nomicfoundation/ethereumjs-ethash@npm:3.0.1": - version: 3.0.1 - resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.1" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - abstract-level: "npm:^1.0.3" - bigint-crypto-utils: "npm:^3.0.23" - ethereum-cryptography: "npm:0.1.3" - checksum: 10/2791b40797f7afc05419a5d6a7448d3e3b6511bac073381ae96368eb6d9b8b6ca24632b03bdc273729fb87434e2c19fb873eb9372774f3cc731ff0279d07655a +"@nomicfoundation/edr-linux-arm64-musl@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.6.4" + checksum: 10/ee9d14a0a395499e90019fdd162a8455c03035789ec7bcb3fe39d8967d3ec7edee84d5b4f30aa9d395fa4fc4faac39e8a00159ca8f8d73da794b17edec451134 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-evm@npm:2.0.1": - version: 2.0.1 - resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.1" - dependencies: - "@ethersproject/providers": "npm:^5.7.1" - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - mcl-wasm: "npm:^0.7.1" - rustbn.js: "npm:~0.2.0" - checksum: 10/40b2a6a03eae247761f856ee636d15dc91f5ab54f82fcb642d11e7cf73262eef7c7b658e95fcd4f9348586334979329068641fe21ca53e688bdac8063f53dd4f +"@nomicfoundation/edr-linux-x64-gnu@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.6.4" + checksum: 10/161678a3dc357059886e3302b5db661d85f448e5a426217b9a99179e69a8a3a5a081819344e6854ab9b82799102247331e959540f19d9cf7872155070f21e82c languageName: node linkType: hard -"@nomicfoundation/ethereumjs-rlp@npm:5.0.1": - version: 5.0.1 - resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.1" - bin: - rlp: bin/rlp - checksum: 10/2e2835997cfb617eb639f78cdf333a6a5e36e7c682ef25d5e6de8521870bd78916811eac8ce6d48dd552d01757eed631232d35d375d83747d518ac0f8011f2fe +"@nomicfoundation/edr-linux-x64-musl@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.6.4" + checksum: 10/22811238e96028a85af1e6e67cf242b9b24c9b71ee8883d87cf1624a936c5e812b7859e7ccfd6aa4b3f0df7d55e13f215774a2d913c3f546618a0d6871640e5b languageName: node linkType: hard -"@nomicfoundation/ethereumjs-statemanager@npm:2.0.1": - version: 2.0.1 - resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.1" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - ethers: "npm:^5.7.1" - js-sdsl: "npm:^4.1.4" - checksum: 10/37254bb3abcd0592c4b6202de86862134d0ecbe1501792cfef65639615fdae867020826dcc2e60faf6dbf979e58cd2a519ac345b8f3361ecffb6a2d2d24014c1 +"@nomicfoundation/edr-win32-x64-msvc@npm:0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.6.4" + checksum: 10/509a8dd7c82a401f8c3e63a8621d602fd4398f3f0701109335756fb81795a575df7d6386126dcffee6659f50b0afc68b36702ab0fa7febb83bded82260629bd0 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-trie@npm:6.0.1": - version: 6.0.1 - resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.1" +"@nomicfoundation/edr@npm:^0.6.4": + version: 0.6.4 + resolution: "@nomicfoundation/edr@npm:0.6.4" dependencies: - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - "@types/readable-stream": "npm:^2.3.13" - ethereum-cryptography: "npm:0.1.3" - readable-stream: "npm:^3.6.0" - checksum: 10/cd34c9f785dffb08cc8d422ef5a68e2deba239558c2a68d00f84826dbb011aa944df3c22945ebf5e39be57505eb58f59693cd52e62f32c8252e66271e59d6688 + "@nomicfoundation/edr-darwin-arm64": "npm:0.6.4" + "@nomicfoundation/edr-darwin-x64": "npm:0.6.4" + "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.6.4" + "@nomicfoundation/edr-linux-arm64-musl": "npm:0.6.4" + "@nomicfoundation/edr-linux-x64-gnu": "npm:0.6.4" + "@nomicfoundation/edr-linux-x64-musl": "npm:0.6.4" + "@nomicfoundation/edr-win32-x64-msvc": "npm:0.6.4" + checksum: 10/9bdcd316bcc8c5f0e137b4234e66455f427bc3046dc8f34b76aeed1e96eeedbe6a2c548970077ec4bd182d86ba630dfdcac6bce4b8d9a465b8f303c6a3aa6971 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-tx@npm:5.0.1": - version: 5.0.1 - resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.1" +"@nomicfoundation/ethereumjs-common@npm:4.0.4": + version: 4.0.4 + resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.4" dependencies: - "@chainsafe/ssz": "npm:^0.9.2" - "@ethersproject/providers": "npm:^5.7.2" - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - ethereum-cryptography: "npm:0.1.3" - checksum: 10/5b9f117136ad4756089d06061f407a1b48603ace61584716e2bbee53889d6ad45b4b3da6eeaf1b111ca5b94b8f6865a11614266caff1a67141fbca5f06534a91 + "@nomicfoundation/ethereumjs-util": "npm:9.0.4" + checksum: 10/1daaede087c5dee92cb1e5309a548da2d64484722b917eccda4118d627293b61f705a990075f4d7f0f350100ed79396b3a25e7ea67824242d36d23716fe75e97 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-util@npm:9.0.1": - version: 9.0.1 - resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.1" +"@nomicfoundation/ethereumjs-rlp@npm:5.0.4": + version: 5.0.4 + resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.4" + bin: + rlp: bin/rlp.cjs + checksum: 10/39fb26340bb2643a66c642315aa7b6fcfbdbddddeee18b4b683b77aa93b8a031bc86d4d4144368e5dd20499dc96b8b27751c6a285ff34e7a9969b530b306ce8c + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-tx@npm:5.0.4": + version: 5.0.4 + resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.4" dependencies: - "@chainsafe/ssz": "npm:^0.10.0" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" + "@nomicfoundation/ethereumjs-common": "npm:4.0.4" + "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" + "@nomicfoundation/ethereumjs-util": "npm:9.0.4" ethereum-cryptography: "npm:0.1.3" - checksum: 10/71eae07fd091dcd655d9ad04b6d5cdeb89c7aa3862857e6073146134d65a46e1d3dec1befcc9d8dda02c675fe2eef944fecc870439cd907ffb00b0319d843db5 + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + checksum: 10/5e84de14fa464501c5c60ac6519f536d39ebc52c4d1fb79c63a66ea86f992bde4f338b0b0fdd2e5bc811ebd984e8ff41e4205e47d30001bad5b45370568bc41c languageName: node linkType: hard -"@nomicfoundation/ethereumjs-vm@npm:7.0.1": - version: 7.0.1 - resolution: "@nomicfoundation/ethereumjs-vm@npm:7.0.1" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.1" - "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.1" - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-evm": "npm:2.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.1" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.1" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - debug: "npm:^4.3.3" +"@nomicfoundation/ethereumjs-util@npm:9.0.4": + version: 9.0.4 + resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.4" + dependencies: + "@nomicfoundation/ethereumjs-rlp": "npm:5.0.4" ethereum-cryptography: "npm:0.1.3" - mcl-wasm: "npm:^0.7.1" - rustbn.js: "npm:~0.2.0" - checksum: 10/7180c9c860f8b42e7dab80482b8ea346ff0dad64cec19fa50feaebef08c646c689c4176906ce49208a55d831309f96e91e7741623432aeacb686231470d32380 + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + checksum: 10/891806c7edda29c7b3f61551949ff0c1fa5f4e122fba84878bf27362a9e058768fd01194dc0e031de2e523c30ecbeb22e6841b8ab3772c8567fef4af6480872d languageName: node linkType: hard -"@nomicfoundation/hardhat-chai-matchers@npm:^1.0.6": - version: 1.0.6 - resolution: "@nomicfoundation/hardhat-chai-matchers@npm:1.0.6" +"@nomicfoundation/hardhat-chai-matchers@npm:^2.0.8": + version: 2.0.8 + resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.8" dependencies: - "@ethersproject/abi": "npm:^5.1.2" "@types/chai-as-promised": "npm:^7.1.3" chai-as-promised: "npm:^7.1.1" deep-eql: "npm:^4.0.1" ordinal: "npm:^1.0.3" peerDependencies: - "@nomiclabs/hardhat-ethers": ^2.0.0 + "@nomicfoundation/hardhat-ethers": ^3.0.0 chai: ^4.2.0 - ethers: ^5.0.0 + ethers: ^6.1.0 hardhat: ^2.9.4 - checksum: 10/a7d372c285df0a25cba3f3748773ccbe867dd08e6f7ed75e00a0e0cc8b55b4b0ff1af1da88168678c19eed2cdecda67bcadab7a2e98fed06bf4d0dd60af86438 + checksum: 10/1e40d2ae1627d9c62c90e85f60d38a24768198b3f525659f958c44d395d751876be13198e20ffd2b3336b8650225652610f0c36f0e376c8ee6b0854bcd0f6bb0 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-ethers@npm:^3.0.8": + version: 3.0.8 + resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.8" + dependencies: + debug: "npm:^4.1.1" + lodash.isequal: "npm:^4.5.0" + peerDependencies: + ethers: ^6.1.0 + hardhat: ^2.0.0 + checksum: 10/5fe3d1bbf598ad232040ed3df8990c325098ade46bc00e389b9f1c51e0eafad6bab66f373e9814cdbeaede62c43182956def68e71e40142b5651d88402c4f294 languageName: node linkType: hard @@ -8474,24 +8419,14 @@ __metadata: languageName: node linkType: hard -"@nomiclabs/hardhat-ethers@npm:^2.2.3": - version: 2.2.3 - resolution: "@nomiclabs/hardhat-ethers@npm:2.2.3" - peerDependencies: - ethers: ^5.0.0 - hardhat: ^2.0.0 - checksum: 10/bd239a00d3384b6dfefbf2444bacd7fdaccc9df40efac2255b4f8314f0414416e65296945bbe6debec65479a3f8a5f9d1e69aa66a39d1852e5ac1d690c3b458a - languageName: node - linkType: hard - -"@nomiclabs/hardhat-solhint@npm:^3.0.1": - version: 3.0.1 - resolution: "@nomiclabs/hardhat-solhint@npm:3.0.1" +"@nomiclabs/hardhat-solhint@npm:^4.0.1": + version: 4.0.1 + resolution: "@nomiclabs/hardhat-solhint@npm:4.0.1" dependencies: - solhint: "npm:^3.4.0" + solhint: "npm:^5.0.2" peerDependencies: hardhat: ^2.0.0 - checksum: 10/661a3e514cc2aa0d00f058262a9b6a07f0380ec4f973030f16a21d53b46f8748b42bfb4aa925e9740f3e2839192d89b0e558e3af17001ab2d3490c924362571c + checksum: 10/81f2f804d2e6e6d3eba1ad2cfdcbf2cb0a569adbfdbcf3f5963df192b1ea509fc2a43d0d1f1611d0e702d10b925cb71e8511d0324296d713763ba0707758436a languageName: node linkType: hard @@ -8730,10 +8665,10 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/contracts@npm:^5.0.2": - version: 5.0.2 - resolution: "@openzeppelin/contracts@npm:5.0.2" - checksum: 10/938ebffbdade7dc59ea3df5b562c0e457bbefde9d82be8fa2acfd11da887df11653ac07922f41746b80cdbc106430e1e6978ce244fe99b00a7d9dc1418fc7670 +"@openzeppelin/contracts@npm:^5.1.0": + version: 5.1.0 + resolution: "@openzeppelin/contracts@npm:5.1.0" + checksum: 10/c3954d09b206af23a98d352177b49e4b2796a818ee01f082b223d54e6d394b3741a4ea6012570359d2a705d5e932a7b906ee38b64e3987ababfa73bcaa5a4805 languageName: node linkType: hard @@ -8981,6 +8916,33 @@ __metadata: languageName: node linkType: hard +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: 10/fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: "npm:4.2.10" + checksum: 10/d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.1.0": + version: 2.3.1 + resolution: "@pnpm/npm-conf@npm:2.3.1" + dependencies: + "@pnpm/config.env-replace": "npm:^1.1.0" + "@pnpm/network.ca-file": "npm:^1.0.1" + config-chain: "npm:^1.1.11" + checksum: 10/44fbb0b166eee3e3631ef0e92b1bed6489aa6975e3e722c16577cc0181b81374f5ae90c6e4da183c8160f996e6b4863325525b00542f42d1b757b51ef62bc4e7 + languageName: node + linkType: hard + "@polka/url@npm:^1.0.0-next.24": version: 1.0.0-next.24 resolution: "@polka/url@npm:1.0.0-next.24" @@ -9088,20 +9050,20 @@ __metadata: languageName: node linkType: hard -"@reality.eth/contracts@npm:^3.0.59": - version: 3.0.59 - resolution: "@reality.eth/contracts@npm:3.0.59" +"@reality.eth/contracts@npm:^3.0.60": + version: 3.0.60 + resolution: "@reality.eth/contracts@npm:3.0.60" dependencies: ethers: "npm:^5.6.8" - checksum: 10/0490f157b8f309ff9819010754781c78e2512a106a02439f69c772ba83e741cfa2196885041486aa734b396fe6a32670476210c8556e0969e79b8f99be5c4615 + checksum: 10/5a90340e20adf214f1f2c242e852fb74c48a10094db2be41bddfd403c8fce5c7d102fbf94a1a9ae76022f1dffae371db5213854e080a45b17182f6ce5138446d languageName: node linkType: hard -"@reality.eth/reality-eth-lib@npm:^3.2.43": - version: 3.2.43 - resolution: "@reality.eth/reality-eth-lib@npm:3.2.43" +"@reality.eth/reality-eth-lib@npm:^3.2.44": + version: 3.2.44 + resolution: "@reality.eth/reality-eth-lib@npm:3.2.44" dependencies: - "@reality.eth/contracts": "npm:^3.0.59" + "@reality.eth/contracts": "npm:^3.0.60" bignumber.js: "npm:^7.2.1" bn.js: "npm:^5.2.1" ethereumjs-abi: "npm:^0.6.5" @@ -9109,7 +9071,7 @@ __metadata: isomorphic-dompurify: "npm:^0.23.0" marked: "npm:^4.1.1" sprintf-js: "npm:^1.1.1" - checksum: 10/faf3a250e07a58f5ab6bd8468d2dfa216beda821fdb2491435c40bb909c15d7090c68c4194383666346cd62d9c950fa355d2c0ca4fae02f15fe3cb78234a599a + checksum: 10/4d63c9dff6d0f8088f6fd1a2fc09ca1a3aa1ebc476fea3788b8b28a65111680b7283258dc55d9e93ec28dfb28972b0e5fc2906627fb1620996c88e2b22d2ffe9 languageName: node linkType: hard @@ -9523,6 +9485,13 @@ __metadata: languageName: node linkType: hard +"@scure/base@npm:~1.1.2, @scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8": + version: 1.1.9 + resolution: "@scure/base@npm:1.1.9" + checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb + languageName: node + linkType: hard + "@scure/base@npm:~1.1.6": version: 1.1.7 resolution: "@scure/base@npm:1.1.7" @@ -9530,13 +9499,6 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8": - version: 1.1.9 - resolution: "@scure/base@npm:1.1.9" - checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb - languageName: node - linkType: hard - "@scure/bip32@npm:1.1.5": version: 1.1.5 resolution: "@scure/bip32@npm:1.1.5" @@ -9559,6 +9521,17 @@ __metadata: languageName: node linkType: hard +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": "npm:~1.2.0" + "@noble/hashes": "npm:~1.3.2" + "@scure/base": "npm:~1.1.2" + checksum: 10/b90da28dfe75519496a85c97e77c9443734873910f32b8557762910a5c4e642290a462b0ed14fa42e0efed6acb9a7f6155ad5cb5d38d4ff87eb2de4760eb32a4 + languageName: node + linkType: hard + "@scure/bip32@npm:1.4.0": version: 1.4.0 resolution: "@scure/bip32@npm:1.4.0" @@ -9832,6 +9805,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^5.2.0": + version: 5.6.0 + resolution: "@sindresorhus/is@npm:5.6.0" + checksum: 10/b077c325acec98e30f7d86df158aaba2e7af2acb9bb6a00fda4b91578539fbff4ecebe9b934e24fec0e6950de3089d89d79ec02d9062476b20ce185be0e01bd6 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" @@ -10057,24 +10037,6 @@ __metadata: languageName: node linkType: hard -"@solidity-parser/parser@npm:^0.14.0, @solidity-parser/parser@npm:^0.14.1": - version: 0.14.5 - resolution: "@solidity-parser/parser@npm:0.14.5" - dependencies: - antlr4ts: "npm:^0.5.0-alpha.4" - checksum: 10/5ceb5601cf0b65cfcea86adf3efa3918cc377fff50cec361a3a0987de6c1ec79c5b5c4be8cc67df55d5a26f3243b35813a71f3d2e26f258fb38ce8158be97ea6 - languageName: node - linkType: hard - -"@solidity-parser/parser@npm:^0.16.0": - version: 0.16.0 - resolution: "@solidity-parser/parser@npm:0.16.0" - dependencies: - antlr4ts: "npm:^0.5.0-alpha.4" - checksum: 10/790b7293ccc0c28cb9369148b1a9ff2d17ced144852f76d531f6ac6cf9e122c66833edcf9e54dbafdcbc1f4e5b6c96a76887e8b46e7fb1226a7e6c8c038832b1 - languageName: node - linkType: hard - "@solidity-parser/parser@npm:^0.17.0": version: 0.17.0 resolution: "@solidity-parser/parser@npm:0.17.0" @@ -10082,6 +10044,13 @@ __metadata: languageName: node linkType: hard +"@solidity-parser/parser@npm:^0.18.0": + version: 0.18.0 + resolution: "@solidity-parser/parser@npm:0.18.0" + checksum: 10/3b600b584f49bd84d6d27aeeb453c49c279df49324e104bda00d12cd3b26f18cb6230ff63db6a0ba1f383868620d318b15b7417a92aa8c580099449adaa13d76 + languageName: node + linkType: hard + "@sphinxxxx/color-conversion@npm:^2.2.2": version: 2.2.2 resolution: "@sphinxxxx/color-conversion@npm:2.2.2" @@ -10602,6 +10571,15 @@ __metadata: languageName: node linkType: hard +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: "npm:^2.0.1" + checksum: 10/fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 + languageName: node + linkType: hard + "@tanstack/query-core@npm:5.40.0": version: 5.40.0 resolution: "@tanstack/query-core@npm:5.40.0" @@ -10720,35 +10698,31 @@ __metadata: languageName: node linkType: hard -"@typechain/ethers-v5@npm:^11.1.2": - version: 11.1.2 - resolution: "@typechain/ethers-v5@npm:11.1.2" +"@typechain/ethers-v6@npm:^0.5.1": + version: 0.5.1 + resolution: "@typechain/ethers-v6@npm:0.5.1" dependencies: lodash: "npm:^4.17.15" ts-essentials: "npm:^7.0.1" peerDependencies: - "@ethersproject/abi": ^5.0.0 - "@ethersproject/providers": ^5.0.0 - ethers: ^5.1.3 + ethers: 6.x typechain: ^8.3.2 - typescript: ">=4.3.0" - checksum: 10/0d992825f6462d617e7de384488c70d73a14dac3852ab0c299c2811183965457346b5a151f9f2fa367cc3668e950d070d5c1337bc13d7112d510d8fc35f2b30f + typescript: ">=4.7.0" + checksum: 10/51dd8be3548fe3c061d2a5372beb9214e767e2b69f10c12424b699bba7ff409a13c4bdff2e513ef49046b51153db56489752205541be8fb1775f3b9ad884b85b languageName: node linkType: hard -"@typechain/hardhat@npm:^7.0.0": - version: 7.0.0 - resolution: "@typechain/hardhat@npm:7.0.0" +"@typechain/hardhat@npm:^9.1.0": + version: 9.1.0 + resolution: "@typechain/hardhat@npm:9.1.0" dependencies: fs-extra: "npm:^9.1.0" peerDependencies: - "@ethersproject/abi": ^5.4.7 - "@ethersproject/providers": ^5.4.7 - "@typechain/ethers-v5": ^11.0.0 - ethers: ^5.4.7 + "@typechain/ethers-v6": ^0.5.1 + ethers: ^6.1.0 hardhat: ^2.9.9 - typechain: ^8.2.0 - checksum: 10/c60d11c5d7e3f6048f3df98be3cbd16519d262fd2f3c2ed0bf9a9cec2481658bf15b32c5dd4922aeb982179df81794265b40556f41d0524c0759cc05d986ac25 + typechain: ^8.3.2 + checksum: 10/1f59d8243af020905f3cdb96125cf9fcad33bd16f919d5e07762c63e0220bccb658abf59b0ad74be784a3387c0a6b0262612fa1adeb9f6c99061a6abaa6afc53 languageName: node linkType: hard @@ -11069,6 +11043,13 @@ __metadata: languageName: node linkType: hard +"@types/http-cache-semantics@npm:^4.0.2": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 10/a59566cff646025a5de396d6b3f44a39ab6a74f2ed8150692e0f31cc52f3661a68b04afe3166ebe0d566bd3259cb18522f46e949576d5204781cd6452b7fe0c5 + languageName: node + linkType: hard + "@types/http-proxy@npm:^1.17.8": version: 1.17.11 resolution: "@types/http-proxy@npm:1.17.11" @@ -11247,6 +11228,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:22.7.5": + version: 22.7.5 + resolution: "@types/node@npm:22.7.5" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10/e8ba102f8c1aa7623787d625389be68d64e54fcbb76d41f6c2c64e8cf4c9f4a2370e7ef5e5f1732f3c57529d3d26afdcb2edc0101c5e413a79081449825c57ac + languageName: node + linkType: hard + "@types/node@npm:^10.0.3": version: 10.17.60 resolution: "@types/node@npm:10.17.60" @@ -11407,16 +11397,6 @@ __metadata: languageName: node linkType: hard -"@types/readable-stream@npm:^2.3.13": - version: 2.3.15 - resolution: "@types/readable-stream@npm:2.3.15" - dependencies: - "@types/node": "npm:*" - safe-buffer: "npm:~5.1.1" - checksum: 10/49b51e56f9cc401cb31c72973a7565ef4208d7e2465a789843104ec0fcbe609727b0b5bf4682fbec773c7f7bd14858e5dba739fd85e14d8a85e41185d65984d3 - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -13362,6 +13342,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:1.0.0": + version: 1.0.0 + resolution: "abitype@npm:1.0.0" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: 10/38c8d965c75c031854385f1c14da0410e271f1a8255332869a77a1ee836c4607420522c1f0077716c7ad7c4091f53c1b2681ed1d30b5161d1424fdb5a480f104 + languageName: node + linkType: hard + "abitype@npm:1.0.5": version: 1.0.5 resolution: "abitype@npm:1.0.5" @@ -13416,21 +13411,6 @@ __metadata: languageName: node linkType: hard -"abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": - version: 1.0.3 - resolution: "abstract-level@npm:1.0.3" - dependencies: - buffer: "npm:^6.0.3" - catering: "npm:^2.1.0" - is-buffer: "npm:^2.0.5" - level-supports: "npm:^4.0.0" - level-transcoder: "npm:^1.0.1" - module-error: "npm:^1.0.1" - queue-microtask: "npm:^1.2.3" - checksum: 10/a6872010a7be78240e1e5bf24b202950adbbd2a382970e17cc661ac8a73663327c241dc25f2863e599f3f5b24d0c3c357b5af4092c4ce34511bae1c09283a278 - languageName: node - linkType: hard - "accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" @@ -13743,10 +13723,12 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:3.2.3": - version: 3.2.3 - resolution: "ansi-colors@npm:3.2.3" - checksum: 10/9465fcf0feca5001201013091036397537a7e196e04efca48aa1e7f4a986176778a33924d506e2b9af74321be9fb0649ab0c11be168d15aae5459feff681d665 +"ansi-align@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: "npm:^4.1.0" + checksum: 10/4c7e8b6a10eaf18874ecee964b5db62ac86d0b9266ad4987b3a1efcb5d11a9e12c881ee40d14951833135a8966f10a3efe43f9c78286a6e632f53d85ad28b9c0 languageName: node linkType: hard @@ -13840,7 +13822,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -13879,19 +13861,10 @@ __metadata: languageName: node linkType: hard -"antlr4@npm:^4.11.0": - version: 4.13.0 - resolution: "antlr4@npm:4.13.0" - checksum: 10/6566fa50b6c2adf5e31f03e32d27b8eb25c53e4e62d50a4bdb86ed2d8c7c9342ab4cce8b1f11ca0aa809ec3a7ac66a381e55f217da097f741707e66c675ececd - languageName: node - linkType: hard - -"antlr4ts@npm:^0.5.0-alpha.4": - version: 0.5.0-dev - resolution: "antlr4ts@npm:0.5.0-dev" - dependencies: - source-map-support: "npm:^0.5.16" - checksum: 10/a95a061fb2fc9e2a0cd065e112fbc3fb899f408feace51249367051711b2255488b4e89b5912a706080f807c72484499e0f61f6a782391ecaba39c556d479f55 +"antlr4@npm:^4.13.1-patch-1": + version: 4.13.2 + resolution: "antlr4@npm:4.13.2" + checksum: 10/23ab4742ec937adaaf20d13228c8cca58638e1aafeb28919bdeb4860776a403d0c7eb85a3f07fadc27fc03f773eed6bcc82bd8369b9d0e258e6502ba514cf87e languageName: node linkType: hard @@ -13926,7 +13899,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -14145,13 +14118,6 @@ __metadata: languageName: node linkType: hard -"array-uniq@npm:1.0.3": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 10/1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e - languageName: node - linkType: hard - "array.prototype.findlast@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" @@ -14599,6 +14565,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.6.7": + version: 1.7.7 + resolution: "axios@npm:1.7.7" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10/7f875ea13b9298cd7b40fd09985209f7a38d38321f1118c701520939de2f113c4ba137832fe8e3f811f99a38e12c8225481011023209a77b0c0641270e20cde1 + languageName: node + linkType: hard + "axobject-query@npm:^3.1.1": version: 3.2.1 resolution: "axobject-query@npm:3.2.1" @@ -15003,13 +14980,6 @@ __metadata: languageName: node linkType: hard -"bigint-crypto-utils@npm:^3.0.23": - version: 3.2.2 - resolution: "bigint-crypto-utils@npm:3.2.2" - checksum: 10/e7a3ccd915003f755da94ec709ca42a0aa58e018ff4af2c3381c7ba75b7fab569b7e143bc8ebe7c0ad315713d4987ac076035fcd8223c9fc6dcfba9363f200c4 - languageName: node - linkType: hard - "bignumber.js@npm:9.1.2": version: 9.1.2 resolution: "bignumber.js@npm:9.1.2" @@ -15211,6 +15181,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^5.1.2": + version: 5.1.2 + resolution: "boxen@npm:5.1.2" + dependencies: + ansi-align: "npm:^3.0.0" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.1.0" + cli-boxes: "npm:^2.2.1" + string-width: "npm:^4.2.2" + type-fest: "npm:^0.20.2" + widest-line: "npm:^3.1.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10/bc3d3d88d77dc8cabb0811844acdbd4805e8ca8011222345330817737042bf6f86d93eb74a3f7e0cab634e64ef69db03cf52b480761ed90a965de0c8ff1bea8c + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -15246,15 +15232,10 @@ __metadata: languageName: node linkType: hard -"browser-level@npm:^1.0.1": - version: 1.0.1 - resolution: "browser-level@npm:1.0.1" - dependencies: - abstract-level: "npm:^1.0.2" - catering: "npm:^2.1.1" - module-error: "npm:^1.0.2" - run-parallel-limit: "npm:^1.1.0" - checksum: 10/e712569111782da76853fecf648b43ff878ff2301c2830a9e7399685b646824a85f304dea5f023e02ee41a63a972f9aad734bd411069095adc9c79784fc649a5 +"brotli-wasm@npm:^2.0.1": + version: 2.0.1 + resolution: "brotli-wasm@npm:2.0.1" + checksum: 10/39789548c9b81f735a7ab87a6caa150babbd85148a8528610d050449c9802afb78b9197de25a1f613c8e1f945d4d0200cb473327a89f4b65cb9ee2b715d64292 languageName: node linkType: hard @@ -15618,6 +15599,28 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^7.0.0": + version: 7.0.0 + resolution: "cacheable-lookup@npm:7.0.0" + checksum: 10/69ea78cd9f16ad38120372e71ba98b64acecd95bbcbcdad811f857dc192bad81ace021f8def012ce19178583db8d46afd1a00b3e8c88527e978e049edbc23252 + languageName: node + linkType: hard + +"cacheable-request@npm:^10.2.8": + version: 10.2.14 + resolution: "cacheable-request@npm:10.2.14" + dependencies: + "@types/http-cache-semantics": "npm:^4.0.2" + get-stream: "npm:^6.0.1" + http-cache-semantics: "npm:^4.1.1" + keyv: "npm:^4.5.3" + mimic-response: "npm:^4.0.0" + normalize-url: "npm:^8.0.0" + responselike: "npm:^3.0.0" + checksum: 10/102f454ac68eb66f99a709c5cf65e90ed89f1b9269752578d5a08590b3986c3ea47a5d9dff208fe7b65855a29da129a2f23321b88490106898e0ba70b807c912 + languageName: node + linkType: hard + "cacheable-request@npm:^7.0.1": version: 7.0.4 resolution: "cacheable-request@npm:7.0.4" @@ -15805,13 +15808,6 @@ __metadata: languageName: node linkType: hard -"case@npm:^1.6.3": - version: 1.6.3 - resolution: "case@npm:1.6.3" - checksum: 10/2fc1df75bbb4118339e06141b9a54aba95cc62460ac92730290144fbec6b6a04f5bf7abf6a6486a1338f5821bd184402f216cec8cea0472451759c27e20fc332 - languageName: node - linkType: hard - "caseless@npm:^0.12.0, caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -15819,13 +15815,6 @@ __metadata: languageName: node linkType: hard -"catering@npm:^2.1.0, catering@npm:^2.1.1": - version: 2.1.1 - resolution: "catering@npm:2.1.1" - checksum: 10/4669c9fa5f3a73273535fb458a964d8aba12dc5102d8487049cf03623bef3cdff4b5d9f92ff04c00f1001057a7cc7df6e700752ac622c2a7baf7bcff34166683 - languageName: node - linkType: hard - "cborg@npm:^1.5.4, cborg@npm:^1.6.0, cborg@npm:^1.9.0": version: 1.10.2 resolution: "cborg@npm:1.10.2" @@ -15897,6 +15886,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4.1.2, chalk@npm:^4, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 + languageName: node + linkType: hard + "chalk@npm:5.3.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -15928,16 +15927,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10/cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 - languageName: node - linkType: hard - "chalk@npm:^5.0.0": version: 5.2.0 resolution: "chalk@npm:5.2.0" @@ -16074,26 +16063,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:3.3.0": - version: 3.3.0 - resolution: "chokidar@npm:3.3.0" - dependencies: - anymatch: "npm:~3.1.1" - braces: "npm:~3.0.2" - fsevents: "npm:~2.1.1" - glob-parent: "npm:~5.1.0" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.2.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10/57c5c20fd1e46cf32f626f907b0a3e0dd584b2939cd8ca67cbfb255e334355f2781674d4148e2c92d045b2722fcb50178e50e57307b511f86d1e90098532d962 - languageName: node - linkType: hard - -"chokidar@npm:3.5.3, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": +"chokidar@npm:3.5.3, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: @@ -16112,6 +16082,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.0": + version: 4.0.1 + resolution: "chokidar@npm:4.0.1" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10/62749d2173a60cc5632d6c6e0b7024f33aadce47b06d02e55ad03c7b8daaaf2fc85d4296c047473d04387fd992dab9384cc5263c70a3dc3018b7ebecfb5b5217 + languageName: node + linkType: hard + "chownr@npm:^1.0.1, chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -16173,20 +16152,6 @@ __metadata: languageName: node linkType: hard -"classic-level@npm:^1.2.0": - version: 1.3.0 - resolution: "classic-level@npm:1.3.0" - dependencies: - abstract-level: "npm:^1.0.2" - catering: "npm:^2.1.0" - module-error: "npm:^1.0.1" - napi-macros: "npm:^2.2.2" - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 10/b2d07a5932a09bdf0a5b27e662154888c85edd59d75816c7e60960dacadbc7553daa9f5efb58d2575b3eae0540d504ef71d49f438744366626762a0ddefe5cc5 - languageName: node - linkType: hard - "classnames@npm:2.x, classnames@npm:^2.2.1, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1": version: 2.3.2 resolution: "classnames@npm:2.3.2" @@ -16219,6 +16184,13 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^2.2.1": + version: 2.2.1 + resolution: "cli-boxes@npm:2.2.1" + checksum: 10/be79f8ec23a558b49e01311b39a1ea01243ecee30539c880cf14bf518a12e223ef40c57ead0cb44f509bffdffc5c129c746cd50d863ab879385370112af4f585 + languageName: node + linkType: hard + "cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": version: 2.1.0 resolution: "cli-cursor@npm:2.1.0" @@ -16276,30 +16248,29 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:^0.5.0": - version: 0.5.1 - resolution: "cli-table3@npm:0.5.1" +"cli-table3@npm:^0.6.0": + version: 0.6.3 + resolution: "cli-table3@npm:0.6.3" dependencies: - colors: "npm:^1.1.2" - object-assign: "npm:^4.1.0" - string-width: "npm:^2.1.1" + "@colors/colors": "npm:1.5.0" + string-width: "npm:^4.2.0" dependenciesMeta: - colors: + "@colors/colors": optional: true - checksum: 10/5b4aaa81943c9030e3366aaf20cc4be0792397d82dea3a1660e80ce49edded4dcc722f9bf272354061c5bfa3f4236ad2fdc86bc7bb0bbf7e4b8e8d3b418b955a + checksum: 10/8d82b75be7edc7febb1283dc49582a521536527cba80af62a2e4522a0ee39c252886a1a2f02d05ae9d753204dbcffeb3a40d1358ee10dccd7fe8d935cfad3f85 languageName: node linkType: hard -"cli-table3@npm:^0.6.0": - version: 0.6.3 - resolution: "cli-table3@npm:0.6.3" +"cli-table3@npm:^0.6.3": + version: 0.6.5 + resolution: "cli-table3@npm:0.6.5" dependencies: "@colors/colors": "npm:1.5.0" string-width: "npm:^4.2.0" dependenciesMeta: "@colors/colors": optional: true - checksum: 10/8d82b75be7edc7febb1283dc49582a521536527cba80af62a2e4522a0ee39c252886a1a2f02d05ae9d753204dbcffeb3a40d1358ee10dccd7fe8d935cfad3f85 + checksum: 10/8dca71256f6f1367bab84c33add3f957367c7c43750a9828a4212ebd31b8df76bd7419d386e3391ac7419698a8540c25f1a474584028f35b170841cde2e055c5 languageName: node linkType: hard @@ -16365,17 +16336,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^5.0.0": - version: 5.0.0 - resolution: "cliui@npm:5.0.0" - dependencies: - string-width: "npm:^3.1.0" - strip-ansi: "npm:^5.2.0" - wrap-ansi: "npm:^5.1.0" - checksum: 10/381264fcc3c8316b77b378ce5471ff9a1974d1f6217e0be8f4f09788482b3e6f7c0894eb21e0a86eab4ce0c68426653a407226dd51997306cb87f734776f5fdc - languageName: node - linkType: hard - "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -16625,13 +16585,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:3.0.2": - version: 3.0.2 - resolution: "commander@npm:3.0.2" - checksum: 10/f42053569f5954498246783465b39139917a51284bf3361574c9f731fea27a4bd6452dbb1755cc2d923c7b47dfea67930037c7b7e862288f2c397cec9a74da87 - languageName: node - linkType: hard - "commander@npm:^10.0.0": version: 10.0.1 resolution: "commander@npm:10.0.1" @@ -16755,6 +16708,16 @@ __metadata: languageName: node linkType: hard +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 10/83d22cabf709e7669f6870021c4d552e4fc02e9682702b726be94295f42ce76cfed00f70b2910ce3d6c9465d9758e191e28ad2e72ff4e3331768a90da6c1ef03 + languageName: node + linkType: hard + "confusing-browser-globals@npm:^1.0.11": version: 1.0.11 resolution: "confusing-browser-globals@npm:1.0.11" @@ -17894,15 +17857,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:3.2.6": - version: 3.2.6 - resolution: "debug@npm:3.2.6" - dependencies: - ms: "npm:^2.1.1" - checksum: 10/c495d32519ed205aeab71b4bba84701c60b2d18efe98d41f88f498f09423252155450846ee31da0e4c3ea5d7d8f5123525e463612a7d3fa0bcd5fc06e4efe5fc - languageName: node - linkType: hard - "debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1, debug@npm:~4.3.2": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -18001,6 +17955,15 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10/d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" @@ -18043,7 +18006,7 @@ __metadata: languageName: node linkType: hard -"deep-extend@npm:~0.6.0": +"deep-extend@npm:^0.6.0, deep-extend@npm:~0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 @@ -18082,7 +18045,7 @@ __metadata: languageName: node linkType: hard -"defer-to-connect@npm:^2.0.0": +"defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" checksum: 10/8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b @@ -18118,7 +18081,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": version: 1.2.0 resolution: "define-properties@npm:1.2.0" dependencies: @@ -18297,19 +18260,6 @@ __metadata: languageName: node linkType: hard -"detect-port@npm:^1.3.0": - version: 1.5.1 - resolution: "detect-port@npm:1.5.1" - dependencies: - address: "npm:^1.0.1" - debug: "npm:4" - bin: - detect: bin/detect-port.js - detect-port: bin/detect-port.js - checksum: 10/b48da9340481742547263d5d985e65d078592557863402ecf538511735e83575867e94f91fe74405ea19b61351feb99efccae7e55de9a151d5654e3417cea05b - languageName: node - linkType: hard - "didyoumean@npm:^1.2.2": version: 1.2.2 resolution: "didyoumean@npm:1.2.2" @@ -18331,13 +18281,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:3.5.0": - version: 3.5.0 - resolution: "diff@npm:3.5.0" - checksum: 10/cfbc2df98d6f8eb82c0f7735c8468695f65189d31f95a708d4c97cd96a8083fdfd83d87a067a29924ae7d8ff64f578e7da78391af537815750268555fe0df9f0 - languageName: node - linkType: hard - "diff@npm:5.0.0": version: 5.0.0 resolution: "diff@npm:5.0.0" @@ -18912,13 +18855,6 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 10/9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -19565,13 +19501,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10/6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - "escape-string-regexp@npm:2.0.0, escape-string-regexp@npm:^2.0.0": version: 2.0.0 resolution: "escape-string-regexp@npm:2.0.0" @@ -19586,6 +19515,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10/6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + "escodegen@npm:1.8.x": version: 1.8.1 resolution: "escodegen@npm:1.8.1" @@ -20478,34 +20414,6 @@ __metadata: languageName: node linkType: hard -"eth-gas-reporter@npm:^0.2.25": - version: 0.2.25 - resolution: "eth-gas-reporter@npm:0.2.25" - dependencies: - "@ethersproject/abi": "npm:^5.0.0-beta.146" - "@solidity-parser/parser": "npm:^0.14.0" - cli-table3: "npm:^0.5.0" - colors: "npm:1.4.0" - ethereum-cryptography: "npm:^1.0.3" - ethers: "npm:^4.0.40" - fs-readdir-recursive: "npm:^1.1.0" - lodash: "npm:^4.17.14" - markdown-table: "npm:^1.1.3" - mocha: "npm:^7.1.1" - req-cwd: "npm:^2.0.0" - request: "npm:^2.88.0" - request-promise-native: "npm:^1.0.5" - sha1: "npm:^1.1.1" - sync-request: "npm:^6.0.0" - peerDependencies: - "@codechecks/client": ^0.1.0 - peerDependenciesMeta: - "@codechecks/client": - optional: true - checksum: 10/96c85f6bb684f79a6099383ba927bcc2756360dcb2e5635cf5dd2d97029e7620ab4349c7b5f3171b5da212ce747ec017552cb98676e6fd8511cceae1e1a8856e - languageName: node - linkType: hard - "eth-json-rpc-filters@npm:^6.0.0": version: 6.0.1 resolution: "eth-json-rpc-filters@npm:6.0.1" @@ -20594,6 +20502,18 @@ __metadata: languageName: node linkType: hard +"ethereum-cryptography@npm:^2.1.3": + version: 2.2.1 + resolution: "ethereum-cryptography@npm:2.2.1" + dependencies: + "@noble/curves": "npm:1.4.2" + "@noble/hashes": "npm:1.4.0" + "@scure/bip32": "npm:1.4.0" + "@scure/bip39": "npm:1.3.0" + checksum: 10/ab123bbfe843500ac2d645ce9edc4bc814962ffb598db6bf8bf01fbecac656e6c81ff4cf2472f1734844bbcbad2bf658d8b699cb7248d768e0f06ae13ecf43b8 + languageName: node + linkType: hard + "ethereumjs-abi@npm:^0.6.5, ethereumjs-abi@npm:^0.6.8": version: 0.6.8 resolution: "ethereumjs-abi@npm:0.6.8" @@ -20646,24 +20566,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^4.0.40": - version: 4.0.49 - resolution: "ethers@npm:4.0.49" - dependencies: - aes-js: "npm:3.0.0" - bn.js: "npm:^4.11.9" - elliptic: "npm:6.5.4" - hash.js: "npm:1.1.3" - js-sha3: "npm:0.5.7" - scrypt-js: "npm:2.0.4" - setimmediate: "npm:1.0.4" - uuid: "npm:2.0.1" - xmlhttprequest: "npm:1.8.0" - checksum: 10/a4cec0254f940a0fb118317d23676faa46eb5540fc0a3b9177b8aef71318f509ed19b8264f102b1a2a32d0256274ecc526fd926bd22a4a4ac25cd8e0e6560f12 - languageName: node - linkType: hard - -"ethers@npm:^5.5.3, ethers@npm:^5.6.1, ethers@npm:^5.6.8, ethers@npm:^5.7.1, ethers@npm:^5.7.2": +"ethers@npm:^5.6.1, ethers@npm:^5.6.8, ethers@npm:^5.7.0, ethers@npm:^5.7.2, ethers@npm:~5.7.0": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -20701,6 +20604,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.13.4": + version: 6.13.4 + resolution: "ethers@npm:6.13.4" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.1" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@types/node": "npm:22.7.5" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.7.0" + ws: "npm:8.17.1" + checksum: 10/221192fed93f6b0553f3e5e72bfd667d676220577d34ff854f677e955d6f608e60636a9c08b5d54039c532a9b9b7056384f0d7019eb6e111d53175806f896ac6 + languageName: node + linkType: hard + "ethers@npm:^6.5.1": version: 6.6.0 resolution: "ethers@npm:6.6.0" @@ -21328,15 +21246,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:3.0.0, find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: "npm:^3.0.0" - checksum: 10/38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - "find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -21356,6 +21265,15 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: "npm:^3.0.0" + checksum: 10/38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -21450,6 +21368,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10/e3ab42d1097e90d28b913903841e6779eb969b62a64706a3eb983e894a5db000fbd89296f45f08885a0e54cd558ef62e81be1165da9be25a6c44920da10f424c + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -21507,6 +21435,13 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:^2.1.2": + version: 2.1.4 + resolution: "form-data-encoder@npm:2.1.4" + checksum: 10/3778e7db3c21457296e6fdbc4200642a6c01e8be9297256e845ee275f9ddaecb5f49bfb0364690ad216898c114ec59bf85f01ec823a70670b8067273415d62f6 + languageName: node + linkType: hard + "form-data@npm:^2.2.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" @@ -21605,19 +21540,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^0.30.0": - version: 0.30.0 - resolution: "fs-extra@npm:0.30.0" - dependencies: - graceful-fs: "npm:^4.1.2" - jsonfile: "npm:^2.1.0" - klaw: "npm:^1.0.0" - path-is-absolute: "npm:^1.0.0" - rimraf: "npm:^2.2.8" - checksum: 10/bfdd95f598a36a3f24b02db840c1dc54facba2793dea06355c75a6ed823f92e4033589e287f2b91a02a9980c3fb44099e3f00fce5230f045c87431f69be26084 - languageName: node - linkType: hard - "fs-extra@npm:^10.0.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -21697,13 +21619,6 @@ __metadata: languageName: node linkType: hard -"fs-readdir-recursive@npm:^1.1.0": - version: 1.1.0 - resolution: "fs-readdir-recursive@npm:1.1.0" - checksum: 10/d5e3fd8456b8e5d57a43f169a9eaf65c70fa82c4a22f1d4361cdba4ea5e61c60c5c2b4ac481ea137a4d43b2b99b3ea2fae95ac2730255c4206d61af645866c3a - languageName: node - linkType: hard - "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -21721,16 +21636,6 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.1.1": - version: 2.1.3 - resolution: "fsevents@npm:2.1.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10/b604991f31d9ec772e278831bbe069eed8b6824b09b707eeb5c792ceb79fafa9db377981acf7555deab8f5818a75e5487d37b366f55e31d6ea62ea0e06fc777b - conditions: os=darwin - languageName: node - linkType: hard - "fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -21750,15 +21655,6 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.1.1#optional!builtin": - version: 2.1.3 - resolution: "fsevents@patch:fsevents@npm%3A2.1.3#optional!builtin::version=2.1.3&hash=31d12a" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - "fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" @@ -21806,13 +21702,6 @@ __metadata: languageName: node linkType: hard -"functional-red-black-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "functional-red-black-tree@npm:1.0.1" - checksum: 10/debe73e92204341d1fa5f89614e44284d3add26dee660722978d8c50829170f87d1c74768f68c251d215ae461c11db7bac13101c77f4146ff051da75466f7a12 - languageName: node - linkType: hard - "functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" @@ -22096,7 +21985,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -22136,20 +22025,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.3": - version: 7.1.3 - resolution: "glob@npm:7.1.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.0.4" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10/2364d488ec74c4603eef6aed7d0b139341342aafe94e0b0de788248a19320633b1ccbc2639472aac90004560b0227353f27b5abedc9a0b2c5536950b227239c8 - languageName: node - linkType: hard - "glob@npm:7.1.6": version: 7.1.6 resolution: "glob@npm:7.1.6" @@ -22219,6 +22094,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac + languageName: node + linkType: hard + "glob@npm:^11.0.0": version: 11.0.0 resolution: "glob@npm:11.0.0" @@ -22516,7 +22407,33 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"got@npm:^12.1.0": + version: 12.6.1 + resolution: "got@npm:12.6.1" + dependencies: + "@sindresorhus/is": "npm:^5.2.0" + "@szmarczak/http-timer": "npm:^5.0.1" + cacheable-lookup: "npm:^7.0.0" + cacheable-request: "npm:^10.2.8" + decompress-response: "npm:^6.0.0" + form-data-encoder: "npm:^2.1.2" + get-stream: "npm:^6.0.1" + http2-wrapper: "npm:^2.1.10" + lowercase-keys: "npm:^3.0.0" + p-cancelable: "npm:^3.0.0" + responselike: "npm:^3.0.0" + checksum: 10/6c22f1449f4574d79a38e0eba0b753ce2f9030d61838a1ae1e25d3ff5b0db7916aa21023ac369c67d39d17f87bba9283a0b0cb88590de77926c968630aacae75 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 10/0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -22649,13 +22566,6 @@ __metadata: languageName: node linkType: hard -"growl@npm:1.10.5": - version: 1.10.5 - resolution: "growl@npm:1.10.5" - checksum: 10/1391a9add951964de566adc0aee8b0e2b2321e768c1fdccb7a8e156d6a6cd7ea72782883ba8c2c307baf524e3059519423b72e585eba5e7a5f6e83a1e2359b0d - languageName: node - linkType: hard - "gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" @@ -22753,14 +22663,14 @@ __metadata: languageName: node linkType: hard -"hardhat-deploy-ethers@npm:0.4.0-next.1": - version: 0.4.0-next.1 - resolution: "hardhat-deploy-ethers@npm:0.4.0-next.1" +"hardhat-deploy-ethers@npm:^0.4.2": + version: 0.4.2 + resolution: "hardhat-deploy-ethers@npm:0.4.2" peerDependencies: - "@nomiclabs/hardhat-ethers": ^2.2.1 - hardhat: ^2.12.0 - hardhat-deploy: ^0.11.23 - checksum: 10/0b61867e8b2ecd00eb4017c107b055c52d125e8fd339255eda0069dccc4383550bd8073eb099590f13f77cac12a96ecd515593141f7bceedbbf5ee5a4d256ead + "@nomicfoundation/hardhat-ethers": ^3.0.2 + hardhat: ^2.16.0 + hardhat-deploy: ^0.12.0 + checksum: 10/22efb24ba44ae3c1d20c09781cf7ec72b4dfd6f069eb00ce1a461fe6cf8523260050d6572d26ad718279161b74b7205e4307aeb20e45f6cbbbdccaf7b3b8c10b languageName: node linkType: hard @@ -22777,9 +22687,9 @@ __metadata: languageName: node linkType: hard -"hardhat-deploy@npm:0.11.42": - version: 0.11.42 - resolution: "hardhat-deploy@npm:0.11.42" +"hardhat-deploy@npm:^0.14.0": + version: 0.14.0 + resolution: "hardhat-deploy@npm:0.14.0" dependencies: "@ethersproject/abi": "npm:^5.7.0" "@ethersproject/abstract-signer": "npm:^5.7.0" @@ -22798,14 +22708,14 @@ __metadata: chokidar: "npm:^3.5.2" debug: "npm:^4.3.2" enquirer: "npm:^2.3.6" - ethers: "npm:^5.5.3" + ethers: "npm:^5.7.0" form-data: "npm:^4.0.0" fs-extra: "npm:^10.0.0" match-all: "npm:^1.2.6" murmur-128: "npm:^0.2.1" qs: "npm:^6.9.4" - zksync-web3: "npm:^0.14.3" - checksum: 10/e9eafc020c9fe668d1e3084dd01f0f5083552573586339fcd7cb8d010ba69110205579997d5196e55ef544df3a19c626b4fe0a1b5579ae425a4252e82ba9606c + zksync-ethers: "npm:^5.0.0" + checksum: 10/aeb88872b9fe2646a92b9e6a825eaa7a60217ffb73f268390420b7544a78fa4f29e472f1243b5d91bacff9a1376041b2c8d67b87565affe09c4169f59d5a862c languageName: node linkType: hard @@ -22826,30 +22736,43 @@ __metadata: languageName: node linkType: hard -"hardhat-gas-reporter@npm:^1.0.9": - version: 1.0.9 - resolution: "hardhat-gas-reporter@npm:1.0.9" +"hardhat-gas-reporter@npm:^2.2.1": + version: 2.2.1 + resolution: "hardhat-gas-reporter@npm:2.2.1" dependencies: - array-uniq: "npm:1.0.3" - eth-gas-reporter: "npm:^0.2.25" + "@ethersproject/abi": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/units": "npm:^5.7.0" + "@solidity-parser/parser": "npm:^0.18.0" + axios: "npm:^1.6.7" + brotli-wasm: "npm:^2.0.1" + chalk: "npm:4.1.2" + cli-table3: "npm:^0.6.3" + ethereum-cryptography: "npm:^2.1.3" + glob: "npm:^10.3.10" + jsonschema: "npm:^1.4.1" + lodash: "npm:^4.17.21" + markdown-table: "npm:2.0.0" sha1: "npm:^1.1.1" + viem: "npm:2.7.14" peerDependencies: - hardhat: ^2.0.2 - checksum: 10/c18af3b6ca9e26480679703453c769c10cc7fe290b6dfdd673010112b22be1bd5872ce74c02b71275cc5e0f99fc3c47fadec912bababe7564393191aab6a3f64 + hardhat: ^2.16.0 + checksum: 10/af8bd86400035ab1ed574c5f782e7ee408fff75ea6cfcd56ab87bf80c2e911e9fbe943b528ad17844abad8ff8f63daa24aae391ccbf3e07a9970be66f949bd3d languageName: node linkType: hard -"hardhat-tracer@npm:^2.7.0": - version: 2.7.0 - resolution: "hardhat-tracer@npm:2.7.0" +"hardhat-tracer@npm:^3.1.0": + version: 3.1.0 + resolution: "hardhat-tracer@npm:3.1.0" dependencies: chalk: "npm:^4.1.2" debug: "npm:^4.3.4" ethers: "npm:^5.6.1" + semver: "npm:^7.6.2" peerDependencies: chai: 4.x - hardhat: ">=2.16 <3.x" - checksum: 10/867330bd16f194619c9601ccc456eca7f7df633dbec58177e39e4cdc1c1cd5553e04e083f0e728aa56d3e68f1687f88b8c9d718945475ffac95452584a6503e0 + hardhat: ">=2.22.5 <3.x" + checksum: 10/7ba1005de2601292944ff3b810e528b1df3b9c53b96e79303484b20cc274639e82a75504c11f70bba0fd23b46384997c498eeb5a692d908bfeb7c0172e8d3087 languageName: node linkType: hard @@ -22864,32 +22787,26 @@ __metadata: languageName: node linkType: hard -"hardhat@npm:2.15.0": - version: 2.15.0 - resolution: "hardhat@npm:2.15.0" +"hardhat@npm:2.22.15": + version: 2.22.15 + resolution: "hardhat@npm:2.22.15" dependencies: "@ethersproject/abi": "npm:^5.1.2" "@metamask/eth-sig-util": "npm:^4.0.0" - "@nomicfoundation/ethereumjs-block": "npm:5.0.1" - "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.1" - "@nomicfoundation/ethereumjs-common": "npm:4.0.1" - "@nomicfoundation/ethereumjs-evm": "npm:2.0.1" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.1" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.1" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.1" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.1" - "@nomicfoundation/ethereumjs-util": "npm:9.0.1" - "@nomicfoundation/ethereumjs-vm": "npm:7.0.1" + "@nomicfoundation/edr": "npm:^0.6.4" + "@nomicfoundation/ethereumjs-common": "npm:4.0.4" + "@nomicfoundation/ethereumjs-tx": "npm:5.0.4" + "@nomicfoundation/ethereumjs-util": "npm:9.0.4" "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" "@sentry/node": "npm:^5.18.1" "@types/bn.js": "npm:^5.1.0" "@types/lru-cache": "npm:^5.1.0" - abort-controller: "npm:^3.0.0" adm-zip: "npm:^0.4.16" aggregate-error: "npm:^3.0.0" ansi-escapes: "npm:^4.3.0" + boxen: "npm:^5.1.2" chalk: "npm:^2.4.2" - chokidar: "npm:^3.4.0" + chokidar: "npm:^4.0.0" ci-info: "npm:^2.0.0" debug: "npm:^4.1.1" enquirer: "npm:^2.3.0" @@ -22902,16 +22819,16 @@ __metadata: glob: "npm:7.2.0" immutable: "npm:^4.0.0-rc.12" io-ts: "npm:1.10.4" + json-stream-stringify: "npm:^3.1.4" keccak: "npm:^3.0.2" lodash: "npm:^4.17.11" mnemonist: "npm:^0.38.0" mocha: "npm:^10.0.0" p-map: "npm:^4.0.0" - qs: "npm:^6.7.0" raw-body: "npm:^2.4.1" resolve: "npm:1.17.0" semver: "npm:^6.3.0" - solc: "npm:0.7.3" + solc: "npm:0.8.26" source-map-support: "npm:^0.5.13" stacktrace-parser: "npm:^0.1.10" tsort: "npm:0.0.1" @@ -22928,7 +22845,7 @@ __metadata: optional: true bin: hardhat: internal/cli/bootstrap.js - checksum: 10/f620dc392783520757d885bd19e07776c13de82c49fa0629ff89e613d6a8e0cc0d48454dde4fb86ed561a1f30428fd86c0b9cfac2888b48bffc143b29818e25b + checksum: 10/bbbed84de84605ae5a8177c5b35d62ff202a7a01c0550d094bead80aeea9d4fc33c30f2b819c3dcba8837ff1f5b08aa6d05d3e1402b55796848368ce7bcdbf28 languageName: node linkType: hard @@ -23008,7 +22925,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b @@ -23067,16 +22984,6 @@ __metadata: languageName: node linkType: hard -"hash.js@npm:1.1.3": - version: 1.1.3 - resolution: "hash.js@npm:1.1.3" - dependencies: - inherits: "npm:^2.0.3" - minimalistic-assert: "npm:^1.0.0" - checksum: 10/0dc4cb8164a906b06cc2ca2f333581a3fb91c36b64acd1e2f57da1b51ac5ed6b2135141f0513b734bf80e2c955b8d88fe0eade2a54c92d73d2eb26f49252d209 - languageName: node - linkType: hard - "hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -23463,6 +23370,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^2.1.10": + version: 2.2.1 + resolution: "http2-wrapper@npm:2.2.1" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.2.0" + checksum: 10/e7a5ac6548318e83fc0399cd832cdff6bbf902b165d211cad47a56ee732922e0aa1107246dd884b12532a1c4649d27c4d44f2480911c65202e93c90bde8fa29d + languageName: node + linkType: hard + "https-browserify@npm:^1.0.0": version: 1.0.0 resolution: "https-browserify@npm:1.0.0" @@ -23775,7 +23692,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:^1.3.5": +"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 @@ -24283,7 +24200,7 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.0, is-buffer@npm:^2.0.5": +"is-buffer@npm:^2.0.0": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" checksum: 10/3261a8b858edcc6c9566ba1694bf829e126faa88911d1c0a747ea658c5d81b14b6955e3a702d59dabadd58fdd440c01f321aa71d6547105fd21d03f94d0597e7 @@ -24952,6 +24869,15 @@ __metadata: languageName: node linkType: hard +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 10/9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + "isows@npm:1.0.4": version: 1.0.4 resolution: "isows@npm:1.0.4" @@ -25244,6 +25170,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10/96f8786eaab98e4bf5b2a5d6d9588ea46c4d06bbc4f2eb861fdd7b6b182b16f71d8a70e79820f335d52653b16d4843b29dd9cdcf38ae80406756db9199497cf3 + languageName: node + linkType: hard + "jackspeak@npm:^4.0.1": version: 4.0.2 resolution: "jackspeak@npm:4.0.2" @@ -25953,20 +25892,6 @@ __metadata: languageName: node linkType: hard -"js-sdsl@npm:^4.1.4": - version: 4.4.1 - resolution: "js-sdsl@npm:4.4.1" - checksum: 10/f1f6faa0bdd8aa2acf58a2b2bddc85fc203937cad458b3802f4fe9dc335978753c88b28ae210e999d4b3a12f9f31f29494dff31aa46a89d3855e9a5e920bc908 - languageName: node - linkType: hard - -"js-sha3@npm:0.5.7": - version: 0.5.7 - resolution: "js-sha3@npm:0.5.7" - checksum: 10/32885c7edb50fca04017bacada8e5315c072d21d3d35e071e9640fc5577e200076a4718e0b2f33d86ab704accb68d2ade44f1e2ca424cc73a5929b9129dab948 - languageName: node - linkType: hard - "js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -25981,18 +25906,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:3.13.1": - version: 3.13.1 - resolution: "js-yaml@npm:3.13.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10/cec89175b065743875fce53e63adc8b89aded77e18d00e54ff80c57ab730f22ccfddaf2fe3e6adab1d6dff59a3d55dd9ae6fc711d46335b7e94c32d3583a5627 - languageName: node - linkType: hard - "js-yaml@npm:3.14.1, js-yaml@npm:3.x, js-yaml@npm:^3.12.1, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -26209,6 +26122,13 @@ __metadata: languageName: node linkType: hard +"json-stream-stringify@npm:^3.1.4": + version: 3.1.6 + resolution: "json-stream-stringify@npm:3.1.6" + checksum: 10/d52919465b4a31d7a0b5720ca0e6268f757fc1515486d5c77cfb75f7a9e4b58e13a73a2f811d6d322b9a101750d3961b48a68ee9d9b299ac3846ef2921a62a81 + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -26253,18 +26173,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^2.1.0": - version: 2.4.0 - resolution: "jsonfile@npm:2.4.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/517656e0a7c4eda5a90341dd0ec9e9b7590d0c77d66d8aad0162615dfc7c5f219c82565b927cc4cc774ca93e484d118a274ef0def74279a3d8afb4ff2f4e4800 - languageName: node - linkType: hard - "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -26320,7 +26228,7 @@ __metadata: languageName: node linkType: hard -"jsonschema@npm:^1.2.4": +"jsonschema@npm:^1.2.4, jsonschema@npm:^1.4.1": version: 1.4.1 resolution: "jsonschema@npm:1.4.1" checksum: 10/d7a188da7a3100a2caa362b80e98666d46607b7a7153aac405b8e758132961911c6df02d444d4700691330874e21a62639f550e856b21ddd28423690751ca9c6 @@ -26394,6 +26302,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10/167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 + languageName: node + linkType: hard + "keyvaluestorage-interface@npm:^1.0.0": version: 1.0.0 resolution: "keyvaluestorage-interface@npm:1.0.0" @@ -26408,18 +26325,6 @@ __metadata: languageName: node linkType: hard -"klaw@npm:^1.0.0": - version: 1.3.1 - resolution: "klaw@npm:1.3.1" - dependencies: - graceful-fs: "npm:^4.1.9" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/68b8ccb89f222dca60805df2b0e0fa0b3e4203ca1928b8facc0afac660e3e362809fe00f868ac877f495ebf89e376bb9ac9275508a132b5573e7382bed3ab006 - languageName: node - linkType: hard - "kleros-v2@workspace:.": version: 0.0.0-use.local resolution: "kleros-v2@workspace:." @@ -26519,6 +26424,15 @@ __metadata: languageName: node linkType: hard +"latest-version@npm:^7.0.0": + version: 7.0.0 + resolution: "latest-version@npm:7.0.0" + dependencies: + package-json: "npm:^8.1.0" + checksum: 10/1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 + languageName: node + linkType: hard + "launch-editor@npm:^2.6.0": version: 2.6.0 resolution: "launch-editor@npm:2.6.0" @@ -26529,33 +26443,6 @@ __metadata: languageName: node linkType: hard -"level-supports@npm:^4.0.0": - version: 4.0.1 - resolution: "level-supports@npm:4.0.1" - checksum: 10/e2f177af813a25af29d15406a14240e2e10e5efb1c35b03643c885ac5931af760b9337826506b6395f98cf6b1e68ba294bfc345a248a1ae3f9c69e08e81824b2 - languageName: node - linkType: hard - -"level-transcoder@npm:^1.0.1": - version: 1.0.1 - resolution: "level-transcoder@npm:1.0.1" - dependencies: - buffer: "npm:^6.0.3" - module-error: "npm:^1.0.1" - checksum: 10/2fb41a1d8037fc279f851ead8cdc3852b738f1f935ac2895183cd606aae3e57008e085c7c2bd2b2d43cfd057333108cfaed604092e173ac2abdf5ab1b8333f9e - languageName: node - linkType: hard - -"level@npm:^8.0.0": - version: 8.0.0 - resolution: "level@npm:8.0.0" - dependencies: - browser-level: "npm:^1.0.1" - classic-level: "npm:^1.2.0" - checksum: 10/1e7df97fe80fb158c8c1d6feeb651ee1381fd8e45af773b2bb02d3dd020fefd4f48a69d260b2d0ce9c4245ee9d8d40b8a9c49275b0b1ef6e1d4158feb5c39081 - languageName: node - linkType: hard - "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -26964,7 +26851,7 @@ __metadata: languageName: node linkType: hard -"lodash.isequal@npm:4.5.0": +"lodash.isequal@npm:4.5.0, lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 @@ -27139,22 +27026,13 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0, lodash@npm:~4.17.0": +"lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0, lodash@npm:~4.17.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 languageName: node linkType: hard -"log-symbols@npm:3.0.0, log-symbols@npm:^3.0.0": - version: 3.0.0 - resolution: "log-symbols@npm:3.0.0" - dependencies: - chalk: "npm:^2.4.2" - checksum: 10/f2322e1452d819050b11aad247660e1494f8b2219d40a964af91d5f9af1a90636f1b3d93f2952090e42af07cc5550aecabf6c1d8ec1181207e95cb66ba112361 - languageName: node - linkType: hard - "log-symbols@npm:4.1.0, log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" @@ -27174,6 +27052,15 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^3.0.0": + version: 3.0.0 + resolution: "log-symbols@npm:3.0.0" + dependencies: + chalk: "npm:^2.4.2" + checksum: 10/f2322e1452d819050b11aad247660e1494f8b2219d40a964af91d5f9af1a90636f1b3d93f2952090e42af07cc5550aecabf6c1d8ec1181207e95cb66ba112361 + languageName: node + linkType: hard + "log-symbols@npm:^5.1.0": version: 5.1.0 resolution: "log-symbols@npm:5.1.0" @@ -27279,6 +27166,13 @@ __metadata: languageName: node linkType: hard +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 10/67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.2": version: 10.1.0 resolution: "lru-cache@npm:10.1.0" @@ -27468,10 +27362,12 @@ __metadata: languageName: node linkType: hard -"markdown-table@npm:^1.1.3": - version: 1.1.3 - resolution: "markdown-table@npm:1.1.3" - checksum: 10/ca94e8a84c467f9da963d1888aa298939f137d792b39259bf971d01d6fb534e02c0435e10dcccdc0b11d9e29bf6eb7dffacb007b07e3038b68b2e6eb02990fb1 +"markdown-table@npm:2.0.0": + version: 2.0.0 + resolution: "markdown-table@npm:2.0.0" + dependencies: + repeat-string: "npm:^1.0.0" + checksum: 10/8018cd1a1733ffda916a0548438e50f3d21b6c6b71fb23696b33c0b5922a8cc46035eb4b204a59c6054f063076f934461ae094599656a63f87c1c3a80bd3c229 languageName: node linkType: hard @@ -27500,13 +27396,6 @@ __metadata: languageName: node linkType: hard -"mcl-wasm@npm:^0.7.1": - version: 0.7.9 - resolution: "mcl-wasm@npm:0.7.9" - checksum: 10/eb689cf0e2422ef7b98e8b040ed601821aea839718c876cd734e9148ca7013adf1c869bbc9495aac351e645d314ec3bd3d3612c91f60c499c5aea8d3dd2a7e38 - languageName: node - linkType: hard - "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -27625,17 +27514,6 @@ __metadata: languageName: node linkType: hard -"memory-level@npm:^1.0.0": - version: 1.0.0 - resolution: "memory-level@npm:1.0.0" - dependencies: - abstract-level: "npm:^1.0.0" - functional-red-black-tree: "npm:^1.0.1" - module-error: "npm:^1.0.1" - checksum: 10/e3293d8c67ebc0aa4b29982c5f8e3d139c5b1b04b97fa3ae98f940f91c7bdfefec9ff189742943734ebb6c7efa85fed6a4d559407b2d5751106b24cac17a23a6 - languageName: node - linkType: hard - "memorystream@npm:^0.3.1": version: 0.3.1 resolution: "memorystream@npm:0.3.1" @@ -28073,6 +27951,20 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10/7e719047612411fe071332a7498cf0448bbe43c485c0d780046c76633a771b223ff49bd00267be122cedebb897037fdb527df72335d0d0f74724604ca70b37ad + languageName: node + linkType: hard + +"mimic-response@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-response@npm:4.0.0" + checksum: 10/33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850 + languageName: node + linkType: hard + "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -28319,17 +28211,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:0.5.5": - version: 0.5.5 - resolution: "mkdirp@npm:0.5.5" - dependencies: - minimist: "npm:^1.2.5" - bin: - mkdirp: bin/cmd.js - checksum: 10/3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d - languageName: node - linkType: hard - "mkdirp@npm:0.5.x, mkdirp@npm:^0.5.1, mkdirp@npm:~0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -28371,41 +28252,6 @@ __metadata: languageName: node linkType: hard -"mocha@npm:7.1.2": - version: 7.1.2 - resolution: "mocha@npm:7.1.2" - dependencies: - ansi-colors: "npm:3.2.3" - browser-stdout: "npm:1.3.1" - chokidar: "npm:3.3.0" - debug: "npm:3.2.6" - diff: "npm:3.5.0" - escape-string-regexp: "npm:1.0.5" - find-up: "npm:3.0.0" - glob: "npm:7.1.3" - growl: "npm:1.10.5" - he: "npm:1.2.0" - js-yaml: "npm:3.13.1" - log-symbols: "npm:3.0.0" - minimatch: "npm:3.0.4" - mkdirp: "npm:0.5.5" - ms: "npm:2.1.1" - node-environment-flags: "npm:1.0.6" - object.assign: "npm:4.1.0" - strip-json-comments: "npm:2.0.1" - supports-color: "npm:6.0.0" - which: "npm:1.3.1" - wide-align: "npm:1.1.3" - yargs: "npm:13.3.2" - yargs-parser: "npm:13.1.2" - yargs-unparser: "npm:1.6.0" - bin: - _mocha: bin/_mocha - mocha: bin/mocha - checksum: 10/7774969394c7184cdb298fed91a1564f6374f1214983c52598f9083fafedb6c98257cfd0a9404ac738cf6277334bbba6f3403333ac3b9981d0996710cd7f16d6 - languageName: node - linkType: hard - "mocha@npm:^10.0.0, mocha@npm:^10.2.0": version: 10.2.0 resolution: "mocha@npm:10.2.0" @@ -28438,41 +28284,6 @@ __metadata: languageName: node linkType: hard -"mocha@npm:^7.1.1": - version: 7.2.0 - resolution: "mocha@npm:7.2.0" - dependencies: - ansi-colors: "npm:3.2.3" - browser-stdout: "npm:1.3.1" - chokidar: "npm:3.3.0" - debug: "npm:3.2.6" - diff: "npm:3.5.0" - escape-string-regexp: "npm:1.0.5" - find-up: "npm:3.0.0" - glob: "npm:7.1.3" - growl: "npm:1.10.5" - he: "npm:1.2.0" - js-yaml: "npm:3.13.1" - log-symbols: "npm:3.0.0" - minimatch: "npm:3.0.4" - mkdirp: "npm:0.5.5" - ms: "npm:2.1.1" - node-environment-flags: "npm:1.0.6" - object.assign: "npm:4.1.0" - strip-json-comments: "npm:2.0.1" - supports-color: "npm:6.0.0" - which: "npm:1.3.1" - wide-align: "npm:1.1.3" - yargs: "npm:13.3.2" - yargs-parser: "npm:13.1.2" - yargs-unparser: "npm:1.6.0" - bin: - _mocha: bin/_mocha - mocha: bin/mocha - checksum: 10/3f7630fc5aecd1497a13ffa8ac98a5db6d91a9f0232d12f5d258c17da187ab1ec53192e4947443d96174785256036b711e0d3cd6f99fd5766b29c801836fe6c1 - languageName: node - linkType: hard - "modify-values@npm:^1.0.0": version: 1.0.1 resolution: "modify-values@npm:1.0.1" @@ -28480,13 +28291,6 @@ __metadata: languageName: node linkType: hard -"module-error@npm:^1.0.1, module-error@npm:^1.0.2": - version: 1.0.2 - resolution: "module-error@npm:1.0.2" - checksum: 10/5d653e35bd55b3e95f8aee2cdac108082ea892e71b8f651be92cde43e4ee86abee4fa8bd7fc3fe5e68b63926d42f63c54cd17b87a560c31f18739295575a3962 - languageName: node - linkType: hard - "moment@npm:^2.27.0": version: 2.29.4 resolution: "moment@npm:2.29.4" @@ -28543,13 +28347,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.1": - version: 2.1.1 - resolution: "ms@npm:2.1.1" - checksum: 10/0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e - languageName: node - linkType: hard - "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -28736,13 +28533,6 @@ __metadata: languageName: node linkType: hard -"napi-macros@npm:^2.2.2": - version: 2.2.2 - resolution: "napi-macros@npm:2.2.2" - checksum: 10/2cdb9c40ad4b424b14fbe5e13c5329559e2b511665acf41cdcda172fd2270202dc747a2d288b687c72bc70f654c797bc24a93adb67631128d62461588d7cc070 - languageName: node - linkType: hard - "napi-wasm@npm:^1.1.0": version: 1.1.0 resolution: "napi-wasm@npm:1.1.0" @@ -28949,16 +28739,6 @@ __metadata: languageName: node linkType: hard -"node-environment-flags@npm:1.0.6": - version: 1.0.6 - resolution: "node-environment-flags@npm:1.0.6" - dependencies: - object.getownpropertydescriptors: "npm:^2.0.3" - semver: "npm:^5.7.0" - checksum: 10/e179d0ff3697cd6006d426ce707060b044da93c8e4c7ce1b19d211c25cc276ba72aa36247bfe64d6e79a0264843d5df7124f0fc28e50fc904f07cc1b96f8c781 - languageName: node - linkType: hard - "node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1": version: 1.4.1 resolution: "node-fetch-native@npm:1.4.1" @@ -29162,6 +28942,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^8.0.0": + version: 8.0.1 + resolution: "normalize-url@npm:8.0.1" + checksum: 10/ae392037584fc5935b663ae4af475351930a1fc39e107956cfac44f42d5127eec2d77d9b7b12ded4696ca78103bafac5b6206a0ea8673c7bffecbe13544fcc5a + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -29316,7 +29103,7 @@ __metadata: languageName: node linkType: hard -"object-keys@npm:^1.0.11, object-keys@npm:^1.1.1": +"object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: 10/3d81d02674115973df0b7117628ea4110d56042e5326413e4b4313f0bcdf7dd78d4a3acef2c831463fa3796a66762c49daef306f4a0ea1af44877d7086d73bde @@ -29330,18 +29117,6 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:4.1.0": - version: 4.1.0 - resolution: "object.assign@npm:4.1.0" - dependencies: - define-properties: "npm:^1.1.2" - function-bind: "npm:^1.1.1" - has-symbols: "npm:^1.0.0" - object-keys: "npm:^1.0.11" - checksum: 10/9ca3797cdbd3ff8a196aaee7b4808f2d1802c4d3655b1a03d15ca0284fc1034d097c112c6be60a11a866bcbf728b05318326834054d36f11a17aacb15d04ec9e - languageName: node - linkType: hard - "object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" @@ -29422,7 +29197,7 @@ __metadata: languageName: node linkType: hard -"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0": +"object.getownpropertydescriptors@npm:^2.1.0": version: 2.1.6 resolution: "object.getownpropertydescriptors@npm:2.1.6" dependencies: @@ -29739,6 +29514,13 @@ __metadata: languageName: node linkType: hard +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 10/a5eab7cf5ac5de83222a014eccdbfde65ecfb22005ee9bc242041f0b4441e07fac7629432c82f48868aa0f8413fe0df6c6067c16f76bf9217cd8dc651923c93d + languageName: node + linkType: hard + "p-defer@npm:^3.0.0": version: 3.0.0 resolution: "p-defer@npm:3.0.0" @@ -29942,6 +29724,18 @@ __metadata: languageName: node linkType: hard +"package-json@npm:^8.1.0": + version: 8.1.1 + resolution: "package-json@npm:8.1.1" + dependencies: + got: "npm:^12.1.0" + registry-auth-token: "npm:^5.0.1" + registry-url: "npm:^6.0.0" + semver: "npm:^7.3.7" + checksum: 10/d97ce9539e1ed4aacaf7c2cb754f16afc10937fa250bd09b4d61181d2e36a30cf8a4cff2f8f831f0826b0ac01a355f26204c7e57ca0e450da6ccec3e34fc889a + languageName: node + linkType: hard + "pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -30184,7 +29978,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1": +"path-scurry@npm:^1.10.1, path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -31663,6 +31457,13 @@ __metadata: languageName: node linkType: hard +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 10/9cc3b46d613fa0d637033b225db1bc98e914c3c05864f7adc9bee728192e353125ef2e49f71129a413f6333951756000b0e54f299d921f02d3e9e370cc994100 + languageName: node + linkType: hard + "protobufjs@npm:^6.10.2": version: 6.11.4 resolution: "protobufjs@npm:6.11.4" @@ -31885,7 +31686,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.4.0, qs@npm:^6.7.0, qs@npm:^6.9.4": +"qs@npm:^6.4.0, qs@npm:^6.9.4": version: 6.11.2 resolution: "qs@npm:6.11.2" dependencies: @@ -31927,7 +31728,7 @@ __metadata: languageName: node linkType: hard -"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": +"queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b @@ -31957,6 +31758,13 @@ __metadata: languageName: node linkType: hard +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: 10/a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + "radix3@npm:^1.1.0": version: 1.1.0 resolution: "radix3@npm:1.1.0" @@ -32129,6 +31937,20 @@ __metadata: languageName: node linkType: hard +"rc@npm:1.2.8": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10/5c4d72ae7eec44357171585938c85ce066da8ca79146b5635baf3d55d74584c92575fa4e2c9eac03efbed3b46a0b2e7c30634c012b4b4fa40d654353d3c163eb + languageName: node + linkType: hard + "react-app-polyfill@npm:^3.0.0": version: 3.0.0 resolution: "react-app-polyfill@npm:3.0.0" @@ -32728,12 +32550,10 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:~3.2.0": - version: 3.2.0 - resolution: "readdirp@npm:3.2.0" - dependencies: - picomatch: "npm:^2.0.4" - checksum: 10/3efe893b62a2fac6a5c5b7a5ef7247a7894ed4cf21c1b7115fce6f61139da3b7fa8ae81d1ff9df035c6364175935163608f44efa23e3955c7074025396e9960e +"readdirp@npm:^4.0.1": + version: 4.0.2 + resolution: "readdirp@npm:4.0.2" + checksum: 10/4ef93103307c7d5e42e78ecf201db58c984c4d66882a27c956250478b49c2444b1ff6aea8ce0f5e4157b2c07ce2fe870ad16c92ebd7c6ff30391ded6e42b9873 languageName: node linkType: hard @@ -32969,6 +32789,24 @@ __metadata: languageName: node linkType: hard +"registry-auth-token@npm:^5.0.1": + version: 5.0.2 + resolution: "registry-auth-token@npm:5.0.2" + dependencies: + "@pnpm/npm-conf": "npm:^2.1.0" + checksum: 10/0d7683b71ee418993e7872b389024b13645c4295eb7bb850d10728eaf46065db24ea4d47dc6cbb71a60d1aa4bef077b0d8b7363c9ac9d355fdba47bebdfb01dd + languageName: node + linkType: hard + +"registry-url@npm:^6.0.0": + version: 6.0.1 + resolution: "registry-url@npm:6.0.1" + dependencies: + rc: "npm:1.2.8" + checksum: 10/33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab + languageName: node + linkType: hard + "regjsparser@npm:^0.9.1": version: 0.9.1 resolution: "regjsparser@npm:0.9.1" @@ -33062,49 +32900,14 @@ __metadata: languageName: node linkType: hard -"req-cwd@npm:^2.0.0": - version: 2.0.0 - resolution: "req-cwd@npm:2.0.0" - dependencies: - req-from: "npm:^2.0.0" - checksum: 10/c44f9dea0b0f7d3a72be18a04f7769e0eefbadca363e3a346c1c02b79745126c871e1f6970357b3e731c26740aad8344bf80fb3ce055a2bcf8ca85ad2b44f519 - languageName: node - linkType: hard - -"req-from@npm:^2.0.0": - version: 2.0.0 - resolution: "req-from@npm:2.0.0" - dependencies: - resolve-from: "npm:^3.0.0" - checksum: 10/4c369881a2296e23e71668ed089c5d93b37652fe900ec9f1e1f5c1da65f6bca4ee271e97ba2b806fdea50219e011995d1df3c80a7209015cc1e1fc622507f140 - languageName: node - linkType: hard - -"request-promise-core@npm:1.1.4": - version: 1.1.4 - resolution: "request-promise-core@npm:1.1.4" - dependencies: - lodash: "npm:^4.17.19" - peerDependencies: - request: ^2.34 - checksum: 10/79714e46b078c8de539c4de13e78878a3c7e3f33e194547c5ec3f0c8e47b0b222aa1718bbd2dbfb1a7990149041c6cc0be6c5916e03d99f4e75939f2a840046e - languageName: node - linkType: hard - -"request-promise-native@npm:^1.0.5": - version: 1.0.9 - resolution: "request-promise-native@npm:1.0.9" - dependencies: - request-promise-core: "npm:1.1.4" - stealthy-require: "npm:^1.1.1" - tough-cookie: "npm:^2.3.3" - peerDependencies: - request: ^2.34 - checksum: 10/6df0cf75cbddd08b568e462570fb63033f040efdf961f39af572e52821a831a13ee9027db7ba78f1d980759cc7913f2a12a34424deac5a0ec56c5d8ebbf45391 +"repeat-string@npm:^1.0.0": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 10/1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 languageName: node linkType: hard -"request@npm:2.88.2, request@npm:^2.88.0, request@npm:^2.88.2": +"request@npm:2.88.2, request@npm:^2.88.2": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -33139,7 +32942,7 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^2.0.0, require-from-string@npm:^2.0.2": +"require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" checksum: 10/839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb @@ -33167,6 +32970,13 @@ __metadata: languageName: node linkType: hard +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: 10/744e87888f0b6fa0b256ab454ca0b9c0b80808715e2ef1f3672773665c92a941f6181194e30ccae4a8cd0adbe0d955d3f133102636d2ee0cca0119fec0bc9aec + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -33193,13 +33003,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-from@npm:3.0.0" - checksum: 10/c4189f1592a777f7d51c1ff6153df18b5d062c831fb0c623b4b87736c8a73c08e4eaab19e807399287040791f3e7aa0877f05f9d86739d3ef1ef0c727e9fe06c - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -33396,6 +33199,15 @@ __metadata: languageName: node linkType: hard +"responselike@npm:^3.0.0": + version: 3.0.0 + resolution: "responselike@npm:3.0.0" + dependencies: + lowercase-keys: "npm:^3.0.0" + checksum: 10/e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e + languageName: node + linkType: hard + "restore-cursor@npm:^2.0.0": version: 2.0.0 resolution: "restore-cursor@npm:2.0.0" @@ -33468,7 +33280,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.6.3": +"rimraf@npm:^2.6.3": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -33725,15 +33537,6 @@ __metadata: languageName: node linkType: hard -"run-parallel-limit@npm:^1.1.0": - version: 1.1.0 - resolution: "run-parallel-limit@npm:1.1.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10/672c3b87e7f939c684b9965222b361421db0930223ed1e43ebf0e7e48ccc1a022ea4de080bef4d5468434e2577c33b7681e3f03b7593fdc49ad250a55381123c - languageName: node - linkType: hard - "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -33743,13 +33546,6 @@ __metadata: languageName: node linkType: hard -"rustbn.js@npm:~0.2.0": - version: 0.2.0 - resolution: "rustbn.js@npm:0.2.0" - checksum: 10/2d7d09f6bea2b5fb05142724f5cfc65c8d96b6e57a29874060733d041789aabbd236617c05d8569a43a2997eea850b4323527e92368c46d04a671ef0b2319fe9 - languageName: node - linkType: hard - "rxjs@npm:^6.3.3, rxjs@npm:^6.4.0": version: 6.6.7 resolution: "rxjs@npm:6.6.7" @@ -34045,13 +33841,6 @@ __metadata: languageName: node linkType: hard -"scrypt-js@npm:2.0.4": - version: 2.0.4 - resolution: "scrypt-js@npm:2.0.4" - checksum: 10/584c42ca17f8da7d9eec483b56743e868d1e795634f9581169f0b40c7abc5d4266dfb9d59d8f0a65479885c74fd44f3a99aca5a5048d3c4f7d33d88389aa2014 - languageName: node - linkType: hard - "scrypt-js@npm:3.0.1, scrypt-js@npm:^3.0.0": version: 3.0.1 resolution: "scrypt-js@npm:3.0.1" @@ -34122,7 +33911,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.0": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0, semver@npm:^5.6.0": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -34193,7 +33982,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.0, semver@npm:^7.6.3": +"semver@npm:^7.5.2, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -34360,13 +34149,6 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:1.0.4": - version: 1.0.4 - resolution: "setimmediate@npm:1.0.4" - checksum: 10/eb11c0c817a9373d07a0501c298ebcac72755a1d6444b44d5b7827bc1f81848801fae14067dd14b1cc0529fbc7a794d1a661b99dfbc83784dbbccdf0914a7e63 - languageName: node - linkType: hard - "setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" @@ -34743,28 +34525,26 @@ __metadata: languageName: node linkType: hard -"solc@npm:0.7.3": - version: 0.7.3 - resolution: "solc@npm:0.7.3" +"solc@npm:0.8.23-fixed": + version: 0.8.23-fixed + resolution: "solc@npm:0.8.23-fixed" dependencies: command-exists: "npm:^1.2.8" - commander: "npm:3.0.2" + commander: "npm:^8.1.0" follow-redirects: "npm:^1.12.1" - fs-extra: "npm:^0.30.0" js-sha3: "npm:0.8.0" memorystream: "npm:^0.3.1" - require-from-string: "npm:^2.0.0" semver: "npm:^5.5.0" tmp: "npm:0.0.33" bin: - solcjs: solcjs - checksum: 10/68bb783765d1aacf6ebe151ddbffff4c17f679046f2f83a2abae99c57cc0e7dbbcebd62b31861892df18fde272697c37c7a7518f1a9b1219de80217f0c780f0b + solcjs: solc.js + checksum: 10/772eb63a577872991dbc2d8a13a720d5b78a06e8622845751627567b91f0247a8b5bababdb56c9327181120723729548f3d0ffbc8552144d4f376c011f017459 languageName: node linkType: hard -"solc@npm:0.8.23-fixed": - version: 0.8.23-fixed - resolution: "solc@npm:0.8.23-fixed" +"solc@npm:0.8.26": + version: 0.8.26 + resolution: "solc@npm:0.8.26" dependencies: command-exists: "npm:^1.2.8" commander: "npm:^8.1.0" @@ -34775,7 +34555,7 @@ __metadata: tmp: "npm:0.0.33" bin: solcjs: solc.js - checksum: 10/772eb63a577872991dbc2d8a13a720d5b78a06e8622845751627567b91f0247a8b5bababdb56c9327181120723729548f3d0ffbc8552144d4f376c011f017459 + checksum: 10/30ef9c2687f727eb5bdd685c77b1a0b354e7d6ba7a080cfcdce5a89f25a1399ff7949fecef47768088d825588da230da0044b46f056fc36f3959c0e3d3c9a82b languageName: node linkType: hard @@ -34792,13 +34572,13 @@ __metadata: languageName: node linkType: hard -"solhint@npm:^3.4.0": - version: 3.4.1 - resolution: "solhint@npm:3.4.1" +"solhint@npm:^5.0.2": + version: 5.0.3 + resolution: "solhint@npm:5.0.3" dependencies: - "@solidity-parser/parser": "npm:^0.16.0" + "@solidity-parser/parser": "npm:^0.18.0" ajv: "npm:^6.12.6" - antlr4: "npm:^4.11.0" + antlr4: "npm:^4.13.1-patch-1" ast-parents: "npm:^0.0.1" chalk: "npm:^4.1.2" commander: "npm:^10.0.0" @@ -34807,10 +34587,11 @@ __metadata: glob: "npm:^8.0.3" ignore: "npm:^5.2.4" js-yaml: "npm:^4.1.0" + latest-version: "npm:^7.0.0" lodash: "npm:^4.17.21" pluralize: "npm:^8.0.0" prettier: "npm:^2.8.3" - semver: "npm:^6.3.0" + semver: "npm:^7.5.2" strip-ansi: "npm:^6.0.1" table: "npm:^6.8.1" text-table: "npm:^0.2.0" @@ -34819,7 +34600,7 @@ __metadata: optional: true bin: solhint: solhint.js - checksum: 10/0929e8fb068264942411602377d23769b9b313210edb787edee7402a8521a934d874bc4b4b3e6dffd7e512c4c3ede9d849cabb21f40cd3aa10537462057ebe4e + checksum: 10/87bc03fce019a3b3443a37a1bdaaabcec9a19730175d306b1c21109dcc612a520eb710ab746850505494b509156dd3bcf21d77fdb176abd57d4d4e6ca76cd85e languageName: node linkType: hard @@ -34830,23 +34611,22 @@ __metadata: languageName: node linkType: hard -"solidity-coverage@npm:0.8.2": - version: 0.8.2 - resolution: "solidity-coverage@npm:0.8.2" +"solidity-coverage@npm:^0.8.13": + version: 0.8.13 + resolution: "solidity-coverage@npm:0.8.13" dependencies: "@ethersproject/abi": "npm:^5.0.9" - "@solidity-parser/parser": "npm:^0.14.1" + "@solidity-parser/parser": "npm:^0.18.0" chalk: "npm:^2.4.2" death: "npm:^1.1.0" - detect-port: "npm:^1.3.0" difflib: "npm:^0.2.4" fs-extra: "npm:^8.1.0" ghost-testrpc: "npm:^0.0.2" global-modules: "npm:^2.0.0" globby: "npm:^10.0.1" jsonschema: "npm:^1.2.4" - lodash: "npm:^4.17.15" - mocha: "npm:7.1.2" + lodash: "npm:^4.17.21" + mocha: "npm:^10.2.0" node-emoji: "npm:^1.10.0" pify: "npm:^4.0.1" recursive-readdir: "npm:^2.2.2" @@ -34858,7 +34638,7 @@ __metadata: hardhat: ^2.11.0 bin: solidity-coverage: plugins/bin.js - checksum: 10/8fab639ccbc57fe0e9d6403c8d33ab68cb5e14a36f393b87dce4131d6bf16cb4a0935f75d1268173c4f8d3eb2438435de6d1d35f6b20d64025883ab98d7629cf + checksum: 10/c92e4c1356155e1445241fe0a004c14656517c29e7fec42cc76737dd91e555891861cd716bd5ebb08fbf004f479d2c1ea45bd6dca9350c1ead2ae72c1271f37a languageName: node linkType: hard @@ -34930,7 +34710,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.19, source-map-support@npm:^0.5.20, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.19, source-map-support@npm:^0.5.20, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -35304,13 +35084,6 @@ __metadata: languageName: node linkType: hard -"stealthy-require@npm:^1.1.1": - version: 1.1.1 - resolution: "stealthy-require@npm:1.1.1" - checksum: 10/a408a51f5b6c1fe535e4459732ac0b66d7921583f89fc8289bfdc937a497fe8196219d1e04d234047349b90723ecff1a1cb4a92bef2315e01a3081dc72db8d41 - languageName: node - linkType: hard - "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -35429,7 +35202,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -35451,7 +35224,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2, string-width@npm:^2.1.0, string-width@npm:^2.1.1": +"string-width@npm:^2.1.0, string-width@npm:^2.1.1": version: 2.1.1 resolution: "string-width@npm:2.1.1" dependencies: @@ -35461,17 +35234,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^3.0.0, string-width@npm:^3.1.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" - dependencies: - emoji-regex: "npm:^7.0.1" - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^5.1.0" - checksum: 10/57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 - languageName: node - linkType: hard - "string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -35702,7 +35464,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": +"strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": version: 5.2.0 resolution: "strip-ansi@npm:5.2.0" dependencies: @@ -35773,13 +35535,6 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 - languageName: node - linkType: hard - "strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -35787,6 +35542,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + "strip-literal@npm:^1.3.0": version: 1.3.0 resolution: "strip-literal@npm:1.3.0" @@ -35944,15 +35706,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:6.0.0": - version: 6.0.0 - resolution: "supports-color@npm:6.0.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10/bc443c8e01dc11dec4b12386a2bbd0e82c3108c6b4507076d7c21f70ffabbf539487d52d65fcc21628f5841efb8dbce117ed5d622d7f3023840fa3dc5ee303ba - languageName: node - linkType: hard - "supports-color@npm:8.1.1, supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" @@ -36122,7 +35875,7 @@ __metadata: languageName: node linkType: hard -"sync-request@npm:6.1.0, sync-request@npm:^6.0.0": +"sync-request@npm:6.1.0": version: 6.1.0 resolution: "sync-request@npm:6.1.0" dependencies: @@ -36670,16 +36423,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^2.3.3, tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: "npm:^1.1.28" - punycode: "npm:^2.1.1" - checksum: 10/024cb13a4d1fe9af57f4323dff765dd9b217cc2a69be77e3b8a1ca45600aa33a097b6ad949f225d885e904f4bd3ceccef104741ef202d8378e6ca78e850ff82f - languageName: node - linkType: hard - "tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": version: 4.1.3 resolution: "tough-cookie@npm:4.1.3" @@ -36692,6 +36435,16 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: "npm:^1.1.28" + punycode: "npm:^2.1.1" + checksum: 10/024cb13a4d1fe9af57f4323dff765dd9b217cc2a69be77e3b8a1ca45600aa33a097b6ad949f225d885e904f4bd3ceccef104741ef202d8378e6ca78e850ff82f + languageName: node + linkType: hard + "tr46@npm:^1.0.1": version: 1.0.1 resolution: "tr46@npm:1.0.1" @@ -36949,6 +36702,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.7.0, tslib@npm:^2.6.2": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 + languageName: node + linkType: hard + "tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:~2.5.0": version: 2.5.3 resolution: "tslib@npm:2.5.3" @@ -36956,13 +36716,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.6.2": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 - languageName: node - linkType: hard - "tsort@npm:0.0.1": version: 0.0.1 resolution: "tsort@npm:0.0.1" @@ -37896,13 +37649,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:2.0.1": - version: 2.0.1 - resolution: "uuid@npm:2.0.1" - checksum: 10/a5772e9231dd1e4fb111915f8ffe59f499bae7c20dfde09ac457a7a62b12abd6112d082496bdd209277cba1ac4e7a2bc83b8748ae0ca8fc74401b1df31f126e0 - languageName: node - linkType: hard - "uuid@npm:^10.0.0": version: 10.0.0 resolution: "uuid@npm:10.0.0" @@ -38095,6 +37841,27 @@ __metadata: languageName: node linkType: hard +"viem@npm:2.7.14": + version: 2.7.14 + resolution: "viem@npm:2.7.14" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.0" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@scure/bip32": "npm:1.3.2" + "@scure/bip39": "npm:1.2.1" + abitype: "npm:1.0.0" + isows: "npm:1.0.3" + ws: "npm:8.13.0" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/fda804cdbf0bace0368d0ae6342749f19639675631d8c41f0810692de1af3c61a8ea2548aceebeef7bada9c547ff58b2e45a0225b77a4bfbf0e1ef371dbd3acf + languageName: node + linkType: hard + "viem@npm:2.x, viem@npm:^2.21.35": version: 2.21.35 resolution: "viem@npm:2.21.35" @@ -39055,25 +38822,25 @@ __metadata: languageName: node linkType: hard -"which@npm:1.3.1, which@npm:^1.1.1, which@npm:^1.2.14, which@npm:^1.2.9, which@npm:^1.3.1": - version: 1.3.1 - resolution: "which@npm:1.3.1" +"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" dependencies: isexe: "npm:^2.0.0" bin: - which: ./bin/which - checksum: 10/549dcf1752f3ee7fbb64f5af2eead4b9a2f482108b7de3e85c781d6c26d8cf6a52d37cfbe0642a155fa6470483fe892661a859c03157f24c669cf115f3bbab5e + node-which: ./bin/node-which + checksum: 10/4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f languageName: node linkType: hard -"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" +"which@npm:^1.1.1, which@npm:^1.2.14, which@npm:^1.2.9, which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" dependencies: isexe: "npm:^2.0.0" bin: - node-which: ./bin/node-which - checksum: 10/4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f + which: ./bin/which + checksum: 10/549dcf1752f3ee7fbb64f5af2eead4b9a2f482108b7de3e85c781d6c26d8cf6a52d37cfbe0642a155fa6470483fe892661a859c03157f24c669cf115f3bbab5e languageName: node linkType: hard @@ -39089,15 +38856,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:1.1.3": - version: 1.1.3 - resolution: "wide-align@npm:1.1.3" - dependencies: - string-width: "npm:^1.0.2 || 2" - checksum: 10/187642e0bbaf36d7ef95e85fec9cabe281a29bebfbeb218024fedbef3f066374e99fbf8391a57f2e40612dca4fa460feeeeb526bb17de7d9d0654b6b4bd1be2e - languageName: node - linkType: hard - "wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -39380,17 +39138,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^5.1.0": - version: 5.1.0 - resolution: "wrap-ansi@npm:5.1.0" - dependencies: - ansi-styles: "npm:^3.2.0" - string-width: "npm:^3.0.0" - strip-ansi: "npm:^5.0.0" - checksum: 10/f02bbbd13f40169f3d69b8c95126c1d2a340e6f149d04125527c3d501d74a304a434f4329a83bfdc3b9fdb82403e9ae0cdd7b83a99f0da0d5a7e544f6b709914 - languageName: node - linkType: hard - "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -39580,13 +39327,6 @@ __metadata: languageName: node linkType: hard -"xmlhttprequest@npm:1.8.0": - version: 1.8.0 - resolution: "xmlhttprequest@npm:1.8.0" - checksum: 10/4f2cc2029f863d425ba8d6ef717de7ee44cd44ceae97df45c122343ecbcd4418559fbb8bdc3fa3678ea8cb24fb31a143ed0e8f7bb302c13185bc4486d81d8399 - languageName: node - linkType: hard - "xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -39659,16 +39399,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10/89a84fbb32827832a1d34f596f5efe98027c398af731728304a920c2f9ba03071c694418723df16882ebb646ddb72a8fb1c9567552afcbc2f268e86c4faea5a8 - languageName: node - linkType: hard - "yargs-parser@npm:20.2.4": version: 20.2.4 resolution: "yargs-parser@npm:20.2.4" @@ -39676,16 +39406,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^15.0.1": - version: 15.0.3 - resolution: "yargs-parser@npm:15.0.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10/b3c70f87ca153492c74ee948ef5bd8806f8e4b5647fa56e22df14fdcf24f12d8ffcb2ed90cd668760b2676bb33705711c1527573c1fd18798f98700584b80fef - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -39710,19 +39430,6 @@ __metadata: languageName: node linkType: hard -"yargs-unparser@npm:1.6.4": - version: 1.6.4 - resolution: "yargs-unparser@npm:1.6.4" - dependencies: - camelcase: "npm:^5.3.1" - decamelize: "npm:^1.2.0" - flat: "npm:^5.0.2" - is-plain-obj: "npm:^1.1.0" - yargs: "npm:^14.2.3" - checksum: 10/428695924f6dc3b660cab37e5f1bb46a7bc64bb81e583beaaf40155f2d33440e3776518528e98902d256ed68fe4cc74c54c0188481ce8dba6857bc1656b5ca06 - languageName: node - linkType: hard - "yargs-unparser@npm:2.0.0": version: 2.0.0 resolution: "yargs-unparser@npm:2.0.0" @@ -39735,24 +39442,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:13.3.2": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" - dependencies: - cliui: "npm:^5.0.0" - find-up: "npm:^3.0.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^3.0.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^13.1.2" - checksum: 10/608ba2e62ac2c7c4572b9c6f7a2d3ef76e2deaad8c8082788ed29ae3ef33e9f68e087f07eb804ed5641de2bc4eab977405d3833b1d11ae8dbbaf5847584d96be - languageName: node - linkType: hard - "yargs@npm:16.2.0, yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" @@ -39783,25 +39472,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^14.2.3": - version: 14.2.3 - resolution: "yargs@npm:14.2.3" - dependencies: - cliui: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^3.0.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^3.0.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^15.0.1" - checksum: 10/4e7af0caac9a3cc08a7341d66e12db995cfe4163c64da8bd233ab9f69c7df18bab13b52c9010ae571d2fa94aef307250df000dfe1d01683396de83a6280f6e21 - languageName: node - linkType: hard - "yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" @@ -39842,12 +39512,14 @@ __metadata: languageName: node linkType: hard -"zksync-web3@npm:^0.14.3": - version: 0.14.4 - resolution: "zksync-web3@npm:0.14.4" +"zksync-ethers@npm:^5.0.0": + version: 5.10.0 + resolution: "zksync-ethers@npm:5.10.0" + dependencies: + ethers: "npm:~5.7.0" peerDependencies: - ethers: ^5.7.0 - checksum: 10/a1566a2a2ba34a3026680f3b4000ffa02593e02d9c73a4dd143bde929b5e39b09544d429bccad0479070670cfdad5f6836cb686c4b8d7954b4d930826be91c92 + ethers: ~5.7.0 + checksum: 10/826719e2e40731e1104cf8a0c16c758526de6ca9e907d0483eb5bd80b635f02e3cce012115b75d68976a8dd746d63d4f83d576cc3bddc18a02a49d2bc023347f languageName: node linkType: hard