diff --git a/.gitignore b/.gitignore index 664e288c..f11d5823 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ data/ .vscode/ .env artifacts/ +cache diff --git a/hardhat.config.ts b/hardhat.config.ts index c50fde57..21de4a3e 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,5 +1,6 @@ import * as dotenv from "dotenv"; import type { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-viem"; import "@nomiclabs/hardhat-solhint"; import "hardhat-chai-matchers-viem"; import "hardhat-gas-reporter" diff --git a/package.json b/package.json index 5c6f529a..09ceefa2 100644 --- a/package.json +++ b/package.json @@ -35,12 +35,11 @@ "author": "Sygma", "license": "BUSL-1.1", "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.8", - "@nomicfoundation/hardhat-ignition": "^0.15.0", + "@metamask/eth-sig-util": "^8.1.2", "@nomicfoundation/hardhat-ignition-viem": "^0.15.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", "@nomicfoundation/hardhat-verify": "^2.0.0", - "@nomicfoundation/hardhat-viem": "^2.0.5", + "@nomicfoundation/hardhat-viem": "^2.0.6", "@nomiclabs/hardhat-solhint": "^4.0.1", "@types/chai": "^5.0.1", "@types/chai-as-promised": "^7.1.6", @@ -54,21 +53,20 @@ "eslint-plugin-import": "^2.25.2", "eslint-plugin-n": "^15.0.0", "eslint-plugin-promise": "^6.0.0", - "hardhat": "^2.22.15", + "ethers": "^6.13.5", + "hardhat": "^2.22.18", "hardhat-chai-matchers-viem": "^2.0.8", "hardhat-gas-reporter": "^2.2.2", "prettier": "2.8.1", "solhint": "^3.3.7", "solidity-coverage": "^0.8.0", + "solmate": "^6.8.0", "ts-node": ">=8.0.0", "typescript": "5.0.3", "viem": "^2.13.7" }, "dependencies": { - "@metamask/eth-sig-util": "^8.1.1", "@openzeppelin/contracts": "4.5.0", - "@uniswap/v3-periphery": "^1.4.4", - "ethers": "^6.13.4", - "solmate": "^6.2.0" + "@uniswap/v3-periphery": "^1.4.4" } } diff --git a/test/adapters/native/collectFee.test.ts b/test/adapters/native/collectFee.test.ts index 80e80962..9057da02 100644 --- a/test/adapters/native/collectFee.test.ts +++ b/test/adapters/native/collectFee.test.ts @@ -77,6 +77,7 @@ describe("Bridge - [collect fee - native token]", () => { // check that correct ETH amount is successfully transferred to the adapter const adapterBalanceAfter = await getBalance(NativeTokenTransferGatewayInstance); const handlerBalanceAfter = await getBalance(NativeTokenHandlerInstance); + console.log("123-0", depositAmount) console.log("123-1", transferredAmount) console.log("123-2", handlerBalanceBefore) console.log("123-3", handlerBalanceAfter) diff --git a/test/adapters/native/decimalConversion.test.ts b/test/adapters/native/decimalConversion.test.ts index 52a226f0..92ca546d 100644 --- a/test/adapters/native/decimalConversion.test.ts +++ b/test/adapters/native/decimalConversion.test.ts @@ -3,7 +3,7 @@ import hre from "hardhat"; import {assert, expect} from "chai"; -import {encodeAbiParameters, Hex, keccak256, parseAbiParameters, parseEther, parseUnits, WalletClient, concat, toHex} from "viem"; +import {encodeAbiParameters, Hex, keccak256, parseAbiParameters, parseEther, parseUnits, WalletClient, concat, toHex, toBytes} from "viem"; import {createBtcDepositData, createERCDepositData, deploySourceChainContracts, getBalance, mpcAddress, signTypedProposal, trimPrefix} from "../../helpers"; import {ContractTypesMap} from "hardhat/types"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; @@ -18,7 +18,7 @@ describe("Bridge - [decimal conversion - native token]", () => { const resourceID = toHex(650, {size:32}); const btcrecipient = "bc1qs0fcdq73vgurej48yhtupzcv83un2p5qhsje7n"; const originDecimalPlaces = 8; - const originHexDecimalPlaces = toHex(originDecimalPlaces); + const originHexDecimalPlaces = toHex(originDecimalPlaces, {size: 1}); const depositAmount = parseUnits("1", originDecimalPlaces); const fee = parseUnits("0.1", originDecimalPlaces); const transferredAmount = depositAmount - fee; @@ -91,9 +91,8 @@ describe("Bridge - [decimal conversion - native token]", () => { await BridgeInstance.write.endKeygen([mpcAddress]); // send ETH to destination adapter for transfers - await depositor.sendTransaction({ - account: depositor!.account, + account: depositor.account!.address, to: NativeTokenHandlerInstance.address, value: BigInt(1000000000000000000), chain: null @@ -150,7 +149,7 @@ describe("Bridge - [decimal conversion - native token]", () => { data: proposalData, }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/adapters/native/executeProposal.test.ts b/test/adapters/native/executeProposal.test.ts index 1d6c1c0e..fbb27023 100644 --- a/test/adapters/native/executeProposal.test.ts +++ b/test/adapters/native/executeProposal.test.ts @@ -88,10 +88,11 @@ describe("Bridge - [execute proposal - native token]", () => { await BridgeInstance.write.endKeygen([mpcAddress]); // send ETH to destination adapter for transfers - await web3.eth.sendTransaction({ - account: depositor.account, + await depositor.sendTransaction({ + account: depositor.account!.address, to: NativeTokenHandlerInstance.address, - value: "1000000000000000000" + value: BigInt(1000000000000000000), + chain: null }) }); @@ -107,7 +108,7 @@ describe("Bridge - [execute proposal - native token]", () => { }); it("should create and execute executeProposal successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -145,7 +146,7 @@ describe("Bridge - [execute proposal - native token]", () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -181,7 +182,7 @@ describe("Bridge - [execute proposal - native token]", () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/adapters/native/optionalContractCall/collectFee.test.ts b/test/adapters/native/optionalContractCall/collectFee.test.ts index 25a62f2a..6ed8a119 100644 --- a/test/adapters/native/optionalContractCall/collectFee.test.ts +++ b/test/adapters/native/optionalContractCall/collectFee.test.ts @@ -38,7 +38,9 @@ describe("Bridge - [collect fee - native token]", () => { DefaultMessageReceiverInstance, BridgeInstance, BasicFeeHandlerInstance, + NativeTokenHandlerInstance, ERC20MintableInstance, + FeeHandlerRouterInstance } = await loadFixture(deploySourceChainContracts)); [ , diff --git a/test/adapters/native/optionalContractCall/decimalConversion.test.ts b/test/adapters/native/optionalContractCall/decimalConversion.test.ts index 04199acd..56cc0480 100644 --- a/test/adapters/native/optionalContractCall/decimalConversion.test.ts +++ b/test/adapters/native/optionalContractCall/decimalConversion.test.ts @@ -127,10 +127,11 @@ describe("Bridge - [decimal conversion - native token]", () => { }; // send ETH to destination adapter for transfers - await web3.eth.sendTransaction({ - account: depositor.account, + await depositor.sendTransaction({ + account: depositor.account!.address, to: NativeTokenHandlerInstance.address, - value: "1000000000000000000" + value: BigInt(1000000000000000000), + chain: null }) // set MPC address to unpause the Bridge @@ -192,7 +193,7 @@ describe("Bridge - [decimal conversion - native token]", () => { data: proposalData, }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/adapters/native/optionalContractCall/deposit.test.ts b/test/adapters/native/optionalContractCall/deposit.test.ts index 0c3e4b51..bc9e01d7 100644 --- a/test/adapters/native/optionalContractCall/deposit.test.ts +++ b/test/adapters/native/optionalContractCall/deposit.test.ts @@ -45,6 +45,9 @@ describe("Bridge - [deposit - native token]", () => { BridgeInstance, ERC20MintableInstance, BasicFeeHandlerInstance, + NativeTokenTransferGatewayInstance, + NativeTokenHandlerInstance, + FeeHandlerRouterInstance } = await loadFixture(deploySourceChainContracts)); [ , diff --git a/test/adapters/native/optionalContractCall/distributeFee.test.ts b/test/adapters/native/optionalContractCall/distributeFee.test.ts index 68d5d351..ca8dabfd 100644 --- a/test/adapters/native/optionalContractCall/distributeFee.test.ts +++ b/test/adapters/native/optionalContractCall/distributeFee.test.ts @@ -2,8 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only import hre from 'hardhat'; -import {concat, encodeAbiParameters, encodeFunctionData, Hex, keccak256, parseAbiParameters, parseEther, parseUnits, toFunctionSelector, toHex, WalletClient, zeroAddress} from "viem"; -import {createBtcDepositData, createGmpDepositData, createMessageCallData, createOptionalContractCallDepositData, createResourceID, deploySourceChainContracts, mpcAddress, trimPrefix} from "../../../helpers"; +import {concat, encodeAbiParameters, encodeFunctionData, formatEther, formatUnits, Hex, keccak256, parseAbiParameters, parseEther, parseUnits, toFunctionSelector, toHex, WalletClient, zeroAddress} from "viem"; +import {createBtcDepositData, createGmpDepositData, createMessageCallData, createOptionalContractCallDepositData, createResourceID, deploySourceChainContracts, getBalance, mpcAddress, trimPrefix} from "../../../helpers"; import {ContractTypesMap} from 'hardhat/types'; import {loadFixture} from '@nomicfoundation/hardhat-network-helpers'; import {assert, expect} from 'chai'; @@ -43,6 +43,8 @@ describe("Native token adapter - [distributeFee]", () => { BridgeInstance, ERC20MintableInstance, BasicFeeHandlerInstance, + NativeTokenHandlerInstance, + NativeTokenTransferGatewayInstance, } = await loadFixture(deploySourceChainContracts)); [ , @@ -111,11 +113,8 @@ describe("Native token adapter - [distributeFee]", () => { // check the balance is 0 assert.equal( - web3.utils.fromWei( - await getBalance(BridgeInstance.address), - "ether" - ), - "0" + await getBalance(BridgeInstance), + parseEther("0") ); await NativeTokenTransferGatewayInstance.write.depositToEVMWithMessage([ destinationDomainID, @@ -128,25 +127,16 @@ describe("Native token adapter - [distributeFee]", () => { } ); assert.equal( - web3.utils.fromWei( - await getBalance(BridgeInstance.address), - "ether" - ), - "0" + await getBalance(BridgeInstance), + parseEther("0") ); assert.equal( - web3.utils.fromWei( - await getBalance(NativeTokenTransferGatewayInstance.address), - "ether" - ), - "0" + await getBalance(NativeTokenTransferGatewayInstance), + parseEther("0") ); assert.equal( - web3.utils.fromWei( - await getBalance(NativeTokenHandlerInstance.address), - "ether" - ), - Ethers.utils.formatUnits(transferredAmount) + await getBalance(NativeTokenHandlerInstance), + parseEther(transferredAmount.toString()) ); const depositorBalanceBefore = await getBalance(depositor); @@ -171,8 +161,8 @@ describe("Native token adapter - [distributeFee]", () => { payout ); - const depositorBalanceAfter = await getBalance(depositor.account!.address); - const recipientBalanceAfter = await getBalance(recipient.account!.address); + const depositorBalanceAfter = await getBalance(depositor); + const recipientBalanceAfter = await getBalance(recipient); assert.equal(depositorBalanceAfter, depositorBalanceBefore + payout); assert.equal(recipientBalanceAfter, recipientBalanceBefore + payout); }); @@ -193,18 +183,12 @@ describe("Native token adapter - [distributeFee]", () => { ); assert.equal( - web3.utils.fromWei( - await getBalance(NativeTokenTransferGatewayInstance.address), - "ether" - ), - "0" + await getBalance(NativeTokenTransferGatewayInstance), + parseEther("0") ); assert.equal( - web3.utils.fromWei( - await getBalance(NativeTokenHandlerInstance.address), - "ether" - ), - Ethers.utils.formatUnits(transferredAmount) + await getBalance(NativeTokenHandlerInstance), + parseEther(transferredAmount.toString()) ); const payout = parseEther("0.01"); @@ -231,18 +215,12 @@ describe("Native token adapter - [distributeFee]", () => { ); assert.equal( - web3.utils.fromWei( - await getBalance(NativeTokenTransferGatewayInstance.address), - "ether" - ), - "0" + await getBalance(NativeTokenTransferGatewayInstance), + parseEther("0") ); assert.equal( - web3.utils.fromWei( - await getBalance(NativeTokenHandlerInstance.address), - "ether" - ), - Ethers.utils.formatUnits(transferredAmount) + await getBalance(NativeTokenHandlerInstance), + parseEther(transferredAmount.toString()) ); const payout = parseEther("0.01"); diff --git a/test/adapters/native/optionalContractCall/executeProposal.test.ts b/test/adapters/native/optionalContractCall/executeProposal.test.ts index c697ba85..d3d3219b 100644 --- a/test/adapters/native/optionalContractCall/executeProposal.test.ts +++ b/test/adapters/native/optionalContractCall/executeProposal.test.ts @@ -48,6 +48,10 @@ describe("Bridge - [execute proposal - native token]", () => { BridgeInstance, ERC20MintableInstance, BasicFeeHandlerInstance, + DefaultMessageReceiverInstance, + NativeTokenTransferGatewayInstance, + NativeTokenHandlerInstance, + FeeHandlerRouterInstance } = await loadFixture(deploySourceChainContracts)); [ , @@ -139,7 +143,7 @@ describe("Bridge - [execute proposal - native token]", () => { }); it("should create and execute executeProposal with contract call successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -159,8 +163,8 @@ describe("Bridge - [execute proposal - native token]", () => { ).not.to.be.reverted; const recipientNativeBalanceBefore = await getBalance(recipient); - const recipientERC20BalanceBefore = await ERC20MintableInstance.read.balanceOf([recipient]); - const defaultReceiverBalanceBefore = await getBalance(DefaultMessageReceiverInstance.address); + const recipientERC20BalanceBefore = await ERC20MintableInstance.read.balanceOf([recipient.account!.address]); + const defaultReceiverBalanceBefore = await getBalance(DefaultMessageReceiverInstance); await expect( BridgeInstance.write.executeProposal([proposal, proposalSignedData], { @@ -180,7 +184,7 @@ describe("Bridge - [execute proposal - native token]", () => { // check that tokens are transferred to recipient address const recipientNativeBalanceAfter = await getBalance(recipient); const recipientERC20BalanceAfter = await ERC20MintableInstance.read.balanceOf([recipient.account!.address]); - const defaultReceiverBalanceAfter = await getBalance(DefaultMessageReceiverInstance.address); + const defaultReceiverBalanceAfter = await getBalance(DefaultMessageReceiverInstance); assert.strictEqual( recipientNativeBalanceBefore + transferredAmount, @@ -194,7 +198,7 @@ describe("Bridge - [execute proposal - native token]", () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -234,7 +238,7 @@ describe("Bridge - [execute proposal - native token]", () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -321,7 +325,7 @@ describe("Bridge - [execute proposal - native token]", () => { await DefaultMessageReceiverInstance.read.SYGMA_HANDLER_ROLE(), NativeTokenHandlerInstance.address ]); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -358,7 +362,7 @@ describe("Bridge - [execute proposal - native token]", () => { it("should revert if insufficient gas limit left for executing action", async () => { const insufficientExecutionGasAmount = BigInt(100000); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/contractBridge/depositERC1155.test.ts b/test/contractBridge/depositERC1155.test.ts index e42979d4..32d9f0b6 100644 --- a/test/contractBridge/depositERC1155.test.ts +++ b/test/contractBridge/depositERC1155.test.ts @@ -54,7 +54,7 @@ describe("Bridge - [deposit - ERC1155]", () => { depositor.account!.address, [tokenID], [initialTokenAmount], - "0x0" + "0x00" ]); await ERC1155MintableInstance.write.setApprovalForAll([ ERC1155HandlerInstance.address, @@ -184,7 +184,7 @@ describe("Bridge - [deposit - ERC1155]", () => { await expect( BridgeInstance.write.deposit([ destinationDomainID, - "0x0", + "0x00", depositData, feeData ], @@ -199,7 +199,7 @@ describe("Bridge - [deposit - ERC1155]", () => { await expect( BridgeInstance.write.deposit([ originDomainID, - "0x0", + "0x00", depositData, feeData ], diff --git a/test/contractBridge/depositERC20.test.ts b/test/contractBridge/depositERC20.test.ts index 42a894ea..18526720 100644 --- a/test/contractBridge/depositERC20.test.ts +++ b/test/contractBridge/depositERC20.test.ts @@ -43,6 +43,7 @@ describe("Bridge - [deposit - ERC20]", async () => { [ , depositor, + recipient ] = await hre.viem.getWalletClients(); const resourceID1 = createResourceID( @@ -202,7 +203,7 @@ describe("Bridge - [deposit - ERC20]", async () => { await expect( BridgeInstance.write.deposit([ destinationDomainID, - "0x0", + "0x00", depositData, feeData ], @@ -217,7 +218,7 @@ describe("Bridge - [deposit - ERC20]", async () => { await expect( BridgeInstance.write.deposit([ originDomainID, - "0x0", + "0x00", depositData, feeData ], diff --git a/test/contractBridge/depositERC721.test.ts b/test/contractBridge/depositERC721.test.ts index 977b3ebe..5035cd95 100644 --- a/test/contractBridge/depositERC721.test.ts +++ b/test/contractBridge/depositERC721.test.ts @@ -182,7 +182,7 @@ describe("Bridge - [deposit - ERC721]", () => { it("Deposit destination domain can not be current bridge domain ", async () => { await expect( - BridgeInstance.write.deposit([originDomainID, "0x0", depositData, feeData], + BridgeInstance.write.deposit([originDomainID, "0x00", depositData, feeData], { account: depositor.account, } diff --git a/test/contractBridge/depositXC20.test.ts b/test/contractBridge/depositXC20.test.ts index c61f322e..85e5393b 100644 --- a/test/contractBridge/depositXC20.test.ts +++ b/test/contractBridge/depositXC20.test.ts @@ -6,7 +6,7 @@ import {ContractTypesMap} from "hardhat/types"; import {createERCDepositData, createResourceID, deploySourceChainContracts, mpcAddress} from "../helpers"; import {loadFixture} from '@nomicfoundation/hardhat-network-helpers'; import {assert, expect} from 'chai'; -import {Hex, WalletClient} from 'viem'; +import {Hex, WalletClient, zeroHash} from 'viem'; describe("Bridge - [deposit - XRC20]", async () => { @@ -193,7 +193,10 @@ describe("Bridge - [deposit - XRC20]", async () => { await expect(depositTx).to.emit(BridgeInstance, "Deposit").withArgs( destinationDomainID, resourceID1.toLowerCase(), - expectedDepositNonce + expectedDepositNonce, + depositor, + depositData.toLowerCase(), + null ); depositTx = await BridgeInstance.write.deposit([ @@ -219,7 +222,7 @@ describe("Bridge - [deposit - XRC20]", async () => { await expect( BridgeInstance.write.deposit([ destinationDomainID, - "0x0", + zeroHash, depositData, feeData ], @@ -234,7 +237,7 @@ describe("Bridge - [deposit - XRC20]", async () => { await expect( BridgeInstance.write.deposit([ originDomainID, - "0x0", + zeroHash, depositData, feeData ], @@ -352,7 +355,10 @@ describe("Bridge - [deposit - XRC20]", async () => { await expect(depositTx).to.emit(BridgeInstance, "Deposit").withArgs( destinationDomainID, resourceID1.toLowerCase(), - expectedDepositNonce + expectedDepositNonce, + depositor, + depositData.toLowerCase(), + null ); depositTx = await BridgeInstance.write.deposit([ @@ -377,7 +383,7 @@ describe("Bridge - [deposit - XRC20]", async () => { await expect( BridgeInstance.write.deposit([ destinationDomainID, - "0x0", + zeroHash, depositData, feeData ], @@ -390,7 +396,7 @@ describe("Bridge - [deposit - XRC20]", async () => { it("Deposit destination domain can not be current bridge domain ", async () => { await expect( - BridgeInstance.write.deposit([originDomainID, "0x0", depositData, feeData], + BridgeInstance.write.deposit([originDomainID, zeroHash, depositData, feeData], { account: depositor.account, } diff --git a/test/contractBridge/executeProposalERC20.test.ts b/test/contractBridge/executeProposalERC20.test.ts index 6ffb7659..cf3884ae 100644 --- a/test/contractBridge/executeProposalERC20.test.ts +++ b/test/contractBridge/executeProposalERC20.test.ts @@ -101,7 +101,7 @@ describe("Bridge - [execute proposal - ERC20]", () => { }); it("should create and execute executeProposal successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -146,7 +146,7 @@ describe("Bridge - [execute proposal - ERC20]", () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -191,7 +191,7 @@ describe("Bridge - [execute proposal - ERC20]", () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/contractBridge/executeProposalXC20.test.ts b/test/contractBridge/executeProposalXC20.test.ts index 964df133..b989667d 100644 --- a/test/contractBridge/executeProposalXC20.test.ts +++ b/test/contractBridge/executeProposalXC20.test.ts @@ -9,7 +9,6 @@ import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from "chai"; import {Proposal} from '../../types'; -const Helpers = require("../helpers"); describe("Bridge - [execute proposal - XC20]", async () => { const originDomainID = 1; @@ -122,7 +121,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { }); it("should create and execute executeProposal successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -169,7 +168,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -213,7 +212,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -316,7 +315,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { }); it("should create and execute executeProposal successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -363,7 +362,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -407,7 +406,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -495,7 +494,7 @@ describe("Bridge - [execute proposal - XC20]", async () => { it(`transfer event should be emitted with expected values when executing proposal - mint to handler and then transfer to recipient`, async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/contractBridge/executeProposals.test.ts b/test/contractBridge/executeProposals.test.ts index a8d0528f..6368899f 100644 --- a/test/contractBridge/executeProposals.test.ts +++ b/test/contractBridge/executeProposals.test.ts @@ -108,7 +108,7 @@ describe("Bridge - [execute proposals]", () => { depositor.account!.address, [tokenID], [initialTokenAmount], - "0x0" + "0x00" ]); await ERC20MintableInstance.write.approve([ @@ -214,7 +214,7 @@ describe("Bridge - [execute proposals]", () => { }); it("should create and execute executeProposal successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, proposalsForExecution ); @@ -300,7 +300,7 @@ describe("Bridge - [execute proposals]", () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, proposalsForExecution ); @@ -398,7 +398,7 @@ describe("Bridge - [execute proposals]", () => { }); it("should fail executing proposals if empty array is passed for execution", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, proposalsForExecution ); @@ -414,7 +414,7 @@ describe("Bridge - [execute proposals]", () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, proposalsForExecution ); diff --git a/test/contractBridge/executeWithFailedHandler.test.ts b/test/contractBridge/executeWithFailedHandler.test.ts index 0452cdeb..1f47412c 100644 --- a/test/contractBridge/executeWithFailedHandler.test.ts +++ b/test/contractBridge/executeWithFailedHandler.test.ts @@ -2,29 +2,25 @@ // SPDX-License-Identifier: LGPL-3.0-only import hre from 'hardhat'; -import {concat, fromBytes, Hex, keccak256, toBytes, toFunctionSelector, toHex} from "viem"; -import {deploySourceChainContracts, mpcAddress, trimPrefix, decimalToPaddedBinary} from "../helpers"; +import {concat, Hex, keccak256, toBytes, toFunctionSelector, toHex, WalletClient} from "viem"; +import {deploySourceChainContracts, mpcAddress, trimPrefix, decimalToPaddedBinary, createResourceID, constructGenericHandlerSetResourceData, blankFunctionDepositorOffset, blankFunctionSig, createERCDepositData, createERC721DepositProposalData, createERC1155DepositData, createERC1155DepositProposalData, createGmpDepositData, signTypedProposal} from "../helpers"; import {ContractTypesMap} from "hardhat/types"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from 'chai'; +import {Proposal} from '../../types'; -const Helpers = require("../helpers"); describe("Bridge - [execute - FailedHandlerExecution]", async () => { const originDomainID = 1; const destinationDomainID = 2; - const admin = accounts[0]; - const depositor = accounts[1]; - const recipient = accounts[2]; - const relayer1 = accounts[3]; const tokenID = BigInt(1); const erc721DepositMetadata = "0xf00d"; const initialTokenAmount = BigInt(100); const depositAmount = BigInt(10); const erc20Allowance = BigInt(5000); - const expectedDepositNonces = [1, 2, 3, 4, 5, 6]; - const destinationMaxFee = 900000; + const expectedDepositNonces = [BigInt(1), BigInt(2), BigInt(3), BigInt(4), BigInt(5), BigInt(6)]; + const destinationMaxFee = BigInt(900000); const hashOfTestStore = keccak256("0xc0ffee"); const feeData = "0x"; const emptySetResourceData = "0x"; @@ -43,10 +39,13 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { let XC20HandlerInstance: ContractTypesMap["XC20Handler"];; let TestStoreInstance: ContractTypesMap["TestStore"]; + let depositor: WalletClient; + let recipient: WalletClient; + let relayer1: WalletClient; + let depositFunctionSignature: Hex; let GmpHandlerSetResourceData; let erc721DepositProposalDataHash: Hex; - let erc721RevertDepositProposalDataHash: Hex; let erc20ResourceID: Hex; let erc721ResourceID: Hex; @@ -64,6 +63,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { let genericDepositProposalDataHash: Hex; let proposalsForExecution: Array; + let erc1155DepositData: Hex; beforeEach(async () => { ({ @@ -82,9 +82,9 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { HandlerRevert: ERC721RevertHandlerInstance } = await loadFixture(deploySourceChainContracts)); [ - admin, + , depositor, - evmRecipient, + recipient, relayer1 ] = await hre.viem.getWalletClients(); @@ -124,7 +124,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { blankFunctionSig ); - await ERC20MintableInstance.write.mint([depositor, initialTokenAmount]); + await ERC20MintableInstance.write.mint([depositor.account!.address, initialTokenAmount]); await BridgeInstance.write.adminSetResource([ ERC20HandlerInstance.address, erc20ResourceID, @@ -140,17 +140,17 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { ERC721RevertHandlerInstance.address ]); await ERC721MintableInstance.write.mint([ - depositor, + depositor.account!.address, tokenID, erc721DepositMetadata ]); await ERC721RevertMintableInstance.write.mint([ - depositor, + depositor.account!.address, tokenID, erc721DepositMetadata ]); await XC20TestInstance.write.mint([ - depositor, + depositor.account!.address, initialTokenAmount ]); await BridgeInstance.write.adminSetResource([ @@ -166,10 +166,10 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { emptySetResourceData ]); await ERC1155MintableInstance.write.mintBatch([ - depositor, + depositor.account!.address, [tokenID], [initialTokenAmount], - "0x0" + "0x00" ]); await BridgeInstance.write.adminSetResource([ ERC1155HandlerInstance.address, @@ -234,18 +234,18 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { erc20DepositProposalData = createERCDepositData( depositAmount, 20, - recipient + recipient.account!.address ); erc721DepositData = createERCDepositData( tokenID, 20, - recipient + recipient.account!.address ); erc721DepositProposalData = createERC721DepositProposalData( tokenID, 20, - recipient, + recipient.account!.address, erc721DepositMetadata.length, erc721DepositMetadata ); @@ -258,23 +258,16 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { xc20DepositProposalData = createERCDepositData( depositAmount * BigInt(5), // amount greater than allowance 20, - recipient + recipient.account!.address ); erc721RevertDepositProposalData = createERC721DepositProposalData( tokenID, 20, - recipient, + recipient.account!.address, erc721DepositMetadata.length, erc721DepositMetadata ); - erc721RevertDepositProposalDataHash = keccak256( - concat([ - ERC721RevertHandlerInstance.address, - trimPrefix(erc721RevertDepositProposalData) - ]) - ); - erc1155DepositData = createERC1155DepositData( [tokenID], @@ -283,7 +276,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { erc1155DepositProposalData = createERC1155DepositProposalData( [tokenID], [depositAmount], - recipient, + recipient.account!.address, "0x" ); @@ -291,7 +284,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { depositFunctionSignature, TestStoreInstance.address, destinationMaxFee, - depositor, + depositor.account!.address, hashOfTestStore ); genericDepositProposalDataHash = keccak256( @@ -355,7 +348,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // depositNonce is not used assert.isFalse(depositProposalBeforeFailedExecute); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposalsForExecution[0]] ); @@ -365,7 +358,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { proposalSignedData ], { - account: relayer1 + account: relayer1.account!.address } ); @@ -396,7 +389,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // depositNonce is not used assert.isFalse(depositProposalBeforeFailedExecute); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposalsForExecution[2]] ); @@ -406,7 +399,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { proposalSignedData ], { - account: relayer1 + account: relayer1.account!.address } ); @@ -437,7 +430,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // depositNonce is not used assert.isFalse(depositProposalBeforeFailedExecute); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposalsForExecution[3]] ); @@ -447,7 +440,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { proposalSignedData ], { - account: relayer1 + account: relayer1.account!.address } ); @@ -478,7 +471,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // depositNonce is not used assert.isFalse(depositProposalBeforeFailedExecute); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposalsForExecution[4]] ); @@ -488,7 +481,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { proposalSignedData ], { - account: relayer1 + account: relayer1.account!.address } ); @@ -519,7 +512,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // depositNonce is not used assert.isFalse(depositProposalBeforeFailedExecute); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposalsForExecution[5]] ); @@ -529,7 +522,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { proposalSignedData ], { - account: relayer1 + account: relayer1.account!.address } ); @@ -560,7 +553,7 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // depositNonce is not used assert.isFalse(depositProposalBeforeFailedExecute); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, proposalsForExecution ); @@ -629,13 +622,13 @@ describe("Bridge - [execute - FailedHandlerExecution]", async () => { // recipient ERC20 token balances hasn't changed const recipientERC20Balance = await ERC20MintableInstance.read.balanceOf([ - recipient + recipient.account!.address ]); assert.strictEqual(recipientERC20Balance, BigInt(0)); // recipient ERC721 token balance has changed to 1 token const recipientERC721Balance = await ERC721MintableInstance.read.balanceOf([ - recipient + recipient.account!.address ]); assert.strictEqual(recipientERC721Balance, BigInt(1)); diff --git a/test/defaultMessageReceiver/direct.test.ts b/test/defaultMessageReceiver/direct.test.ts index bbc908b3..cbc08a02 100644 --- a/test/defaultMessageReceiver/direct.test.ts +++ b/test/defaultMessageReceiver/direct.test.ts @@ -19,6 +19,7 @@ describe("DefaultMessageReceiver - direct interaction", () => { let ForwarderInstance2: ContractTypesMap["Forwarder"]; let admin: WalletClient; + let depositor: WalletClient; let handlerMock: WalletClient let recipient: WalletClient; let relayer1: WalletClient; @@ -35,6 +36,7 @@ describe("DefaultMessageReceiver - direct interaction", () => { } = await loadFixture(deploySourceChainContracts)); [ admin, + depositor, handlerMock, recipient, relayer1, @@ -48,7 +50,7 @@ describe("DefaultMessageReceiver - direct interaction", () => { }); it("should have valid defaults", async () => { - assert.equal(await DefaultMessageReceiverInstance.read._recoverGas(), recoveredGas); + assert.equal(await DefaultMessageReceiverInstance.read._recoverGas(), BigInt(100000)); assert.isTrue(await DefaultMessageReceiverInstance.read.hasRole([SYGMA_HANDLER_ROLE, handlerMock.account!.address])); }); @@ -94,7 +96,7 @@ describe("DefaultMessageReceiver - direct interaction", () => { await expect( DefaultMessageReceiverInstance.write.handleSygmaMessage([zeroAddress, BigInt(0), message], { account: handlerMock.account, - gas: recoveredGas, + gas: BigInt(100000), }), ).to.be.revertedWithCustomError(DefaultMessageReceiverInstance, "InsufficientGasLimit()"); }); @@ -106,18 +108,19 @@ describe("DefaultMessageReceiver - direct interaction", () => { actions, recipient.account!.address ); - await DefaultMessageReceiverInstance.write.handleSygmaMessage([zeroAddress, 0, message], { + await DefaultMessageReceiverInstance.write.handleSygmaMessage([zeroAddress, BigInt(0), message], { account: handlerMock.account, - gas: 200000, + gas: BigInt(200000), }); }); it("should not return native token if not received during handling", async () => { const actions: Array = []; - await web3.eth.sendTransaction({ - account: admin.account, + await depositor.sendTransaction({ + account: admin.account!.address, to: DefaultMessageReceiverInstance.address, - value: 100, + value: BigInt(100), + chain: null }); const message = createMessageCallData( transactionId, @@ -126,17 +129,18 @@ describe("DefaultMessageReceiver - direct interaction", () => { ); await DefaultMessageReceiverInstance.write.handleSygmaMessage([zeroAddress, BigInt(0), message], { account: handlerMock.account, - gas: 200000, + gas: BigInt(200000), }); assert.equal(await getBalance(DefaultMessageReceiverInstance), BigInt(100)); }); it("should return full native token balance if contract balance increased during handling", async () => { const actions: Array = []; - await web3.eth.sendTransaction({ - account: admin.account, + await depositor.sendTransaction({ + account: admin.account!.address, to: DefaultMessageReceiverInstance.address, - value: 100, + value: BigInt(100), + chain: null }); const message = createMessageCallData( transactionId, @@ -186,10 +190,11 @@ describe("DefaultMessageReceiver - direct interaction", () => { tokenReceive: zeroAddress, data: "0x" as unknown as Hex, }]; - await web3.eth.sendTransaction({ - from: admin, + await depositor.sendTransaction({ + account: depositor.account!.address, to: DefaultMessageReceiverInstance.address, - value: 100, + value: BigInt(100), + chain: null }); const message = createMessageCallData( transactionId, diff --git a/test/defaultMessageReceiver/executeProposal.test.ts b/test/defaultMessageReceiver/executeProposal.test.ts index c7ed7f94..da321254 100644 --- a/test/defaultMessageReceiver/executeProposal.test.ts +++ b/test/defaultMessageReceiver/executeProposal.test.ts @@ -124,7 +124,7 @@ describe("Bridge - [execute proposal - native token]", () => { await DefaultMessageReceiverInstance.read.SYGMA_HANDLER_ROLE(), NativeTokenHandlerInstance.address ]); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -161,7 +161,7 @@ describe("Bridge - [execute proposal - native token]", () => { it("should revert if insufficient gas limit left for executing action", async () => { const insufficientExecutionGasAmount = BigInt(100000); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -230,7 +230,7 @@ describe("Bridge - [execute proposal - native token]", () => { resourceID: resourceID, data: depositProposalData }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/e2e/erc1155/differentChainsMock.test.ts b/test/e2e/erc1155/differentChainsMock.test.ts index 5fd6c544..c1022f48 100644 --- a/test/e2e/erc1155/differentChainsMock.test.ts +++ b/test/e2e/erc1155/differentChainsMock.test.ts @@ -84,7 +84,7 @@ describe("E2E ERC1155 - Two EVM Chains", () => { depositor.account!.address, [tokenID], [initialTokenAmount], - "0x0" + "0x00" ]); await OriginERC1155MintableInstance.write.setApprovalForAll([ @@ -173,11 +173,11 @@ describe("E2E ERC1155 - Two EVM Chains", () => { it(`E2E: tokenID of Origin ERC1155 owned by depositAddress to Destination ERC1155 owned by recipient and back again`, async () => { - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); diff --git a/test/e2e/erc1155/sameChain.test.ts b/test/e2e/erc1155/sameChain.test.ts index ca380183..39667452 100644 --- a/test/e2e/erc1155/sameChain.test.ts +++ b/test/e2e/erc1155/sameChain.test.ts @@ -63,7 +63,7 @@ describe("E2E ERC1155 - Same Chain", () => { depositor.account!.address, [tokenID], [initialTokenAmount], - "0x0" + "0x00" ]); await BridgeInstance.write.adminSetResource([ ERC1155HandlerInstance.address, @@ -106,7 +106,7 @@ describe("E2E ERC1155 - Same Chain", () => { }); it("depositAmount of Destination ERC1155 should be transferred to recipient", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -197,7 +197,7 @@ describe("E2E ERC1155 - Same Chain", () => { ERC1155HandlerInstance.address, tokenID, depositAmount, - "0x0"], + "0x00"], {account: depositor.account} ); diff --git a/test/e2e/erc20/decimals/bothChainsNot18Decimals.test.ts b/test/e2e/erc20/decimals/bothChainsNot18Decimals.test.ts index fd226a46..875483f3 100644 --- a/test/e2e/erc20/decimals/bothChainsNot18Decimals.test.ts +++ b/test/e2e/erc20/decimals/bothChainsNot18Decimals.test.ts @@ -184,7 +184,7 @@ describe("E2E ERC20 - Two EVM Chains both with decimal places != 18", () => { resourceID: destinationResourceID }; - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); @@ -264,7 +264,7 @@ describe("E2E ERC20 - Two EVM Chains both with decimal places != 18", () => { resourceID: originResourceID }; - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); diff --git a/test/e2e/erc20/decimals/oneChainNot18Decimals.test.ts b/test/e2e/erc20/decimals/oneChainNot18Decimals.test.ts index a8a84250..e0023beb 100644 --- a/test/e2e/erc20/decimals/oneChainNot18Decimals.test.ts +++ b/test/e2e/erc20/decimals/oneChainNot18Decimals.test.ts @@ -153,7 +153,7 @@ describe("E2E ERC20 - Two EVM Chains, one with decimal places == 18, other with it(`E2E: depositAmount of Origin ERC20 owned by depositAddress to Destination ERC20 owned by recipient and back again`, async () => { - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); @@ -186,7 +186,7 @@ describe("E2E ERC20 - Two EVM Chains, one with decimal places == 18, other with resourceID: destinationResourceID }; - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); diff --git a/test/e2e/erc20/decimals/oneChainWith0Decimals.test.ts b/test/e2e/erc20/decimals/oneChainWith0Decimals.test.ts index fc4ad151..27d6365c 100644 --- a/test/e2e/erc20/decimals/oneChainWith0Decimals.test.ts +++ b/test/e2e/erc20/decimals/oneChainWith0Decimals.test.ts @@ -154,7 +154,7 @@ describe("E2E ERC20 - Two EVM Chains, one with decimal places == 18, other with it(`E2E: depositAmount of Origin ERC20 owned by depositAddress to Destination ERC20 owned by recipient and back again`, async () => { - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); @@ -187,7 +187,7 @@ describe("E2E ERC20 - Two EVM Chains, one with decimal places == 18, other with resourceID: destinationResourceID }; - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); diff --git a/test/e2e/erc20/decimals/roundingLoss.test.ts b/test/e2e/erc20/decimals/roundingLoss.test.ts index f9ff2f97..534600d2 100644 --- a/test/e2e/erc20/decimals/roundingLoss.test.ts +++ b/test/e2e/erc20/decimals/roundingLoss.test.ts @@ -182,7 +182,7 @@ describe("E2E ERC20 - Two EVM Chains both with decimal places != 18 with roundin resourceID: destinationResourceID }; - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); @@ -261,7 +261,7 @@ describe("E2E ERC20 - Two EVM Chains both with decimal places != 18 with roundin resourceID: originResourceID }; - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); diff --git a/test/e2e/erc20/differentChainsMock.test.ts b/test/e2e/erc20/differentChainsMock.test.ts index 1f14af0a..01aa5837 100644 --- a/test/e2e/erc20/differentChainsMock.test.ts +++ b/test/e2e/erc20/differentChainsMock.test.ts @@ -196,11 +196,11 @@ describe("E2E ERC20 - Two EVM Chains", () => { it(`E2E: depositAmount of Origin ERC20 owned by depositAddress to Destination ERC20 owned by recipient and back again`, async () => { - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); diff --git a/test/e2e/erc20/sameChain.test.ts b/test/e2e/erc20/sameChain.test.ts index 646f02c8..e5bb7a5d 100644 --- a/test/e2e/erc20/sameChain.test.ts +++ b/test/e2e/erc20/sameChain.test.ts @@ -113,7 +113,7 @@ describe("E2E ERC20 - Same Chain", () => { }); it("depositAmount of Destination ERC20 should be transferred to recipient", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/e2e/erc721/differentChainsMock.test.ts b/test/e2e/erc721/differentChainsMock.test.ts index 92f9a0b6..6cb89505 100644 --- a/test/e2e/erc721/differentChainsMock.test.ts +++ b/test/e2e/erc721/differentChainsMock.test.ts @@ -179,11 +179,11 @@ describe("E2E ERC721 - Two EVM Chains", () => { it(`E2E: tokenID of Origin ERC721 owned by depositAddress to Destination ERC721 owned by recipient and back again`, async () => { - const originProposalSignedData = await signTypedProposal( + const originProposalSignedData = signTypedProposal( DestinationBridgeInstance.address, [originDomainProposal] ); - const destinationProposalSignedData = await signTypedProposal( + const destinationProposalSignedData = signTypedProposal( OriginBridgeInstance.address, [destinationDomainProposal] ); diff --git a/test/e2e/erc721/sameChain.test.ts b/test/e2e/erc721/sameChain.test.ts index 5f25fc8d..7d2f0e8d 100644 --- a/test/e2e/erc721/sameChain.test.ts +++ b/test/e2e/erc721/sameChain.test.ts @@ -117,7 +117,7 @@ describe("E2E ERC721 - Same Chain", () => { const tokenOwner = await ERC721MintableInstance.read.ownerOf([tokenID]); assert.strictEqual(ERC721HandlerInstance.address, tokenOwner); - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/handlers/erc1155/deposit.test.ts b/test/handlers/erc1155/deposit.test.ts index 9a25a321..5bf39a5d 100644 --- a/test/handlers/erc1155/deposit.test.ts +++ b/test/handlers/erc1155/deposit.test.ts @@ -50,7 +50,7 @@ describe("ERC1155Handler - [Deposit ERC1155]", () => { depositor.account!.address, [tokenID], [tokenAmount], - "0x0" + "0x00" ]); await ERC1155MintableInstance.write.setApprovalForAll([ @@ -98,6 +98,7 @@ describe("ERC1155Handler - [Deposit ERC1155]", () => { destinationDomainID, resourceID.toLowerCase(), expectedDepositNonce, + depositor.account!.address, depositData, null, ); diff --git a/test/handlers/erc1155/depositBurn.test.ts b/test/handlers/erc1155/depositBurn.test.ts index a230990c..a10decdf 100644 --- a/test/handlers/erc1155/depositBurn.test.ts +++ b/test/handlers/erc1155/depositBurn.test.ts @@ -58,7 +58,7 @@ describe("ERC1155Handler - [Deposit Burn ERC1155]", () => { depositor, [tokenID], [tokenAmount], - "0x0" + "0x00" ]); await ERC1155MintableInstance1.write.setApprovalForAll([ diff --git a/test/handlers/erc20/deposit.test.ts b/test/handlers/erc20/deposit.test.ts index 2d36c98a..fced11f8 100644 --- a/test/handlers/erc20/deposit.test.ts +++ b/test/handlers/erc20/deposit.test.ts @@ -41,6 +41,7 @@ describe("ERC20Handler - [Deposit ERC20]", async () => { admin, depositor, recipient, + EOA_Address ] = await hre.viem.getWalletClients(); resourceID = createResourceID( diff --git a/test/handlers/erc20/depositBurn.test.ts b/test/handlers/erc20/depositBurn.test.ts index 78725fef..5071d33a 100644 --- a/test/handlers/erc20/depositBurn.test.ts +++ b/test/handlers/erc20/depositBurn.test.ts @@ -95,7 +95,7 @@ describe("ERC20Handler - [Deposit Burn ERC20]", () => { for (const burnableAddress of burnableContractAddresses) { const isBurnable = (await ERC20HandlerInstance.read._tokenContractAddressToTokenProperties([ burnableAddress - ]))[0] + ]))[2] assert.isTrue(isBurnable, "Contract wasn't successfully marked burnable"); } diff --git a/test/handlers/erc20/isWhitelisted.test.ts b/test/handlers/erc20/isWhitelisted.test.ts index e0866aec..a14e722d 100644 --- a/test/handlers/erc20/isWhitelisted.test.ts +++ b/test/handlers/erc20/isWhitelisted.test.ts @@ -14,7 +14,6 @@ describe("ERC20Handler - [isWhitelisted]", () => { const emptySetResourceData = "0x"; let BridgeInstance: ContractTypesMap["Bridge"]; - let DefaultMessageReceiverInstance: ContractTypesMap["DefaultMessageReceiver"]; let ERC20MintableInstance: ContractTypesMap["ERC20PresetMinterPauser"]; let ERC20HandlerInstance: ContractTypesMap["ERC20Handler"]; @@ -24,6 +23,7 @@ describe("ERC20Handler - [isWhitelisted]", () => { ({ BridgeInstance, ERC20MintableInstance, + ERC20HandlerInstance } = await loadFixture(deploySourceChainContracts)); resourceID = createResourceID( diff --git a/test/handlers/erc20/optionalContracCall/decimalConversion.test.ts b/test/handlers/erc20/optionalContracCall/decimalConversion.test.ts index f465ebf4..59ca9bd7 100644 --- a/test/handlers/erc20/optionalContracCall/decimalConversion.test.ts +++ b/test/handlers/erc20/optionalContracCall/decimalConversion.test.ts @@ -223,7 +223,7 @@ describe("Bridge - [decimal conversion - erc20 token]", () => { data: proposalData, }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/handlers/erc20/optionalContracCall/deposit.test.ts b/test/handlers/erc20/optionalContracCall/deposit.test.ts index 1f85d07b..80c002dc 100644 --- a/test/handlers/erc20/optionalContracCall/deposit.test.ts +++ b/test/handlers/erc20/optionalContracCall/deposit.test.ts @@ -50,7 +50,8 @@ describe("Bridge - [deposit - erc20 token with contract call]", () => { ERC721MintableInstance, BasicFeeHandlerInstance: ERC20BasicFeeHandlerInstance, BasicFeeHandlerInstance: ERC721BasicFeeHandlerInstance, - PercentageFeeHandlerInstance + PercentageFeeHandlerInstance, + FeeHandlerRouterInstance } = await loadFixture(deploySourceChainContracts)); [ , diff --git a/test/handlers/erc20/optionalContracCall/executeProposal.test.ts b/test/handlers/erc20/optionalContracCall/executeProposal.test.ts index 1872c3b3..2d018bb6 100644 --- a/test/handlers/erc20/optionalContracCall/executeProposal.test.ts +++ b/test/handlers/erc20/optionalContracCall/executeProposal.test.ts @@ -159,7 +159,7 @@ describe("Bridge - [execute proposal - erc20 token with contract call]", () => { }); it("should create and execute executeProposal with contract call successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -212,7 +212,7 @@ describe("Bridge - [execute proposal - erc20 token with contract call]", () => { }); it("should skip executing proposal if deposit nonce is already used", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -254,7 +254,7 @@ describe("Bridge - [execute proposal - erc20 token with contract call]", () => { }); it("executeProposal event should be emitted with expected values", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/handlers/fee/basic/admin.test.ts b/test/handlers/fee/basic/admin.test.ts index 60cbbea3..9a42cd74 100644 --- a/test/handlers/fee/basic/admin.test.ts +++ b/test/handlers/fee/basic/admin.test.ts @@ -8,7 +8,6 @@ import {deploySourceChainContracts} from "../../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from "chai"; -const Helpers = require("../../../helpers"); describe("BasicFeeHandler - [admin]", () => { const originDomainID = 1; diff --git a/test/handlers/fee/basic/calculateFee.test.ts b/test/handlers/fee/basic/calculateFee.test.ts index cd5d55ef..8aca74b8 100644 --- a/test/handlers/fee/basic/calculateFee.test.ts +++ b/test/handlers/fee/basic/calculateFee.test.ts @@ -8,7 +8,6 @@ import {deploySourceChainContracts} from "../../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert} from 'chai'; -const Helpers = require("../../../helpers"); describe("BasicFeeHandler - [calculateFee]", () => { const originDomainID = 1; diff --git a/test/handlers/fee/basic/changeFee.test.ts b/test/handlers/fee/basic/changeFee.test.ts index d3c629f9..cdc1e207 100644 --- a/test/handlers/fee/basic/changeFee.test.ts +++ b/test/handlers/fee/basic/changeFee.test.ts @@ -8,7 +8,6 @@ import {Hex, parseEther, WalletClient} from "viem"; import {deploySourceChainContracts} from "../../../helpers"; import {assert, expect} from "chai"; -const Helpers = require("../../../helpers"); describe("BasicFeeHandler - [changeFee]", () => { const originDomainID = 1; diff --git a/test/handlers/fee/basic/collectFee.test.ts b/test/handlers/fee/basic/collectFee.test.ts index ee884f9c..5649881d 100644 --- a/test/handlers/fee/basic/collectFee.test.ts +++ b/test/handlers/fee/basic/collectFee.test.ts @@ -6,7 +6,6 @@ import {Hex, parseEther, WalletClient, zeroAddress} from "viem"; import {createResourceID, deploySourceChainContracts, mpcAddress} from "../../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; -const Helpers = require("../../../helpers"); import {ContractTypesMap} from "hardhat/types"; import {assert, expect} from 'chai'; diff --git a/test/handlers/fee/basic/distributeFee.test.ts b/test/handlers/fee/basic/distributeFee.test.ts index ac3430b0..f18c40f0 100644 --- a/test/handlers/fee/basic/distributeFee.test.ts +++ b/test/handlers/fee/basic/distributeFee.test.ts @@ -3,12 +3,11 @@ import hre from 'hardhat'; import {parseEther, Hex, WalletClient, zeroAddress} from "viem"; -import {createERCDepositData, deploySourceChainContracts, mpcAddress} from "../../../helpers"; +import {createERCDepositData, deploySourceChainContracts, getBalance, mpcAddress} from "../../../helpers"; import {ContractTypesMap} from "hardhat/types"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from 'chai'; -const Helpers = require("../../../helpers"); describe("BasicFeeHandler - [distributeFee]", () => { const originDomainID = 1; @@ -89,7 +88,7 @@ describe("BasicFeeHandler - [distributeFee]", () => { // check the balance is 0 assert.equal( - await getBalance(BridgeInstance.address), + await getBalance(BridgeInstance), parseEther("0") ); @@ -105,11 +104,11 @@ describe("BasicFeeHandler - [distributeFee]", () => { } ); assert.equal( - await getBalance(BridgeInstance.address), + await getBalance(BridgeInstance), parseEther("0") ); assert.equal( - await getBalance(BasicFeeHandlerInstance.address), + await getBalance(BasicFeeHandlerInstance), parseEther("1") ); diff --git a/test/handlers/fee/handlerRouter.test.ts b/test/handlers/fee/handlerRouter.test.ts index ed243e38..070c4347 100644 --- a/test/handlers/fee/handlerRouter.test.ts +++ b/test/handlers/fee/handlerRouter.test.ts @@ -7,6 +7,7 @@ import {Hex, parseEther, WalletClient, zeroAddress} from "viem"; import {createERCDepositData, createResourceID, deploySourceChainContracts} from "../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from 'chai'; +import {parse} from 'path'; describe("FeeHandlerRouter", () => { @@ -42,7 +43,8 @@ describe("FeeHandlerRouter", () => { whitelistAddress, nonWhitelistAddress, nonAdmin, - feeHandlerMock + feeHandlerMock, + bridgeMock, ] = await hre.viem.getWalletClients(); resourceID = createResourceID( @@ -140,7 +142,7 @@ describe("FeeHandlerRouter", () => { depositData, feeData ]); - assert.equal(web3.utils.fromWei(res[0], "ether"), "0") + assert.equal(res[0], parseEther("0")) res = await FeeHandlerRouterInstance.read.calculateFee([ nonWhitelistAddress.account!.address, originDomainID, @@ -149,7 +151,7 @@ describe("FeeHandlerRouter", () => { depositData, feeData ]); - assert.equal(web3.utils.fromWei(res[0], "ether"), "0.5") + assert.equal(res[0], parseEther("0.5")) }); it("should revert if whitelisted address provides fee", async () => { @@ -172,7 +174,8 @@ describe("FeeHandlerRouter", () => { destinationDomainID, resourceID, depositData, - feeData], + feeData + ], { account: bridgeMock.account, value: parseEther("0.5") diff --git a/test/handlers/fee/percentage/admin.test.ts b/test/handlers/fee/percentage/admin.test.ts index 3fbff74d..ebf359b7 100644 --- a/test/handlers/fee/percentage/admin.test.ts +++ b/test/handlers/fee/percentage/admin.test.ts @@ -3,20 +3,17 @@ import hre from 'hardhat'; import {ContractTypesMap} from "hardhat/types"; -import {deploySourceChainContracts} from "../../../helpers"; +import {createResourceID, deploySourceChainContracts} from "../../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {Hex, WalletClient} from "viem"; import {assert, expect} from 'chai'; -const Helpers = require("../../../helpers"); - describe("PercentageFeeHandler - [admin]", () => { const originDomainID = 1; const destinationDomainID = 2; const fee = BigInt(60000); - let BridgeInstance: ContractTypesMap["Bridge"]; let PercentageFeeHandlerInstance: ContractTypesMap["PercentageERC20FeeHandler"]; let ERC20MintableInstance: ContractTypesMap["ERC20PresetMinterPauser"]; let FeeHandlerRouterInstance: ContractTypesMap["FeeHandlerRouter"]; @@ -28,9 +25,9 @@ describe("PercentageFeeHandler - [admin]", () => { beforeEach(async () => { ({ - BridgeInstance, PercentageFeeHandlerInstance, ERC20MintableInstance, + FeeHandlerRouterInstance, } = await loadFixture(deploySourceChainContracts)); [ feeHandlerAdmin, diff --git a/test/handlers/fee/percentage/calculateFee.test.ts b/test/handlers/fee/percentage/calculateFee.test.ts index 95e5a467..3190c8ce 100644 --- a/test/handlers/fee/percentage/calculateFee.test.ts +++ b/test/handlers/fee/percentage/calculateFee.test.ts @@ -3,12 +3,11 @@ import hre from 'hardhat'; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; -import {deploySourceChainContracts} from "../../../helpers"; +import {createERCDepositData, createResourceID, deploySourceChainContracts} from "../../../helpers"; import {ContractTypesMap} from 'hardhat/types'; import {Hex, WalletClient} from 'viem'; import {assert} from 'chai'; -const Helpers = require("../../../helpers"); describe("PercentageFeeHandler - [calculateFee]", () => { const originDomainID = 1; @@ -32,6 +31,8 @@ describe("PercentageFeeHandler - [calculateFee]", () => { BridgeInstance, PercentageFeeHandlerInstance, ERC20MintableInstance, + FeeHandlerRouterInstance, + ERC20HandlerInstance, } = await loadFixture(deploySourceChainContracts)); [ , @@ -61,7 +62,7 @@ describe("PercentageFeeHandler - [calculateFee]", () => { it(`should return percentage of token amount for fee if bounds are set [lowerBound > 0, upperBound > 0]`, async () => { - const depositData = createERCDepositData(100000000, 20, recipient); + const depositData = createERCDepositData(BigInt(100000000), 20, recipient.account!.address); // current fee is set to 0 let res = await FeeHandlerRouterInstance.read.calculateFee([ @@ -90,7 +91,7 @@ describe("PercentageFeeHandler - [calculateFee]", () => { it(`should return percentage of token amount for fee if bounds are not set [lowerBound = 0, upperBound = 0]`, async () => { - const depositData = createERCDepositData(100000000, 20, recipient); + const depositData = createERCDepositData(BigInt(100000000), 20, recipient.account!.address); // current fee is set to 0 let res = await FeeHandlerRouterInstance.read.calculateFee([ @@ -117,7 +118,7 @@ describe("PercentageFeeHandler - [calculateFee]", () => { }); it("should return lower bound token amount for fee [lowerBound > 0, upperBound > 0]", async () => { - const depositData = createERCDepositData(fee, 20, recipient); + const depositData = createERCDepositData(fee, 20, recipient.account!.address); await PercentageFeeHandlerInstance.write.changeFeeBounds([resourceID, BigInt(100), BigInt(300)]); await PercentageFeeHandlerInstance.write.changeFee([destinationDomainID, resourceID, fee]); @@ -133,7 +134,7 @@ describe("PercentageFeeHandler - [calculateFee]", () => { }); it("should return lower bound token amount for fee [lowerBound > 0, upperBound = 0]", async () => { - const depositData = createERCDepositData(fee, 20, recipient); + const depositData = createERCDepositData(fee, 20, recipient.account!.address); await PercentageFeeHandlerInstance.write.changeFeeBounds([resourceID, BigInt(100), BigInt(0)]); await PercentageFeeHandlerInstance.write.changeFee([destinationDomainID, resourceID, fee]); @@ -149,7 +150,7 @@ describe("PercentageFeeHandler - [calculateFee]", () => { }); it("should return upper bound token amount for fee [lowerBound = 0, upperBound > 0]", async () => { - const depositData = createERCDepositData(100000000, 20, recipient); + const depositData = createERCDepositData(BigInt(100000000), 20, recipient.account!.address); await PercentageFeeHandlerInstance.write.changeFeeBounds([resourceID, BigInt(0), BigInt(300)]); await PercentageFeeHandlerInstance.write.changeFee([destinationDomainID, resourceID, fee]); @@ -165,7 +166,7 @@ describe("PercentageFeeHandler - [calculateFee]", () => { }); it("should return percentage of token amount for fee [lowerBound = 0, upperBound > 0]", async () => { - const depositData = createERCDepositData(100000, 20, recipient); + const depositData = createERCDepositData(BigInt(100000), 20, recipient.account!.address); await PercentageFeeHandlerInstance.write.changeFeeBounds([resourceID, BigInt(0), BigInt(300)]); await PercentageFeeHandlerInstance.write.changeFee([destinationDomainID, resourceID, fee]); diff --git a/test/handlers/fee/percentage/changeFee.test.ts b/test/handlers/fee/percentage/changeFee.test.ts index f1c1ab0f..259a062a 100644 --- a/test/handlers/fee/percentage/changeFee.test.ts +++ b/test/handlers/fee/percentage/changeFee.test.ts @@ -3,12 +3,11 @@ import hre from 'hardhat'; import {ContractTypesMap} from "hardhat/types"; -import {formatUnits, Hex, parseEther, parseUnits, WalletClient} from "viem"; -import {deploySourceChainContracts} from "../../../helpers"; +import {Hex, WalletClient} from "viem"; +import {createResourceID, deploySourceChainContracts} from "../../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from 'chai'; -const Helpers = require("../../../helpers"); describe("PercentageFeeHandler - [change fee and bounds]", () => { const originDomainID = 1; @@ -19,7 +18,6 @@ describe("PercentageFeeHandler - [change fee and bounds]", () => { let resourceID: Hex; - let BridgeInstance: ContractTypesMap["Bridge"]; let ERC20MintableInstance: ContractTypesMap["ERC20PresetMinterPauser"]; let PercentageFeeHandlerInstance: ContractTypesMap["PercentageERC20FeeHandler"]; @@ -28,7 +26,6 @@ describe("PercentageFeeHandler - [change fee and bounds]", () => { beforeEach(async () => { ({ - BridgeInstance, PercentageFeeHandlerInstance, ERC20MintableInstance, } = await loadFixture(deploySourceChainContracts)); diff --git a/test/handlers/fee/percentage/collectFee.test.ts b/test/handlers/fee/percentage/collectFee.test.ts index 4b98a747..f6046441 100644 --- a/test/handlers/fee/percentage/collectFee.test.ts +++ b/test/handlers/fee/percentage/collectFee.test.ts @@ -13,6 +13,7 @@ describe("PercentageFeeHandler - [collectFee]", () => { const originDomainID = 1; const destinationDomainID = 2; const tokenAmount = parseEther("200000"); + const expectedDepositNonce = 1; const emptySetResourceData = "0x"; const feeData = "0x"; @@ -40,7 +41,8 @@ describe("PercentageFeeHandler - [collectFee]", () => { BridgeInstance, ERC20MintableInstance, ERC20HandlerInstance, - PercentageFeeHandlerInstance + PercentageFeeHandlerInstance, + FeeHandlerRouterInstance, } = await loadFixture(deploySourceChainContracts)); [ , @@ -255,7 +257,11 @@ describe("PercentageFeeHandler - [collectFee]", () => { await expect(depositTx).to.emit(BridgeInstance, "Deposit").withArgs( destinationDomainID, - resourceID.toLowerCase() + resourceID.toLowerCase(), + expectedDepositNonce, + ERC20HandlerInstance.address, + depositData, + null ); await expect(depositTx).to.emit(PercentageFeeHandlerInstance, "FeeCollected").withArgs( diff --git a/test/handlers/fee/percentage/distributeFee.test.ts b/test/handlers/fee/percentage/distributeFee.test.ts index 3c763360..dc3cfd11 100644 --- a/test/handlers/fee/percentage/distributeFee.test.ts +++ b/test/handlers/fee/percentage/distributeFee.test.ts @@ -2,7 +2,7 @@ import hre from 'hardhat'; import {ContractTypesMap} from "hardhat/types"; -import {createResourceID, deploySourceChainContracts, mpcAddress} from "../../../helpers"; +import {createERCDepositData, createResourceID, deploySourceChainContracts, mpcAddress} from "../../../helpers"; import {Hex, WalletClient} from "viem"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; import {assert, expect} from 'chai'; @@ -41,7 +41,8 @@ describe("PercentageFeeHandler - [distributeFee]", () => { BridgeInstance, ERC20MintableInstance, ERC20HandlerInstance, - PercentageFeeHandlerInstance + PercentageFeeHandlerInstance, + FeeHandlerRouterInstance } = await loadFixture(deploySourceChainContracts)); [ , @@ -90,7 +91,7 @@ describe("PercentageFeeHandler - [distributeFee]", () => { depositData = createERCDepositData( depositAmount, 20, - recipient + recipient.account!.address ); // set MPC address to unpause the Bridge diff --git a/test/handlers/generic/permissionlessExecuteProposal.test.ts b/test/handlers/generic/permissionlessExecuteProposal.test.ts index 0edb1a27..25969117 100644 --- a/test/handlers/generic/permissionlessExecuteProposal.test.ts +++ b/test/handlers/generic/permissionlessExecuteProposal.test.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only import hre from 'hardhat'; -import {concat, encodeAbiParameters, fromBytes, Hex, keccak256, parseAbiParameters, toBytes, toFunctionSelector, WalletClient, zeroHash} from "viem"; +import {AbiParameter, concat, encodeAbiParameters, fromBytes, Hex, keccak256, parseAbiParameters, toBytes, toFunctionSelector, WalletClient, zeroHash} from "viem"; import {mpcAddress,createResourceID, deploySourceChainContracts, createGmpDepositData, trimPrefix, constructGenericHandlerSetResourceData, blankFunctionDepositorOffset, blankFunctionSig, signTypedProposal, createGmpExecutionData} from "../../helpers"; import {ContractTypesMap} from 'hardhat/types'; import {loadFixture} from '@nomicfoundation/hardhat-network-helpers'; @@ -40,6 +40,7 @@ describe("GmpHandler - [Execute Proposal]", () => { BridgeInstance, TestStoreInstance, TestDepositInstance, + GmpHandlerInstance, } = await loadFixture(deploySourceChainContracts)); [ , @@ -91,7 +92,7 @@ describe("GmpHandler - [Execute Proposal]", () => { }); it("deposit can be executed successfully", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -122,7 +123,7 @@ describe("GmpHandler - [Execute Proposal]", () => { }); it("AssetStored event should be emitted", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -161,7 +162,7 @@ describe("GmpHandler - [Execute Proposal]", () => { }); it("ProposalExecution should be emitted even if handler execution fails", async () => { - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -257,7 +258,7 @@ describe("GmpHandler - [Execute Proposal]", () => { data: depositData, resourceID: resourceID, }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); @@ -323,12 +324,11 @@ describe("GmpHandler - [Execute Proposal]", () => { data: depositData, resourceID: resourceID, }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); - await expect( - BridgeInstance.write.deposit([ + await BridgeInstance.write.deposit([ originDomainID, resourceID, depositData, @@ -338,7 +338,6 @@ describe("GmpHandler - [Execute Proposal]", () => { account: depositor.account } ) - ).not.to.be.reverted; // relayer1 executes the proposal const executeTx = await BridgeInstance.write.executeProposal([proposal, proposalSignedData], { @@ -365,7 +364,8 @@ describe("GmpHandler - [Execute Proposal]", () => { const message = fromBytes(toBytes("message"), "hex"); const executionData = createGmpExecutionData( - ["uint", "address[]", "bytes"], [num, addresses, message] + ["uint", "address[]", "bytes"] as unknown as Array, + [num, addresses, message] ); const depositFunctionSignature = toFunctionSelector( @@ -385,7 +385,7 @@ describe("GmpHandler - [Execute Proposal]", () => { data: depositData, resourceID: resourceID, }; - const proposalSignedData = await signTypedProposal( + const proposalSignedData = signTypedProposal( BridgeInstance.address, [proposal] ); diff --git a/test/handlers/xc20/deposit.test.ts b/test/handlers/xc20/deposit.test.ts index 10bcfee0..2a01675c 100644 --- a/test/handlers/xc20/deposit.test.ts +++ b/test/handlers/xc20/deposit.test.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only import {concat, keccak256, WalletClient} from "viem"; -import {mpcAddress, trimPrefix} from "../../helpers"; +import {createERCDepositData, mpcAddress, trimPrefix} from "../../helpers"; import hre from 'hardhat'; import {ContractTypesMap} from "hardhat/types"; import {createResourceID, deploySourceChainContracts} from "../../helpers"; diff --git a/test/handlers/xc20/depositBurn.test.ts b/test/handlers/xc20/depositBurn.test.ts index 17257821..1935b35a 100644 --- a/test/handlers/xc20/depositBurn.test.ts +++ b/test/handlers/xc20/depositBurn.test.ts @@ -3,7 +3,7 @@ import hre from 'hardhat'; import {WalletClient} from "viem"; -import {mpcAddress} from "../../helpers"; +import {createERCDepositData, mpcAddress} from "../../helpers"; import {ContractTypesMap} from "hardhat/types"; import {createResourceID, deploySourceChainContracts} from "../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; @@ -24,24 +24,21 @@ describe("XC20Handler - [Deposit Burn XC20]", () => { let admin: WalletClient; let depositor: WalletClient; - let recipient: WalletClient; - let EOA_Address: WalletClient; let resourceID1: Hex; let resourceID2: Hex; - let depositData: Hex; let burnableContractAddresses: Array; beforeEach(async () => { ({ BridgeInstance, XC20HandlerInstance, + ERC20MintableInstance: ERC20MintableInstance1, + ERC20MintableInstance: ERC20MintableInstance2 } = await loadFixture(deploySourceChainContracts)); [ admin, depositor, - recipient, - EOA_Address, ] = await hre.viem.getWalletClients(); @@ -83,12 +80,6 @@ describe("XC20Handler - [Deposit Burn XC20]", () => { ERC20MintableInstance1.address ]); - depositData = createERCDepositData( - depositAmount, - 20, - recipient - ); - // set MPC address to unpause the Bridge await BridgeInstance.write.endKeygen([mpcAddress]); }); @@ -97,7 +88,7 @@ describe("XC20Handler - [Deposit Burn XC20]", () => { for (const burnableAddress of burnableContractAddresses) { const isBurnable = (await XC20HandlerInstance.read._tokenContractAddressToTokenProperties([ burnableAddress - ])); + ]))[2]; assert.isTrue(isBurnable, "Contract wasn't successfully marked burnable"); } diff --git a/test/handlers/xc20/isBurnable.test.ts b/test/handlers/xc20/isBurnable.test.ts index c5998849..5c1fab5e 100644 --- a/test/handlers/xc20/isBurnable.test.ts +++ b/test/handlers/xc20/isBurnable.test.ts @@ -29,6 +29,8 @@ describe("XC20Handler - [Burn XC20]", () => { ({ BridgeInstance, XC20HandlerInstance, + ERC20MintableInstance: ERC20MintableInstance1, + ERC20MintableInstance: ERC20MintableInstance2, } = await loadFixture(deploySourceChainContracts)); [ , @@ -75,7 +77,7 @@ describe("XC20Handler - [Burn XC20]", () => { for (const burnableAddress of burnableContractAddresses) { const isBurnable = (await XC20HandlerInstance.read._tokenContractAddressToTokenProperties([ burnableAddress - ])); + ]))[2]; assert.isTrue(isBurnable, "Contract wasn't successfully marked burnable"); } @@ -104,7 +106,7 @@ describe("XC20Handler - [Burn XC20]", () => { const isBurnable = (await XC20HandlerInstance.read._tokenContractAddressToTokenProperties([ ERC20MintableInstance2.address - ])); + ]))[2]; assert.isFalse(isBurnable, "Contract shouldn't be marked burnable"); }); @@ -139,7 +141,7 @@ describe("XC20Handler - [Burn XC20]", () => { ]); const isBurnable = (await XC20HandlerInstance.read._tokenContractAddressToTokenProperties([ ERC20MintableInstance2.address - ])); + ]))[2]; assert.isTrue(isBurnable, "Contract wasn't successfully marked burnable"); }); @@ -169,10 +171,10 @@ describe("XC20Handler - [Burn XC20]", () => { // tokens should be marked as burnable for (let i = 0; i < initialResourceIDs.length; i++) { const isBurnableBeforeReRegisteringResource = ( - await XC20HandlerInstance._tokenContractAddressToTokenProperties.call( - initialContractAddresses[i] + await XC20HandlerInstance.read._tokenContractAddressToTokenProperties( + [initialContractAddresses[i]] ) - ).isBurnable; + )[2]; assert.isTrue(isBurnableBeforeReRegisteringResource, "Contract wasn't successfully marked burnable"); } @@ -192,10 +194,10 @@ describe("XC20Handler - [Burn XC20]", () => { // tokens should not be marked as burnable if resource is re-registered for (let i = 0; i < initialResourceIDs.length; i++) { const isBurnableAfterReRegisteringResource = ( - await XC20HandlerInstance._tokenContractAddressToTokenProperties.call( - initialContractAddresses[i] + await XC20HandlerInstance.read._tokenContractAddressToTokenProperties( + [initialContractAddresses[i]] ) - ).isBurnable; + )[2]; assert.isFalse(isBurnableAfterReRegisteringResource, "Contract shouldn't be marked burnable"); } diff --git a/test/handlers/xc20/isWhitelisted.test.ts b/test/handlers/xc20/isWhitelisted.test.ts index 7e5839d3..3a152925 100644 --- a/test/handlers/xc20/isWhitelisted.test.ts +++ b/test/handlers/xc20/isWhitelisted.test.ts @@ -5,16 +5,16 @@ import hre from 'hardhat'; import {ContractTypesMap} from "hardhat/types"; import {createResourceID, deploySourceChainContracts} from "../../helpers"; import {loadFixture} from "@nomicfoundation/hardhat-network-helpers"; -import {Hex} from "viem"; +import {Hex, WalletClient} from "viem"; import {assert} from "chai"; describe("XC20Handler - [isWhitelisted]", async () => { + const domainID = 1; const emptySetResourceData = "0x"; let BridgeInstance: ContractTypesMap["Bridge"]; let ERC20MintableInstance1: ContractTypesMap["ERC20PresetMinterPauser"]; - let ERC20MintableInstance2: ContractTypesMap["ERC20PresetMinterPauser"]; let XC20HandlerInstance: ContractTypesMap["XC20Handler"]; let resourceID: Hex; @@ -23,14 +23,8 @@ describe("XC20Handler - [isWhitelisted]", async () => { ({ BridgeInstance, ERC20MintableInstance: ERC20MintableInstance1, - ERC20MintableInstance: ERC20MintableInstance2, XC20HandlerInstance, } = await loadFixture(deploySourceChainContracts)); - [ - , - depositor, - recipient - ] = await hre.viem.getWalletClients(); resourceID = createResourceID( ERC20MintableInstance1.address, diff --git a/test/helpers.ts b/test/helpers.ts index 0e63a687..0f990193 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -23,8 +23,11 @@ export const gasUsed = 100000; export const blankFunctionSig = "0x00000000" as unknown as Hex; export const blankFunctionDepositorOffset = "0x0000" as unknown as Hex; export const mpcAddress = "0x1Ad4b1efE3Bc6FEE085e995FCF48219430e615C3" as unknown as Hex; -export const mpcPrivateKey = - "0x497b6ae580cb1b0238f8b6b543fada697bc6f8768a983281e5e52a1a5bca4d58" as unknown as Hex; +export const mpcPrivateKey = Buffer.from( + "497b6ae580cb1b0238f8b6b543fada697bc6f8768a983281e5e52a1a5bca4d58", + "hex" +); + const accessControlFuncSignatures = generateAccessControlFuncSignatures(); @@ -319,7 +322,7 @@ export function createResourceID(contractAddress: Hex, domainID: number) { ]), {size: 32}); }; -export function decimalToPaddedBinary(decimal: number): Hex { +export function decimalToPaddedBinary(decimal: bigint): Hex { return decimal.toString(2).padStart(64, "0") as unknown as Hex; }; @@ -344,12 +347,14 @@ export function signTypedProposal(bridgeAddress: Hex, proposals: Array Proposals: [{name: "proposals", type: "Proposal[]"}], }; + return signTypedData({ - privateKey: Buffer.from(mpcPrivateKey), + privateKey: mpcPrivateKey, data: { types: types, domain: { name, + version: "3.1.0", chainId, verifyingContract: bridgeAddress, }, @@ -358,7 +363,7 @@ export function signTypedProposal(bridgeAddress: Hex, proposals: Array proposals: proposals, }, }, - version: SignTypedDataVersion.V3, + version: SignTypedDataVersion.V4, }) as Hex; }; @@ -393,20 +398,27 @@ export async function createDepositProposalDataFromHandlerResponse( // and then pass the data to Bridge.deposit(). export function createGmpExecutionData( types: Array, - values: Array + values: Array ) { - const array: string[] = []; types.unshift("address" as unknown as AbiParameter); + const array: AbiParameter[] = []; + values.unshift(zeroAddress); return encodeAbiParameters( parseAbiParameters( types // ["address", "address", "uint256[]", "uint256[]", "bytes"], ), - array + values ); }; +encodeAbiParameters( + parseAbiParameters( + ["uint[]", "uint[]", "bytes", "bytes"] + ), + [[BigInt(2)], [BigInt(2)], "0x", "0x"] +); type Action = { nativeValue: BigInt, diff --git a/test/utils/accessControlSegregator/constructor.test.ts b/test/utils/accessControlSegregator/constructor.test.ts index 89854eb9..c0f13601 100644 --- a/test/utils/accessControlSegregator/constructor.test.ts +++ b/test/utils/accessControlSegregator/constructor.test.ts @@ -9,33 +9,39 @@ import {Account, Hex, toHex, WalletClient} from 'viem'; describe("AccessControlSegregator - [constructor]", () => { let AccessControlSegregatorInstance: ContractTypesMap["AccessControlSegregator"]; + let authorizedAddress: WalletClient; let firstEOA: WalletClient; let secondEOA: WalletClient; let thirdEOA: WalletClient; - let fourthEOA: WalletClient; const initialFunctions= [ - toHex("29a71964"), - toHex("0x78728c73"), - toHex("0x2a64052b"), - toHex("0x3a24555a"), + ("0x29a71964") as unknown as Hex, + ("0x78728c73") as unknown as Hex, + ("0x2a64052b") as unknown as Hex, + ("0x3a24555a") as unknown as Hex, ]; - let initialAccessHolders: Array; + let initialAccessHolders: Array; - const grantAccessSig = "0xa973ec93"; + const grantAccessSig = "0xa973ec93" as unknown as Hex; beforeEach(async () => { - AccessControlSegregatorInstance = await hre.viem.deployContract("AccessControlSegregator", [[],[]]); - [ - , - firstEOA, - secondEOA, - thirdEOA, - fourthEOA, - ] = await hre.viem.getWalletClients(); - - initialAccessHolders = [firstEOA, secondEOA, thirdEOA, fourthEOA]; + [ + authorizedAddress, + firstEOA, + secondEOA, + thirdEOA, + ] = await hre.viem.getWalletClients(); + initialAccessHolders = [ + authorizedAddress.account!.address, + firstEOA.account!.address, + secondEOA.account!.address, + thirdEOA.account!.address + ]; + AccessControlSegregatorInstance = await hre.viem.deployContract("AccessControlSegregator", [ + initialFunctions, + initialAccessHolders + ]); }); it("should revert if length of functions and accounts array is different", async () => { @@ -51,7 +57,7 @@ describe("AccessControlSegregator - [constructor]", () => { assert.isTrue( await AccessControlSegregatorInstance.read.hasAccess([ grantAccessSig, - initialAccessHolders[0].account!.address + initialAccessHolders[0] ]) ); }); @@ -61,7 +67,7 @@ describe("AccessControlSegregator - [constructor]", () => { assert.isTrue( await AccessControlSegregatorInstance.read.hasAccess([ initialFunctions[i], - initialAccessHolders[i].account!.address + initialAccessHolders[i] ]) ); } diff --git a/yarn.lock b/yarn.lock index c7911496..4a590f20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,17 +146,6 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" - integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" @@ -175,7 +164,7 @@ dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -184,7 +173,7 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== @@ -213,7 +202,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -221,7 +210,7 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== @@ -240,7 +229,7 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -358,13 +347,13 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@metamask/abi-utils@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@metamask/abi-utils/-/abi-utils-2.0.4.tgz#20908c1d910f7a17a89fdf5778a5c59d5cb8b8be" - integrity sha512-StnIgUB75x7a7AgUhiaUZDpCsqGp7VkNnZh2XivXkJ6mPkE83U8ARGQj5MbRis7VJY8BC5V1AbB1fjdh0hupPQ== +"@metamask/abi-utils@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@metamask/abi-utils/-/abi-utils-3.0.0.tgz#2eab9cb895922b94305364d9111b6dde724f6f9b" + integrity sha512-a/l0DiSIr7+CBYVpHygUa3ztSlYLFCQMsklLna+t6qmNY9+eIO5TedNxhyIyvaJ+4cN7TLy0NQFbp9FV3X2ktg== dependencies: "@metamask/superstruct" "^3.1.0" - "@metamask/utils" "^9.0.0" + "@metamask/utils" "^11.0.1" "@metamask/eth-sig-util@^4.0.0": version "4.0.1" @@ -377,14 +366,14 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@metamask/eth-sig-util@^8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-8.1.1.tgz#7385cd392798afd557265480d88be23098637858" - integrity sha512-Pfi4DKTBWsfoVg3rbBS7EJq2MYvgbC/1xWzQw2vWxU5eCHUaylUSiuUYpf1e/zYRPJmiLOBx+44e5tOE/MEK3w== +"@metamask/eth-sig-util@^8.1.2": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-8.1.2.tgz#8869bd9cdc989af7402812d5fa4d9a0f6cc30b98" + integrity sha512-+M7TKF8+RwqmfmDCfhgn7jDLtWfbpPCuBfkYPBpk9ptuqINu7+QzthNlU0Rn7jiJ//buyg2pModXVtpRBmgAeA== dependencies: "@ethereumjs/util" "^8.1.0" - "@metamask/abi-utils" "^2.0.4" - "@metamask/utils" "^9.0.0" + "@metamask/abi-utils" "^3.0.0" + "@metamask/utils" "^11.0.1" "@scure/base" "~1.1.3" ethereum-cryptography "^2.1.2" tweetnacl "^1.0.3" @@ -394,10 +383,10 @@ resolved "https://registry.yarnpkg.com/@metamask/superstruct/-/superstruct-3.1.0.tgz#148f786a674fba3ac885c1093ab718515bf7f648" integrity sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA== -"@metamask/utils@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-9.3.0.tgz#4726bd7f5d6a43ea8425b6d663ab9207f617c2d1" - integrity sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g== +"@metamask/utils@^11.0.1": + version "11.0.1" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-11.0.1.tgz#16c4135489204fefe128b5e6c2b92c014453e1d5" + integrity sha512-tZlBvEJ6VhhfEiMV+Ad8rWRMjHKpbMogG01YU22JlsIeJptgIdZX1G8jJzhZH0Gxrixa2BeARh7m9lZWQo6rMg== dependencies: "@ethereumjs/tx" "^4.2.0" "@metamask/superstruct" "^3.1.0" @@ -450,11 +439,16 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== -"@noble/hashes@1.6.1", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.6.0": +"@noble/hashes@1.6.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.6.0": version "1.6.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== +"@noble/hashes@^1.3.1": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.0.tgz#5d9e33af2c7d04fee35de1519b80c958b2e35e39" + integrity sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w== + "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": version "1.3.3" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" @@ -486,53 +480,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz#37a31565d7ef42bed9028ac44aed82144de30bd1" - integrity sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw== - -"@nomicfoundation/edr-darwin-x64@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz#3252f6e86397af460b7a480bfe1b889464d75b89" - integrity sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w== - -"@nomicfoundation/edr-linux-arm64-gnu@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz#e7dc2934920b6cfabeb5ee7a5e26c8fb0d4964ac" - integrity sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A== - -"@nomicfoundation/edr-linux-arm64-musl@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz#00459cd53e9fb7bd5b7e32128b508a6e89079d89" - integrity sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ== - -"@nomicfoundation/edr-linux-x64-gnu@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz#5c9e4e2655caba48e0196977cba395bbde6fe97d" - integrity sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg== - -"@nomicfoundation/edr-linux-x64-musl@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz#9c220751b66452dc43a365f380e1e236a0a8c5a9" - integrity sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A== - -"@nomicfoundation/edr-win32-x64-msvc@0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz#90d3ac2a6a8a687522bda5ff2e92dd97e68126ea" - integrity sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A== - -"@nomicfoundation/edr@^0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.5.tgz#b3b1ebcdd0148cfe67cca128e7ebe8092e200359" - integrity sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng== - dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.6.5" - "@nomicfoundation/edr-darwin-x64" "0.6.5" - "@nomicfoundation/edr-linux-arm64-gnu" "0.6.5" - "@nomicfoundation/edr-linux-arm64-musl" "0.6.5" - "@nomicfoundation/edr-linux-x64-gnu" "0.6.5" - "@nomicfoundation/edr-linux-x64-musl" "0.6.5" - "@nomicfoundation/edr-win32-x64-msvc" "0.6.5" +"@nomicfoundation/edr-darwin-arm64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz#2be3338a61508ed1d24326c82b9aa9224a844dd7" + integrity sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g== + +"@nomicfoundation/edr-darwin-x64@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz#d2f782fc43bcae1c9aca3130aca6aa2a964e8559" + integrity sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g== + +"@nomicfoundation/edr-linux-arm64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz#48b156744989acc8e6b0b754158a26e10ad865ed" + integrity sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw== + +"@nomicfoundation/edr-linux-arm64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz#60351352ec26704fed8a232430bf3793d17c29cd" + integrity sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw== + +"@nomicfoundation/edr-linux-x64-gnu@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz#a7b056bfd46ccfde4d55c9601da5a410c2fce40f" + integrity sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ== + +"@nomicfoundation/edr-linux-x64-musl@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz#0fe9f5ace05072e845f71c8fbd28e57798dd6ab5" + integrity sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw== + +"@nomicfoundation/edr-win32-x64-msvc@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz#f1b9a0a643db8dffcf5edb827c18e1cef25c4367" + integrity sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ== + +"@nomicfoundation/edr@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.7.0.tgz#175cb8a81eac585dc76ad41585c908542acb9383" + integrity sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.7.0" + "@nomicfoundation/edr-darwin-x64" "0.7.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.7.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.7.0" + "@nomicfoundation/edr-linux-x64-musl" "0.7.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.7.0" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -564,34 +558,11 @@ "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/hardhat-chai-matchers@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz#9c7cfc4ad0f0a5e9cf16aba8ab668c02f6e273aa" - integrity sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg== - dependencies: - "@types/chai-as-promised" "^7.1.3" - chai-as-promised "^7.1.1" - deep-eql "^4.0.1" - ordinal "^1.0.3" - "@nomicfoundation/hardhat-ignition-viem@^0.15.0": version "0.15.8" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition-viem/-/hardhat-ignition-viem-0.15.8.tgz#139bec3d712cb201af992a6d20bec2b36f523e94" integrity sha512-lbgg9bj56RuEzAy1EwjEl5OMJ27013POsvPOlk2nP9ZckIa8ke99/mkuKQ3CXUQLCfxKnjCv4nZ4Dt0wf8si1A== -"@nomicfoundation/hardhat-ignition@^0.15.0": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.8.tgz#d1a6bb508740959986ad256a4403570aec3d40d0" - integrity sha512-TN8TFQokcd7VyqGfbXO+KS8Q4K/gmsOFlv8dPnt/N596AncgV2Igxh5C3O+KVez11PDHNqoj1JzcDzzNVHrIRw== - dependencies: - "@nomicfoundation/ignition-core" "^0.15.8" - "@nomicfoundation/ignition-ui" "^0.15.8" - chalk "^4.0.0" - debug "^4.3.2" - fs-extra "^10.0.0" - json5 "^2.2.3" - prompts "^2.4.2" - "@nomicfoundation/hardhat-network-helpers@^1.0.0": version "1.0.12" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz#2c0abec0c50b75f9d0d71776e49e3b5ef746d289" @@ -614,7 +585,7 @@ table "^6.8.0" undici "^5.14.0" -"@nomicfoundation/hardhat-viem@^2.0.5": +"@nomicfoundation/hardhat-viem@^2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-viem/-/hardhat-viem-2.0.6.tgz#63abf87ddd1174bea5f87d02610342115da193a0" integrity sha512-Pl5pvYK5VYKflfoUk4fVBESqKMNBtAIGPIT4j+Q8KNFueAe1vB2PsbRESeNJyW5YLL9pqKaD1RVqLmgIa1yvDg== @@ -622,26 +593,6 @@ abitype "^0.9.8" lodash.memoize "^4.1.2" -"@nomicfoundation/ignition-core@^0.15.8": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-core/-/ignition-core-0.15.8.tgz#a5bf84f52d029d0305b5a34a289e6bb64bdcb5e6" - integrity sha512-U+CmTjKU9uwvh7qIabqboy/K/sDoClDgpsFRHoFvAj87DPDkXYb/mZBSkXPTU1wxTxrW6GTFE4lG3e7LAyF+kw== - dependencies: - "@ethersproject/address" "5.6.1" - "@nomicfoundation/solidity-analyzer" "^0.1.1" - cbor "^9.0.0" - debug "^4.3.2" - ethers "^6.7.0" - fs-extra "^10.0.0" - immer "10.0.2" - lodash "4.17.21" - ndjson "2.0.0" - -"@nomicfoundation/ignition-ui@^0.15.8": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.8.tgz#8c0dacec4809d8b90724a1901866656222beeda9" - integrity sha512-VUD5MsWrrv7E2P0AJO01pV8w8m66Du0uwBKXM0oUV5DRIzqm6eYHt9eCDb1KBINDpiFxOQiuyWQMdeKxgPp3qw== - "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" @@ -677,7 +628,7 @@ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== -"@nomicfoundation/solidity-analyzer@^0.1.0", "@nomicfoundation/solidity-analyzer@^0.1.1": +"@nomicfoundation/solidity-analyzer@^0.1.0": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== @@ -1561,13 +1512,6 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" -cbor@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" - integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== - dependencies: - nofilter "^3.1.0" - chai-as-promised@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" @@ -2436,10 +2380,10 @@ ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@^6.13.4, ethers@^6.7.0: - version "6.13.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" - integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== +ethers@^6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" @@ -2611,15 +2555,6 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -2901,14 +2836,14 @@ hardhat-gas-reporter@^2.2.2: sha1 "^1.1.1" viem "2.7.14" -hardhat@^2.22.15: - version "2.22.17" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.17.tgz#96036bbe6bad8eb6a6b65c54dc5fbc1324541612" - integrity sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg== +hardhat@^2.22.18: + version "2.22.18" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.18.tgz#e299a26a67b521bbb225370eb47a032d4e097e3a" + integrity sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.6.5" + "@nomicfoundation/edr" "^0.7.0" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -3084,11 +3019,6 @@ ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -immer@10.0.2: - version "10.0.2" - resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.2.tgz#11636c5b77acf529e059582d76faf338beb56141" - integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA== - immutable@^4.0.0-rc.12: version "4.3.7" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" @@ -3446,11 +3376,6 @@ json-stream-stringify@^3.1.4: resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -3458,11 +3383,6 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3470,15 +3390,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - jsonschema@^1.2.4, jsonschema@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" @@ -3505,11 +3416,6 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - latest-version@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" @@ -3565,7 +3471,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3755,17 +3661,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -ndjson@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-2.0.0.tgz#320ac86f6fe53f5681897349b86ac6f43bfa3a19" - integrity sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ== - dependencies: - json-stringify-safe "^5.0.1" - minimist "^1.2.5" - readable-stream "^3.6.0" - split2 "^3.0.0" - through2 "^4.0.0" - neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -4092,14 +3987,6 @@ prettier@^2.8.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -4152,7 +4039,7 @@ rc@1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: +readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -4517,11 +4404,6 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -4625,7 +4507,7 @@ solidity-coverage@^0.8.0: shelljs "^0.8.3" web3-utils "^1.3.6" -solmate@^6.2.0: +solmate@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/solmate/-/solmate-6.8.0.tgz#acb665d88783745899e2f6345e3ac66d5b7df2ab" integrity sha512-/oI8kgEvSxGG1mrFv3FmCEZd0F8Z9VzRmoYMIhzmmzt6mjtPwfdCm3oh8yOL7bMHJBSfXJuMpnMPrM0uyaKsKg== @@ -4650,13 +4532,6 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4832,13 +4707,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - tinyglobby@^0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" @@ -5041,11 +4909,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"