From 9452f0b6dcafd2c49cd3daf2a43cb0daa0518e3b Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Thu, 2 May 2024 22:38:54 +0300 Subject: [PATCH 01/13] feat: add contracts for Polygon zkEVM --- .../polygon_zkevm/PolygonzkEVMBroadcaster.vy | 151 ++++++++++++++++++ .../polygon_zkevm/PolygonzkEVMRelayer.vy | 84 ++++++++++ 2 files changed, 235 insertions(+) create mode 100644 contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy create mode 100644 contracts/polygon_zkevm/PolygonzkEVMRelayer.vy diff --git a/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy b/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy new file mode 100644 index 0000000..62ce197 --- /dev/null +++ b/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy @@ -0,0 +1,151 @@ +# @version 0.3.10 +""" +@title Polygon zkEVM Broadcaster +@author CurveFi +""" + + +interface PolygonZkEVMBridge: + def bridgeMessage(destination_network: uint32, destination_address: address, force_update: bool, metadata: Bytes[MAX_MESSAGE_RECEIVED]): payable + + +event Broadcast: + agent: Agent + messages: DynArray[Message, MAX_MESSAGES] + + +event SetNewBridge: + new_bridge: PolygonZkEVMBridge + + +event SetNewDestinationNetwork: + new_network: uint32 + + +event ApplyAdmins: + admins: AdminSet + +event CommitAdmins: + future_admins: AdminSet + + +enum Agent: + OWNERSHIP + PARAMETER + EMERGENCY + + +struct AdminSet: + ownership: address + parameter: address + emergency: address + +struct Message: + target: address + data: Bytes[MAX_BYTES] + + +MAX_BYTES: constant(uint256) = 1024 +MAX_MESSAGES: constant(uint256) = 8 +MAX_MESSAGE_RECEIVED: constant(uint256) = 9400 + + +admins: public(AdminSet) +future_admins: public(AdminSet) + +agent: public(HashMap[address, Agent]) + +polygon_zkevm_bridge: public(PolygonZkEVMBridge) +destination_network: public(uint32) + + +@external +def __init__(_admins: AdminSet, _polygon_zkevm_bridge: PolygonZkEVMBridge, _destination_network: uint32): + assert _admins.ownership != _admins.parameter # a != b + assert _admins.ownership != _admins.emergency # a != c + assert _admins.parameter != _admins.emergency # b != c + + self.admins = _admins + + self.agent[_admins.ownership] = Agent.OWNERSHIP + self.agent[_admins.parameter] = Agent.PARAMETER + self.agent[_admins.emergency] = Agent.EMERGENCY + + self.polygon_zkevm_bridge = _polygon_zkevm_bridge + self.destination_network = _destination_network + + log ApplyAdmins(_admins) + + +@external +def broadcast(_messages: DynArray[Message, MAX_MESSAGES], _force_update: bool=False): + """ + @notice Broadcast a sequence of messages. + @param _messages The sequence of messages to broadcast. + """ + agent: Agent = self.agent[msg.sender] + assert agent != empty(Agent) + + self.polygon_zkevm_bridge.bridgeMessage(self.destination_network, self, _force_update, + _abi_encode( # relay(uint256,(address,bytes)[]) + agent, + _messages, + method_id=method_id("relay(uint256,(address,bytes)[])"), + ), + ) + + log Broadcast(agent, _messages) + + +@external +def set_new_bridge(_new_bridge: PolygonZkEVMBridge): + assert msg.sender == self.admins.ownership + + self.polygon_zkevm_bridge = _new_bridge + log SetNewBridge(_new_bridge) + + +@external +def set_destination_network(_new_network: uint32): + assert msg.sender == self.admins.ownership + + self.destination_network = _new_network + log SetNewDestinationNetwork(_new_network) + + +@external +def commit_admins(_future_admins: AdminSet): + """ + @notice Commit an admin set to use in the future. + """ + assert msg.sender == self.admins.ownership + + assert _future_admins.ownership != _future_admins.parameter # a != b + assert _future_admins.ownership != _future_admins.emergency # a != c + assert _future_admins.parameter != _future_admins.emergency # b != c + + self.future_admins = _future_admins + log CommitAdmins(_future_admins) + + +@external +def apply_admins(): + """ + @notice Apply the future admin set. + """ + admins: AdminSet = self.admins + assert msg.sender == admins.ownership + + # reset old admins + self.agent[admins.ownership] = empty(Agent) + self.agent[admins.parameter] = empty(Agent) + self.agent[admins.emergency] = empty(Agent) + + # set new admins + future_admins: AdminSet = self.future_admins + self.agent[future_admins.ownership] = Agent.OWNERSHIP + self.agent[future_admins.parameter] = Agent.PARAMETER + self.agent[future_admins.emergency] = Agent.EMERGENCY + + self.admins = future_admins + log ApplyAdmins(future_admins) diff --git a/contracts/polygon_zkevm/PolygonzkEVMRelayer.vy b/contracts/polygon_zkevm/PolygonzkEVMRelayer.vy new file mode 100644 index 0000000..0052497 --- /dev/null +++ b/contracts/polygon_zkevm/PolygonzkEVMRelayer.vy @@ -0,0 +1,84 @@ +# @version 0.3.10 +""" +@title Polygon zkEVM Relayer +@author CurveFi +""" + +event Relay: + agent: Agent + messages: DynArray[Message, MAX_MESSAGES] + +event SetMessenger: + messenger: address + +event SetOriginNetwork: + origin_network: uint32 + + +interface IAgent: + def execute(_messages: DynArray[Message, MAX_MESSAGES]): nonpayable + + +enum Agent: + OWNERSHIP + PARAMETER + EMERGENCY + + +struct Message: + target: address + data: Bytes[MAX_BYTES] + + +MAX_BYTES: constant(uint256) = 1024 +MAX_MESSAGES: constant(uint256) = 8 +MAX_MESSAGE_RECEIVED: constant(uint256) = 9400 +CODE_OFFSET: constant(uint256) = 3 + + +OWNERSHIP_AGENT: public(immutable(address)) +PARAMETER_AGENT: public(immutable(address)) +EMERGENCY_AGENT: public(immutable(address)) + + +agent: HashMap[Agent, address] +MESSENGER: public(immutable(address)) +ORIGIN_NETWORK: public(immutable(uint32)) + + +@external +def __init__(_agent_blueprint: address, _messenger: address, _origin_network: uint32): + MESSENGER = _messenger + log SetMessenger(_messenger) + ORIGIN_NETWORK = _origin_network + + OWNERSHIP_AGENT = create_from_blueprint(_agent_blueprint, code_offset=CODE_OFFSET) + PARAMETER_AGENT = create_from_blueprint(_agent_blueprint, code_offset=CODE_OFFSET) + EMERGENCY_AGENT = create_from_blueprint(_agent_blueprint, code_offset=CODE_OFFSET) + + self.agent[Agent.OWNERSHIP] = OWNERSHIP_AGENT + self.agent[Agent.PARAMETER] = PARAMETER_AGENT + self.agent[Agent.EMERGENCY] = EMERGENCY_AGENT + + +@external +def relay(_agent: Agent, _messages: DynArray[Message, MAX_MESSAGES]): + """ + @notice Receive messages for an agent and relay them. + @param _agent The agent to relay messages to. + @param _messages The sequence of messages to relay. + """ + assert msg.sender == self + + IAgent(self.agent[_agent]).execute(_messages) + + log Relay(_agent, _messages) + + +@external +def onMessageReceived(_origin_address: address, _origin_network: uint32, _data: Bytes[MAX_MESSAGE_RECEIVED]): + assert msg.sender == MESSENGER + assert _origin_address == self + assert _origin_network == ORIGIN_NETWORK + + raw_call(self, _data) # .relay() From a9ec9698854a8bba7a7102631324887f21208658 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Thu, 2 May 2024 22:40:25 +0300 Subject: [PATCH 02/13] chore: add tests for Polygon zkEVM contracts --- .../mocks/MockPolygonzkEVMBridge.vy | 52 ++++++++++++ hardhat.config.js | 2 +- tests/polygon_zkevm/__init__.py | 0 tests/polygon_zkevm/conftest.py | 24 ++++++ tests/polygon_zkevm/test_broadcaster.py | 85 +++++++++++++++++++ tests/polygon_zkevm/test_relayer.py | 54 ++++++++++++ 6 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 contracts/polygon_zkevm/mocks/MockPolygonzkEVMBridge.vy create mode 100644 tests/polygon_zkevm/__init__.py create mode 100644 tests/polygon_zkevm/conftest.py create mode 100644 tests/polygon_zkevm/test_broadcaster.py create mode 100644 tests/polygon_zkevm/test_relayer.py diff --git a/contracts/polygon_zkevm/mocks/MockPolygonzkEVMBridge.vy b/contracts/polygon_zkevm/mocks/MockPolygonzkEVMBridge.vy new file mode 100644 index 0000000..3cf3cde --- /dev/null +++ b/contracts/polygon_zkevm/mocks/MockPolygonzkEVMBridge.vy @@ -0,0 +1,52 @@ +# @version 0.3.10 + + +origin_address: public(address) +destination_address: public(address) +origin_network: public(uint32) +metadata: public(Bytes[9000]) + +force_updated: public(bool) + +count: public(uint256) + + +@external +def _set_origin_network(_origin_network: uint32): + self.origin_network = _origin_network + +@external +def _set_origin_address(_origin_address: address): + self.origin_address = _origin_address + +@external +def _set_destination_address(_destination_address: address): + self.destination_address = _destination_address + + +@payable +@external +def bridgeMessage(_destination_network: uint32, _destination_address: address, _force_update: bool, _metadata: Bytes[9000]): + assert _destination_network == 3, "DestinationNetworkInvalid" + + self.origin_address = msg.sender + self.destination_address = _destination_address + self.metadata = _metadata + + self.force_updated = _force_update + + self.count += 1 + + +@payable +@external +def claimMessage(): + raw_call( + self.destination_address, + _abi_encode( + self.origin_address, self.origin_network, self.metadata, + method_id=method_id("onMessageReceived(address,uint32,bytes)"), + ), + value=msg.value, + revert_on_failure=True, + ) diff --git a/hardhat.config.js b/hardhat.config.js index be70259..985fd88 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -3,7 +3,7 @@ module.exports = { networks: { hardhat: { - hardfork: "london", + hardfork: "cancun", // Base fee of 0 allows use of 0 gas price when testing initialBaseFeePerGas: 0, accounts: { diff --git a/tests/polygon_zkevm/__init__.py b/tests/polygon_zkevm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/polygon_zkevm/conftest.py b/tests/polygon_zkevm/conftest.py new file mode 100644 index 0000000..91adcde --- /dev/null +++ b/tests/polygon_zkevm/conftest.py @@ -0,0 +1,24 @@ +import pytest + + +@pytest.fixture(scope="module") +def mock_bridge(alice, project): + yield project.MockPolygonzkEVMBridge.deploy(sender=alice) + + +@pytest.fixture(scope="module") +def relayer(alice, project, agent_blueprint, mock_bridge): + relayer = project.PolygonzkEVMRelayer.deploy(agent_blueprint, mock_bridge, 0, sender=alice) + yield relayer + + +@pytest.fixture(scope="module") +def agents(relayer): + yield [getattr(relayer, attr + "_AGENT")() for attr in ["OWNERSHIP", "PARAMETER", "EMERGENCY"]] + + +@pytest.fixture(scope="module") +def broadcaster(alice, bob, charlie, project, mock_bridge): + yield project.PolygonzkEVMBroadcaster.deploy( + (alice, bob, charlie), mock_bridge, 3, sender=alice + ) diff --git a/tests/polygon_zkevm/test_broadcaster.py b/tests/polygon_zkevm/test_broadcaster.py new file mode 100644 index 0000000..d4a8641 --- /dev/null +++ b/tests/polygon_zkevm/test_broadcaster.py @@ -0,0 +1,85 @@ +import itertools + +import ape +import eth_abi +import pytest +from eth_utils import keccak + + +def test_constructor(alice, bob, charlie, broadcaster, mock_bridge): + assert broadcaster.admins() == (alice, bob, charlie) + assert broadcaster.polygon_zkevm_bridge() == mock_bridge + assert broadcaster.destination_network() == 3 + + +@pytest.mark.parametrize("idx,force_update", itertools.product(range(3), [False, True])) +def test_broadcast_success( + alice, bob, charlie, broadcaster, mock_bridge, idx, force_update +): + msg_sender = [alice, bob, charlie][idx] + + tx = broadcaster.broadcast([(alice.address, b"")], force_update, sender=msg_sender) + + decoded = eth_abi.decode_single("(uint256,(address,bytes)[])", mock_bridge.metadata()[4:]) + + assert mock_bridge.count() == 1 + assert len(mock_bridge.metadata()) < 500 + assert mock_bridge.metadata()[:4] == keccak(text="relay(uint256,(address,bytes)[])")[:4] + assert decoded[0] == 2**idx + assert decoded[1] == ((alice.address.lower(), b""),) + + assert mock_bridge.force_updated() == force_update + + +def test_broadcast_reverts(dave, broadcaster): + with ape.reverts(): + broadcaster.broadcast([(dave.address, b"")], False, sender=dave) + + +def test_set_new_bridge(alice, bob, broadcaster, ZERO_ADDRESS): + tx = broadcaster.set_new_bridge(ZERO_ADDRESS, sender=alice) + + assert broadcaster.polygon_zkevm_bridge() == ZERO_ADDRESS + assert len(tx.logs) == 1 + assert tx.logs[0]["topics"][0] == keccak(text="SetNewBridge(address)") + + with ape.reverts(): + broadcaster.set_new_bridge(ZERO_ADDRESS, sender=bob) + + +def test_set_destination_network(alice, bob, broadcaster, ZERO_ADDRESS): + tx = broadcaster.set_destination_network(2, sender=alice) + + assert broadcaster.destination_network() == 2 + assert len(tx.logs) == 1 + assert tx.logs[0]["topics"][0] == keccak(text="SetNewDestinationNetwork(uint32)") + + with ape.reverts(): + broadcaster.set_destination_network(2, sender=bob) + + +def test_commit_admins(alice, bob, charlie, broadcaster): + tx = broadcaster.commit_admins((alice, bob, charlie), sender=alice) + + assert broadcaster.future_admins() == (alice, bob, charlie) + assert len(tx.logs) == 1 + assert tx.logs[0]["topics"][0] == keccak("CommitAdmins((address,address,address))".encode()) + + with ape.reverts(): + broadcaster.commit_admins((bob, charlie, alice), sender=bob) + + with ape.reverts(): + broadcaster.commit_admins((alice, alice, alice), sender=alice) + + +def test_apply_admins(alice, bob, charlie, broadcaster): + broadcaster.commit_admins((charlie, bob, alice), sender=alice) + + with ape.reverts(): + broadcaster.apply_admins(sender=bob) + + tx = broadcaster.apply_admins(sender=alice) + + assert broadcaster.admins() == (charlie, bob, alice) + assert len(tx.logs) == 1 + assert tx.logs[0]["topics"][0] == keccak("ApplyAdmins((address,address,address))".encode()) diff --git a/tests/polygon_zkevm/test_relayer.py b/tests/polygon_zkevm/test_relayer.py new file mode 100644 index 0000000..704e5ce --- /dev/null +++ b/tests/polygon_zkevm/test_relayer.py @@ -0,0 +1,54 @@ +import math + +import ape +import eth_abi +import pytest + +from eth_utils import keccak + +from tests import AgentEnum + + +def test_constructor(alice, relayer, mock_bridge, ZERO_ADDRESS): + assert relayer.OWNERSHIP_AGENT() != ZERO_ADDRESS + assert relayer.PARAMETER_AGENT() != ZERO_ADDRESS + assert relayer.EMERGENCY_AGENT() != ZERO_ADDRESS + assert relayer.MESSENGER() == mock_bridge + + +@pytest.mark.parametrize("agent", AgentEnum) +def test_relay_success(alice, bob, relayer, mock_bridge, agent, agents, broadcaster): + agent_addr = agents[int(math.log2(agent))] + data = keccak(text="relay(uint256,(address,bytes)[])")[:4] +\ + eth_abi.encode(["uint256", "(address,bytes)[]"], [agent, [(alice.address, b"")]]) + + mock_bridge.bridgeMessage(3, relayer.address, False, data, sender=broadcaster) + mock_bridge._set_destination_address(relayer, sender=alice) + mock_bridge._set_origin_address(relayer, sender=alice) + tx = mock_bridge.claimMessage(sender=alice) + + targets = [eth_abi.decode_single("address", f.stack[-2]) for f in tx.trace if f.op == "CALL"] + assert {relayer.address.lower(), agent_addr.lower(), alice.address.lower()} == set(targets) + + # invalid caller + with ape.reverts(): + relayer.relay(agent, [(alice.address, b"")], sender=alice) + + # invalid caller + with ape.reverts(): + relayer.onMessageReceived(broadcaster.address, 0, data, sender=alice) + + # invalid sender + mock_bridge.bridgeMessage(3, relayer.address, False, data, sender=bob) + mock_bridge._set_destination_address(relayer, sender=alice) + mock_bridge._set_origin_address(alice, sender=alice) + with ape.reverts(): + mock_bridge.claimMessage(sender=alice) + + # invalid origin network + mock_bridge._set_origin_network(2, sender=alice) + mock_bridge.bridgeMessage(3, relayer.address, False, data, sender=broadcaster) + mock_bridge._set_destination_address(relayer, sender=alice) + mock_bridge._set_origin_address(relayer, sender=alice) + with ape.reverts(): + mock_bridge.claimMessage(sender=alice) From 13328c96115dd8cc8c4ab84a6e340d09358c9554 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Thu, 2 May 2024 23:03:10 +0300 Subject: [PATCH 03/13] chore: add script to deploy on xlayer --- scripts/polygon_zkevm.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 scripts/polygon_zkevm.py diff --git a/scripts/polygon_zkevm.py b/scripts/polygon_zkevm.py new file mode 100644 index 0000000..b81a86e --- /dev/null +++ b/scripts/polygon_zkevm.py @@ -0,0 +1,40 @@ +import click +from ape import project +from ape.cli import NetworkBoundCommand, account_option, network_option + + +POLYGON_ZKEVM_BRIDGE = "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe" + + +@click.command(cls=NetworkBoundCommand) +@account_option() +@network_option() +@click.option("--blueprint") +@click.option("--destination_chain_id") +def cli(account, network, blueprint, destination_chain_id): + chain_id = project.provider.chain_id + + if chain_id not in (1,): + relayer = project.PolygonzkEVMRelayer.deploy( + blueprint, + POLYGON_ZKEVM_BRIDGE, + 0, # origin_network = Ethereum + gas_limit=800_000, + gas_price=project.provider.gas_price, + sender=account, + ) + return project.Vault.deploy( + relayer.OWNERSHIP_AGENT(), gas_price=project.provider.gas_price, sender=account + ) + + # L1 + if chain_id == 1: + admins = ( + "0x40907540d8a6C65c637785e8f8B742ae6b0b9968", + "0x4EEb3bA4f221cA16ed4A0cC7254E2E32DF948c5f", + "0x467947EE34aF926cF1DCac093870f613C96B1E0c", + ) + + if destination_chain_id == 196: # xlayer + destination_network = 3 + return project.PolygonzkEVMBroadcaster.deploy(admins, POLYGON_ZKEVM_BRIDGE, destination_network, sender=account) From 92a544a79a2db676a07b1e6eb5dd5b8963d218a2 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Thu, 2 May 2024 23:33:34 +0300 Subject: [PATCH 04/13] chore: install hardhat in GitHub actions --- .github/workflows/test.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 112a9dc..cf334a2 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -16,4 +16,5 @@ jobs: with: node-version: 16 - run: npm ci + - run: npm install --save-dev hardhat - run: ape test From 7ec02141bdf4ccf33c6a8063ee6307f3d8df6cb3 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Fri, 3 May 2024 00:46:32 +0300 Subject: [PATCH 05/13] chore: install hardhat in GitHub actions --- package-lock.json | 2112 +++++++---------------- package.json | 2 +- requirements.txt | 377 ++-- tests/arbitrum/test_broadcaster.py | 2 +- tests/arbitrum/test_relayer.py | 4 +- tests/conftest.py | 19 +- tests/optimism/test_broadcaster.py | 10 +- tests/optimism/test_relayer.py | 4 +- tests/polygon_zkevm/test_broadcaster.py | 2 +- tests/polygon_zkevm/test_relayer.py | 4 +- 10 files changed, 818 insertions(+), 1718 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3ec47eb..36e5bf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "devDependencies": { - "hardhat": "^2.11.2" + "hardhat": "^2.22.3" } }, "node_modules/@ethersproject/abi": { @@ -400,6 +400,15 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -440,285 +449,178 @@ } ] }, - "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", + "node_modules/@nomicfoundation/edr": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.3.7.tgz", + "integrity": "sha512-v2JFWnFKRsnOa6PDUrD+sr8amcdhxnG/YbL7LzmgRGU1odWEyOF4/EwNeUajQr4ZNKVWrYnJ6XjydXtUge5OBQ==", "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" - }, "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node": ">= 18" + }, + "optionalDependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.3.7", + "@nomicfoundation/edr-darwin-x64": "0.3.7", + "@nomicfoundation/edr-linux-arm64-gnu": "0.3.7", + "@nomicfoundation/edr-linux-arm64-musl": "0.3.7", + "@nomicfoundation/edr-linux-x64-gnu": "0.3.7", + "@nomicfoundation/edr-linux-x64-musl": "0.3.7", + "@nomicfoundation/edr-win32-x64-msvc": "0.3.7" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.7.tgz", + "integrity": "sha512-6tK9Lv/lSfyBvpEQ4nsTfgxyDT1y1Uv/x8Wa+aB+E8qGo3ToexQ1BMVjxJk6PChXCDOWxB3B4KhqaZFjdhl3Ow==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.7.tgz", + "integrity": "sha512-1RrQ/1JPwxrYO69e0tglFv5H+ggour5Ii3bb727+yBpBShrxtOTQ7fZyfxA5h62LCN+0Z9wYOPeQ7XFcVurMaQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.7.tgz", + "integrity": "sha512-ds/CKlBoVXIihjhflhgPn13EdKWed6r5bgvMs/YwRqT5wldQAQJZWAfA2+nYm0Yi2gMGh1RUpBcfkyl4pq7G+g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.7.tgz", + "integrity": "sha512-e29udiRaPujhLkM3+R6ju7QISrcyOqpcaxb2FsDWBkuD7H8uU9JPZEyyUIpEp5uIY0Jh1eEJPKZKIXQmQAEAuw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "crc-32": "^1.2.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.7.tgz", + "integrity": "sha512-/xkjmTyv+bbJ4akBCW0qzFKxPOV4AqLOmqurov+s9umHb16oOv72osSa3SdzJED2gHDaKmpMITT4crxbar4Axg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.7.tgz", + "integrity": "sha512-QwBP9xlmsbf/ldZDGLcE4QiAb8Zt46E/+WLpxHBATFhGa7MrpJh6Zse+h2VlrT/SYLPbh2cpHgSmoSlqVxWG9g==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.7.tgz", + "integrity": "sha512-j/80DEnkxrF2ewdbk/gQ2EOPvgF0XSsg8D0o4+6cKhUVAW6XwtWKzIphNL6dyD2YaWEPgIrNvqiJK/aln0ww4Q==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" + "node": ">= 18" } }, - "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "dev": true, "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "@nomicfoundation/ethereumjs-util": "9.0.4" } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", "dev": true, "bin": { - "rlp": "bin/rlp" + "rlp": "bin/rlp.cjs" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "node": ">=18" } }, "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { @@ -745,69 +647,27 @@ } }, "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" + "node": ">=18" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, - "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": { + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", @@ -831,30 +691,30 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz", - "integrity": "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", "dev": true, "engines": { "node": ">= 12" }, "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.0.3", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.0.3", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.0.3", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.0.3", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.0.3", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz", - "integrity": "sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", "cpu": [ "arm64" ], @@ -868,9 +728,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz", - "integrity": "sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", "cpu": [ "x64" ], @@ -884,9 +744,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz", - "integrity": "sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", "cpu": [ "x64" ], @@ -900,9 +760,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz", - "integrity": "sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", "cpu": [ "arm64" ], @@ -916,9 +776,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz", - "integrity": "sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", "cpu": [ "arm64" ], @@ -932,9 +792,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz", - "integrity": "sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", "cpu": [ "x64" ], @@ -948,9 +808,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz", - "integrity": "sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", "cpu": [ "x64" ], @@ -964,9 +824,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz", - "integrity": "sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", "cpu": [ "arm64" ], @@ -980,9 +840,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz", - "integrity": "sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", "cpu": [ "ia32" ], @@ -996,9 +856,9 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz", - "integrity": "sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", "cpu": [ "x64" ], @@ -1158,12 +1018,6 @@ "node": ">=6" } }, - "node_modules/@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, "node_modules/@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -1209,36 +1063,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -1273,6 +1097,15 @@ "node": ">=8" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -1337,24 +1170,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "dependencies": { - "async": "^2.4.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1370,67 +1185,130 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "engines": { + "node": ">=8" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "bigint-mod-arith": "^3.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=10.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=10.4.0" + "node": ">=7.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1460,18 +1338,6 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "node_modules/browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -1512,30 +1378,6 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1548,18 +1390,6 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1569,19 +1399,6 @@ "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -1594,15 +1411,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1660,23 +1468,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -1686,6 +1477,18 @@ "node": ">=6" } }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1739,18 +1542,6 @@ "node": ">= 0.6" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -1986,15 +1777,6 @@ "npm": ">=3" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -2098,18 +1880,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2119,20 +1889,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -2172,31 +1928,25 @@ "dev": true }, "node_modules/hardhat": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz", - "integrity": "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==", + "version": "2.22.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.3.tgz", + "integrity": "sha512-k8JV2ECWNchD6ahkg2BR5wKVxY0OiKot7fuxiIpRK0frRqyOljcR2vKwgWSLw6YIeDcNNA4xybj7Og7NSxr2hA==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", - "@nomicfoundation/solidity-analyzer": "^0.0.3", + "@nomicfoundation/edr": "^0.3.5", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", "adm-zip": "^0.4.16", "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", "chalk": "^2.4.2", "chokidar": "^3.4.0", "ci-info": "^2.0.0", @@ -2216,7 +1966,6 @@ "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", - "qs": "^6.7.0", "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", @@ -2224,15 +1973,12 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, "bin": { - "hardhat": "internal/cli/cli.js" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || ^18.0.0" + "hardhat": "internal/cli/bootstrap.js" }, "peerDependencies": { "ts-node": "*", @@ -2247,18 +1993,6 @@ } } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2268,18 +2002,6 @@ "node": ">=4" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -2365,26 +2087,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", @@ -2437,29 +2139,6 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2581,45 +2260,6 @@ "graceful-fs": "^4.1.9" } }, - "node_modules/level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, - "dependencies": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -2731,24 +2371,6 @@ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", "dev": true }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -2760,20 +2382,6 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, - "dependencies": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -2999,15 +2607,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3026,12 +2625,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true - }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -3058,15 +2651,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", @@ -3182,50 +2766,15 @@ "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, "engines": { - "node": ">=0.6" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -3340,35 +2889,6 @@ "rlp": "bin/rlp" } }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3459,20 +2979,6 @@ "sha.js": "bin.js" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/solc": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", @@ -3576,15 +3082,6 @@ "node": ">= 0.8" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3727,15 +3224,15 @@ } }, "node_modules/undici": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", - "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "dev": true, "dependencies": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": ">=12.18" + "node": ">=14.0" } }, "node_modules/universalify": { @@ -3771,6 +3268,18 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", @@ -3863,12 +3372,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -4137,6 +3640,12 @@ "@ethersproject/strings": "^5.7.0" } }, + "@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true + }, "@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -4162,307 +3671,94 @@ "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", "dev": true }, - "@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", + "@nomicfoundation/edr": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.3.7.tgz", + "integrity": "sha512-v2JFWnFKRsnOa6PDUrD+sr8amcdhxnG/YbL7LzmgRGU1odWEyOF4/EwNeUajQr4ZNKVWrYnJ6XjydXtUge5OBQ==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } + "@nomicfoundation/edr-darwin-arm64": "0.3.7", + "@nomicfoundation/edr-darwin-x64": "0.3.7", + "@nomicfoundation/edr-linux-arm64-gnu": "0.3.7", + "@nomicfoundation/edr-linux-arm64-musl": "0.3.7", + "@nomicfoundation/edr-linux-x64-gnu": "0.3.7", + "@nomicfoundation/edr-linux-x64-musl": "0.3.7", + "@nomicfoundation/edr-win32-x64-msvc": "0.3.7" } }, - "@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", + "@nomicfoundation/edr-darwin-arm64": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.7.tgz", + "integrity": "sha512-6tK9Lv/lSfyBvpEQ4nsTfgxyDT1y1Uv/x8Wa+aB+E8qGo3ToexQ1BMVjxJk6PChXCDOWxB3B4KhqaZFjdhl3Ow==", "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } + "optional": true }, - "@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "@nomicfoundation/edr-darwin-x64": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.7.tgz", + "integrity": "sha512-1RrQ/1JPwxrYO69e0tglFv5H+ggour5Ii3bb727+yBpBShrxtOTQ7fZyfxA5h62LCN+0Z9wYOPeQ7XFcVurMaQ==", "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "crc-32": "^1.2.0" - } + "optional": true }, - "@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.7.tgz", + "integrity": "sha512-ds/CKlBoVXIihjhflhgPn13EdKWed6r5bgvMs/YwRqT5wldQAQJZWAfA2+nYm0Yi2gMGh1RUpBcfkyl4pq7G+g==", "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } + "optional": true }, - "@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.7.tgz", + "integrity": "sha512-e29udiRaPujhLkM3+R6ju7QISrcyOqpcaxb2FsDWBkuD7H8uU9JPZEyyUIpEp5uIY0Jh1eEJPKZKIXQmQAEAuw==", "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", - "dev": true + "optional": true }, - "@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.7.tgz", + "integrity": "sha512-/xkjmTyv+bbJ4akBCW0qzFKxPOV4AqLOmqurov+s9umHb16oOv72osSa3SdzJED2gHDaKmpMITT4crxbar4Axg==", "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } + "optional": true }, - "@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "@nomicfoundation/edr-linux-x64-musl": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.7.tgz", + "integrity": "sha512-QwBP9xlmsbf/ldZDGLcE4QiAb8Zt46E/+WLpxHBATFhGa7MrpJh6Zse+h2VlrT/SYLPbh2cpHgSmoSlqVxWG9g==", "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } + "optional": true + }, + "@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.7.tgz", + "integrity": "sha512-j/80DEnkxrF2ewdbk/gQ2EOPvgF0XSsg8D0o4+6cKhUVAW6XwtWKzIphNL6dyD2YaWEPgIrNvqiJK/aln0ww4Q==", + "dev": true, + "optional": true }, - "@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } + "@nomicfoundation/ethereumjs-util": "9.0.4" } }, - "@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "dev": true + }, + "@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", "ethereum-cryptography": "0.1.3" }, "dependencies": { @@ -4491,28 +3787,14 @@ } } }, - "@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", + "@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" }, "dependencies": { "ethereum-cryptography": { @@ -4541,90 +3823,90 @@ } }, "@nomicfoundation/solidity-analyzer": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz", - "integrity": "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", "dev": true, "requires": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.0.3", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.0.3", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.0.3", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.0.3", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.0.3", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.0.3", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" } }, "@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz", - "integrity": "sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz", - "integrity": "sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz", - "integrity": "sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz", - "integrity": "sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz", - "integrity": "sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz", - "integrity": "sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz", - "integrity": "sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz", - "integrity": "sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz", - "integrity": "sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz", - "integrity": "sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", "dev": true, "optional": true }, @@ -4736,12 +4018,6 @@ "tslib": "^1.9.3" } }, - "@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, "@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -4787,30 +4063,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - } - }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -4836,6 +4088,15 @@ "indent-string": "^4.0.0" } }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -4882,24 +4143,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4915,27 +4158,6 @@ "safe-buffer": "^5.0.1" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", - "dev": true, - "requires": { - "bigint-mod-arith": "^3.1.0" - } - }, - "bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -4954,6 +4176,79 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4979,18 +4274,6 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -5031,16 +4314,6 @@ "safe-buffer": "^5.1.2" } }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5053,43 +4326,18 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5133,25 +4381,18 @@ "safe-buffer": "^5.0.1" } }, - "classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", - "dev": true, - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -5202,12 +4443,6 @@ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -5413,12 +4648,6 @@ "strip-hex-prefix": "1.0.0" } }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -5489,35 +4718,12 @@ "dev": true, "optional": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5548,31 +4754,25 @@ "dev": true }, "hardhat": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz", - "integrity": "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==", + "version": "2.22.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.3.tgz", + "integrity": "sha512-k8JV2ECWNchD6ahkg2BR5wKVxY0OiKot7fuxiIpRK0frRqyOljcR2vKwgWSLw6YIeDcNNA4xybj7Og7NSxr2hA==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", - "@nomicfoundation/solidity-analyzer": "^0.0.3", + "@nomicfoundation/edr": "^0.3.5", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", "adm-zip": "^0.4.16", "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", "chalk": "^2.4.2", "chokidar": "^3.4.0", "ci-info": "^2.0.0", @@ -5592,7 +4792,6 @@ "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", - "qs": "^6.7.0", "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", @@ -5600,32 +4799,17 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -5696,12 +4880,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, "immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", @@ -5748,12 +4926,6 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5843,32 +5015,6 @@ "graceful-fs": "^4.1.9" } }, - "level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, - "requires": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - } - }, - "level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true - }, - "level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -5952,21 +5098,6 @@ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", "dev": true }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -5978,17 +5109,6 @@ "safe-buffer": "^5.1.2" } }, - "memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, - "requires": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" - } - }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -6151,12 +5271,6 @@ } } }, - "module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6169,12 +5283,6 @@ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true - }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -6193,12 +5301,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, "obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", @@ -6290,21 +5392,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6395,21 +5482,6 @@ "bn.js": "^5.2.0" } }, - "run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6476,17 +5548,6 @@ "safe-buffer": "^5.0.1" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, "solc": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", @@ -6573,12 +5634,6 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6687,12 +5742,12 @@ "dev": true }, "undici": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", - "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "dev": true, "requires": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" } }, "universalify": { @@ -6719,6 +5774,15 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, "workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", @@ -6781,12 +5845,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index d7705cc..85d1d9f 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { "devDependencies": { - "hardhat": "^2.11.2" + "hardhat": "^2.22.3" } } diff --git a/requirements.txt b/requirements.txt index 6392a3c..7cd3589 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,94 +1,102 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # -# pip-compile requirements.in +# pip-compile # -aiohttp==3.8.3 +aiohttp==3.9.5 # via web3 -aiosignal==1.2.0 +aiosignal==1.3.1 # via aiohttp -ape-arbitrum==0.5.0 +annotated-types==0.6.0 + # via pydantic +ape-arbitrum==0.7.2 # via -r requirements.in -ape-etherscan==0.5.1 +ape-etherscan==0.7.2 # via -r requirements.in -ape-hardhat==0.5.0 +ape-hardhat==0.7.2 # via -r requirements.in -ape-infura==0.5.0 +ape-infura==0.7.3 # via -r requirements.in -ape-optimism==0.5.0a1 +ape-optimism==0.7.3 # via -r requirements.in -ape-solidity==0.5.1 +ape-solidity==0.7.3 # via -r requirements.in -ape-vyper==0.5.0 +ape-vyper==0.7.1 # via -r requirements.in -async-timeout==4.0.2 +asttokens==2.4.1 + # via + # stack-data + # vyper +async-timeout==4.0.3 # via aiohttp -attrs==22.1.0 +attrs==23.2.0 # via # aiohttp # jsonschema - # pytest -backcall==0.2.0 - # via ipython + # referencing base58==1.0.3 # via - # multiaddr # py-cid # py-multihash -bitarray==1.2.2 +bitarray==2.9.2 # via eth-account -black==22.10.0 +black==24.4.2 # via -r requirements.in cached-property==1.5.2 # via # py-ecc # py-evm -certifi==2022.9.24 +cbor2==5.6.3 + # via vyper +certifi==2024.2.2 # via requests -cffi==1.15.1 +cffi==1.16.0 # via - # pygit2 + # cryptography # pynacl -cfgv==3.3.1 +cfgv==3.4.0 # via pre-commit -charset-normalizer==2.1.1 +charset-normalizer==3.3.2 + # via requests +chompjs==1.2.3 + # via ape-hardhat +ckzg==1.0.1 # via - # aiohttp - # requests -click==8.1.3 + # eth-account + # py-evm +click==8.1.7 # via # black # eth-ape -colorama==0.4.5 - # via rich -commonmark==0.9.1 - # via rich -cytoolz==0.12.0 +cryptography==42.0.5 + # via pyjwt +cytoolz==0.12.3 # via eth-utils dataclassy==0.11.1 # via eip712 decorator==5.1.1 # via ipython -deprecated==1.2.13 +deprecated==1.2.14 # via pygithub -distlib==0.3.6 +distlib==0.3.8 # via virtualenv -eip712==0.1.4 +eip712==0.2.7 # via eth-ape -eth-abi==3.0.1 +eth-abi==5.1.0 # via # eip712 # eth-account # eth-ape # eth-tester # web3 -eth-account==0.6.1 +eth-account==0.11.2 # via + # eip712 # eth-ape # eth-tester # web3 -eth-ape==0.5.1 +eth-ape==0.7.19 # via # -r requirements.in # ape-arbitrum @@ -98,38 +106,48 @@ eth-ape==0.5.1 # ape-optimism # ape-solidity # ape-vyper -eth-bloom==1.0.4 +eth-bloom==3.0.1 # via py-evm -eth-hash[pycryptodome,pysha3]==0.3.3 +eth-hash[pycryptodome,pysha3]==0.7.0 # via + # eip712 # eth-bloom + # eth-pydantic-types # eth-tester # eth-utils # trie # web3 -eth-keyfile==0.6.0 +eth-keyfile==0.8.1 # via eth-account -eth-keys==0.4.0 +eth-keys==0.5.1 # via # eth-account # eth-keyfile # eth-tester # py-evm -eth-rlp==0.3.0 +eth-pydantic-types==0.1.0 + # via + # ape-arbitrum + # ape-solidity + # eth-ape + # ethpm-types + # evm-trace +eth-rlp==1.0.1 # via eth-account -eth-tester[py-evm]==v0.6.0-beta.5 +eth-tester[py-evm]==0.11.0b2 # via web3 -eth-typing==3.2.0 +eth-typing==3.5.2 # via # eip712 # eth-abi # eth-ape # eth-keys + # eth-pydantic-types # eth-utils # py-ecc # py-evm # web3 -eth-utils==2.0.0 +eth-utils==2.3.1 # via # eip712 # eth-abi @@ -137,6 +155,7 @@ eth-utils==2.0.0 # eth-ape # eth-keyfile # eth-keys + # eth-pydantic-types # eth-rlp # eth-tester # ethpm-types @@ -146,133 +165,145 @@ eth-utils==2.0.0 # rlp # trie # web3 -ethpm-types==0.3.7 +ethpm-types==0.6.11 # via + # ape-arbitrum + # ape-etherscan + # ape-hardhat + # ape-optimism # ape-solidity + # ape-vyper # eth-ape - # evm-trace -evm-trace==0.1.0a10 +evm-trace==0.1.5 # via # ape-hardhat # eth-ape -filelock==3.8.0 +evmchains==0.0.7 + # via eth-ape +exceptiongroup==1.2.1 + # via + # ipython + # pytest +executing==2.0.1 + # via stack-data +filelock==3.14.0 # via virtualenv -flake8==5.0.4 +flake8==7.0.0 # via -r requirements.in -frozenlist==1.3.1 +frozenlist==1.4.1 # via # aiohttp # aiosignal -greenlet==1.1.3 - # via sqlalchemy -hexbytes==0.3.0 +hexbytes==0.3.1 # via # ape-hardhat # eip712 # eth-account - # eth-ape + # eth-pydantic-types # eth-rlp - # ethpm-types - # evm-trace # trie # web3 -identify==2.5.6 +identify==2.5.36 # via pre-commit -idna==3.4 +idna==3.7 # via # requests # yarl -ijson==3.1.4 +ijson==3.2.3 # via eth-ape -importlib-metadata==5.0.0 - # via eth-ape -iniconfig==1.1.1 +importlib-metadata==7.1.0 + # via vyper +iniconfig==2.0.0 # via pytest -ipfshttpclient==0.8.0a2 - # via web3 -ipython==7.34.0 +ipython==8.24.0 # via eth-ape -isort==5.10.1 +isort==5.13.2 # via -r requirements.in -jedi==0.18.1 +jedi==0.19.1 # via ipython -jsonschema==4.16.0 +jsonschema==4.22.0 # via web3 -lru-dict==1.1.8 +jsonschema-specifications==2023.12.1 + # via jsonschema +lazyasd==0.1.4 + # via eth-ape +lru-dict==1.2.0 # via # py-evm # web3 -matplotlib-inline==0.1.6 +markdown-it-py==3.0.0 + # via rich +matplotlib-inline==0.1.7 # via ipython mccabe==0.7.0 # via flake8 +mdurl==0.1.2 + # via markdown-it-py morphys==1.0 # via # py-cid # py-multibase # py-multicodec # py-multihash -msgspec==0.9.0 +msgspec==0.18.6 # via evm-trace -multiaddr==0.0.9 - # via ipfshttpclient -multidict==6.0.2 +multidict==6.0.5 # via # aiohttp # yarl -mypy-extensions==0.4.3 - # via - # black - # py-ecc - # py-evm -netaddr==0.8.0 - # via multiaddr -nodeenv==1.7.0 +mypy-extensions==1.0.0 + # via black +nodeenv==1.8.0 # via pre-commit -numpy==1.23.3 +numpy==1.26.4 # via pandas -packaging==20.9 +packaging==23.2 # via + # ape-hardhat # ape-solidity + # black # eth-ape + # py-solc-x # pytest -pandas==1.5.0 + # vvm + # vyper +pandas==1.5.3 # via eth-ape -parsimonious==0.8.1 +parsimonious==0.10.0 # via eth-abi -parso==0.8.3 +parso==0.8.4 # via jedi -pathspec==0.10.1 +pathspec==0.12.1 # via black -pexpect==4.8.0 - # via ipython -pickleshare==0.7.5 +pexpect==4.9.0 # via ipython -platformdirs==2.5.2 +platformdirs==4.2.1 # via # black # virtualenv -pluggy==1.0.0 +pluggy==1.5.0 # via # eth-ape # pytest -pre-commit==2.20.0 +pre-commit==3.7.0 # via -r requirements.in -prompt-toolkit==3.0.31 +prompt-toolkit==3.0.43 # via ipython -protobuf==3.20.3 +protobuf==5.26.1 # via web3 ptyprocess==0.7.0 # via pexpect -py==1.11.0 - # via pytest +pure-eval==0.2.2 + # via stack-data py-cid==0.3.0 # via ethpm-types -py-ecc==6.0.0 +py-ecc==7.0.1 # via py-evm -py-evm==0.5.0a2 - # via eth-tester -py-geth==3.9.1 +py-evm==0.10.1b1 + # via + # eth-tester + # evm-trace +py-geth==4.4.0 # via # eth-ape # web3 @@ -282,143 +313,173 @@ py-multicodec==0.2.1 # via py-cid py-multihash==0.2.3 # via py-cid -py-solc-x==1.1.1 +py-solc-x==2.0.2 # via ape-solidity -pycodestyle==2.9.1 +pycodestyle==2.11.1 # via flake8 -pycparser==2.21 +pycparser==2.22 # via cffi -pycryptodome==3.15.0 +pycryptodome==3.20.0 # via - # eip712 # eth-hash # eth-keyfile -pydantic==1.10.2 + # vyper +pydantic==2.7.1 # via # eth-ape + # eth-pydantic-types # ethpm-types # evm-trace -pyethash==0.1.27 - # via py-evm -pyflakes==2.5.0 - # via flake8 -pygit2==1.10.1 + # evmchains + # pydantic-settings +pydantic-core==2.18.2 + # via pydantic +pydantic-settings==2.2.1 # via eth-ape -pygithub==1.55 +pyflakes==3.2.0 + # via flake8 +pygithub==1.59.1 # via eth-ape -pygments==2.13.0 +pygments==2.17.2 # via # ipython # rich -pyjwt==2.5.0 +pyjwt[crypto]==2.8.0 # via pygithub pynacl==1.5.0 # via pygithub -pyparsing==3.0.9 - # via packaging -pyrsistent==0.18.1 - # via jsonschema -pysha3==1.0.2 - # via eth-hash -pytest==7.1.3 +pytest==7.4.4 # via eth-ape python-baseconv==1.2.2 # via py-multibase -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # eth-ape # pandas -pytz==2022.4 +python-dotenv==1.0.1 + # via pydantic-settings +pytz==2024.1 # via pandas -pyyaml==6.0 +pyunormalize==15.1.0 + # via web3 +pyyaml==6.0.1 # via # eth-ape # pre-commit -requests==2.28.1 +referencing==0.35.1 + # via + # jsonschema + # jsonschema-specifications +regex==2024.4.28 + # via parsimonious +requests==2.31.0 # via # ape-etherscan + # ape-hardhat # ape-solidity # eth-ape # ethpm-types - # ipfshttpclient # py-solc-x # pygithub # vvm # web3 -rich==10.16.2 +rich==13.7.1 # via eth-ape -rlp==3.0.0 +rlp==4.0.1 # via # eth-account # eth-rlp # eth-tester # py-evm # trie +rpds-py==0.18.0 + # via + # jsonschema + # referencing +safe-pysha3==1.0.4 + # via eth-hash semantic-version==2.10.0 # via # eth-tester # py-geth - # py-solc-x - # vvm six==1.16.0 # via - # multiaddr - # parsimonious + # asttokens # py-multibase # py-multicodec # py-multihash # python-dateutil sortedcontainers==2.4.0 # via trie -sqlalchemy==1.4.41 +sqlalchemy==2.0.29 # via eth-ape -toml==0.10.2 - # via pre-commit +stack-data==0.6.3 + # via ipython tomli==2.0.1 # via # black # pytest -toolz==0.12.0 +toolz==0.12.1 # via cytoolz -tqdm==4.64.1 +tqdm==4.66.2 # via # ape-vyper # eth-ape -traitlets==5.4.0 +traitlets==5.14.3 # via # eth-ape # ipython # matplotlib-inline -trie==2.0.2 - # via py-evm -typing-extensions==4.4.0 +trie==3.0.1 + # via + # eth-ape + # py-evm +typing-extensions==4.11.0 # via # black + # eth-pydantic-types + # eth-rlp + # eth-typing + # ethpm-types + # ipython # pydantic -urllib3==1.26.12 - # via requests + # pydantic-core + # sqlalchemy + # web3 +urllib3==2.2.1 + # via + # eth-ape + # requests varint==1.0.2 # via - # multiaddr # py-multicodec # py-multihash -virtualenv==20.16.5 +virtualenv==20.26.1 # via pre-commit -vvm==0.1.0 +vvm==0.2.0 # via ape-vyper -wcwidth==0.2.5 +vyper==0.3.10 + # via ape-vyper +watchdog==3.0.0 + # via eth-ape +wcwidth==0.2.13 # via prompt-toolkit -web3[tester]==6.0.0b4 +web3[tester]==6.18.0 # via # ape-hardhat # eth-ape -websockets==10.3 +websockets==12.0 # via web3 -wrapt==1.14.1 +wheel==0.43.0 + # via vyper +wrapt==1.16.0 # via deprecated -yarl==1.8.1 - # via aiohttp -zipp==3.8.1 +yarl==1.9.4 + # via + # aiohttp + # ape-etherscan + # ape-hardhat +zipp==3.18.1 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/tests/arbitrum/test_broadcaster.py b/tests/arbitrum/test_broadcaster.py index 225c794..7e9b358 100644 --- a/tests/arbitrum/test_broadcaster.py +++ b/tests/arbitrum/test_broadcaster.py @@ -17,7 +17,7 @@ def test_constructor(alice, bob, charlie, project, mock_arb_inbox): def test_broadcast_success(alice, bob, charlie, broadcaster, mock_arb_inbox, idx): msg_sender = [alice, bob, charlie][idx] broadcaster.broadcast([(alice.address, b"")], 100_000, 10**9, sender=msg_sender) - decoded = eth_abi.decode_single("(uint256,(address,bytes)[])", mock_arb_inbox.data()[4:]) + decoded = eth_abi.decode(["uint256", "(address,bytes)[]"], mock_arb_inbox.data()[4:]) assert mock_arb_inbox.count() == 1 assert len(mock_arb_inbox.data()) < 500 diff --git a/tests/arbitrum/test_relayer.py b/tests/arbitrum/test_relayer.py index 9e3754b..91fb966 100644 --- a/tests/arbitrum/test_relayer.py +++ b/tests/arbitrum/test_relayer.py @@ -21,8 +21,8 @@ def test_relay_success(alice, relayer, agent, agents): agent_addr = agents[int(math.log2(agent))] tx = relayer.relay(agent, [(alice.address, b"")], sender=alice) - targets = [eth_abi.decode_single("address", f.stack[-2]) for f in tx.trace if f.op == "CALL"] - assert {agent_addr.lower(), alice.address.lower()} == set(targets) + targets = [f.contract_address for f in tx.trace if f.op == "CALL"] + assert {agent_addr, alice.address} == set(targets) def test_relay_invalid_caller(alice, relayer, mock_arbsys, ZERO_ADDRESS): diff --git a/tests/conftest.py b/tests/conftest.py index 42ec676..141df55 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -33,21 +33,4 @@ def ZERO_ADDRESS(): @pytest.fixture(scope="module") def agent_blueprint(alice, project): - initcode = bytes.fromhex(project.Agent.contract_type.deployment_bytecode.bytecode[2:]) - initcode = b"\xfe\x71\x00" + initcode # eip-5202 preamble version 0 - initcode = ( - b"\x61" + len(initcode).to_bytes(2, "big") + b"\x3d\x81\x60\x0a\x3d\x39\xf3" + initcode - ) - - tx = project.provider.network.ecosystem.create_transaction( - chain_id=project.provider.chain_id, - data=initcode, - maxFeePerGas=0, - maxPriorityFeePerGas=0, - nonce=alice.nonce, - ) - tx.gas_limit = project.provider.estimate_gas_cost(tx) - tx.signature = alice.sign_transaction(tx) - receipt = project.provider.send_transaction(tx) - - yield receipt.contract_address + yield project.Agent.declare(sender=alice).contract_address diff --git a/tests/optimism/test_broadcaster.py b/tests/optimism/test_broadcaster.py index a5e213f..e51bca2 100644 --- a/tests/optimism/test_broadcaster.py +++ b/tests/optimism/test_broadcaster.py @@ -24,10 +24,8 @@ def test_broadcast_success( tx = broadcaster.broadcast([(alice.address, b"")], gas_limit, sender=msg_sender) tx_trace = list(tx.trace) - staticcall_targets = { - eth_abi.decode_single("address", f.stack[-2]) for f in tx_trace if f.op == "STATICCALL" - } - decoded = eth_abi.decode_single("(uint256,(address,bytes)[])", mock_messenger.data()[4:]) + staticcall_targets = {f.contract_address for f in tx_trace if f.op == "STATICCALL"} + decoded = eth_abi.decode(["uint256", "(address,bytes)[]"], mock_messenger.data()[4:]) assert mock_messenger.count() == 1 assert len(mock_messenger.data()) < 500 @@ -36,9 +34,9 @@ def test_broadcast_success( assert decoded[1] == ((alice.address.lower(), b""),) if gas_limit == 0: - assert mock_chain.address.lower() in staticcall_targets + assert mock_chain.address in staticcall_targets else: - assert mock_chain.address.lower() not in staticcall_targets + assert mock_chain.address not in staticcall_targets def test_broadcast_reverts(dave, broadcaster): diff --git a/tests/optimism/test_relayer.py b/tests/optimism/test_relayer.py index 4e5ee05..6e7932f 100644 --- a/tests/optimism/test_relayer.py +++ b/tests/optimism/test_relayer.py @@ -21,8 +21,8 @@ def test_relay_success(alice, relayer, mock_messenger, agent, agents): agent_addr = agents[int(math.log2(agent))] tx = relayer.relay(agent, [(alice.address, b"")], sender=mock_messenger) - targets = [eth_abi.decode_single("address", f.stack[-2]) for f in tx.trace if f.op == "CALL"] - assert {agent_addr.lower(), alice.address.lower()} == set(targets) + targets = [f.contract_address for f in tx.trace if f.op == "CALL"] + assert {agent_addr, alice.address} == set(targets) def test_relay_invalid_caller(alice, relayer): diff --git a/tests/polygon_zkevm/test_broadcaster.py b/tests/polygon_zkevm/test_broadcaster.py index d4a8641..93f2791 100644 --- a/tests/polygon_zkevm/test_broadcaster.py +++ b/tests/polygon_zkevm/test_broadcaster.py @@ -20,7 +20,7 @@ def test_broadcast_success( tx = broadcaster.broadcast([(alice.address, b"")], force_update, sender=msg_sender) - decoded = eth_abi.decode_single("(uint256,(address,bytes)[])", mock_bridge.metadata()[4:]) + decoded = eth_abi.decode(["uint256", "(address,bytes)[]"], mock_bridge.metadata()[4:]) assert mock_bridge.count() == 1 assert len(mock_bridge.metadata()) < 500 diff --git a/tests/polygon_zkevm/test_relayer.py b/tests/polygon_zkevm/test_relayer.py index 704e5ce..2511234 100644 --- a/tests/polygon_zkevm/test_relayer.py +++ b/tests/polygon_zkevm/test_relayer.py @@ -27,8 +27,8 @@ def test_relay_success(alice, bob, relayer, mock_bridge, agent, agents, broadcas mock_bridge._set_origin_address(relayer, sender=alice) tx = mock_bridge.claimMessage(sender=alice) - targets = [eth_abi.decode_single("address", f.stack[-2]) for f in tx.trace if f.op == "CALL"] - assert {relayer.address.lower(), agent_addr.lower(), alice.address.lower()} == set(targets) + targets = [f.contract_address for f in tx.trace if f.op == "CALL"] + assert {relayer.address, agent_addr, alice.address} == set(targets) # invalid caller with ape.reverts(): From d95ced05c810ed8c186e339de40fc35125a23416 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Fri, 3 May 2024 00:51:01 +0300 Subject: [PATCH 06/13] chore: bump npm version --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index cf334a2..bc34d56 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -14,7 +14,7 @@ jobs: - run: pip install -r requirements.txt - uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 - run: npm ci - run: npm install --save-dev hardhat - run: ape test From dd6cc4bd11874530a94200fc202592c620f303fa Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Fri, 3 May 2024 19:55:40 +0300 Subject: [PATCH 07/13] chore: update scripts --- README.md | 20 ++++++++++---------- scripts/arbitrum.py | 4 ++-- scripts/deploy_agent.py | 14 ++++++++++++++ scripts/deploy_blueprint.py | 35 ----------------------------------- scripts/optimism.py | 4 ++-- scripts/polygon_zkevm.py | 4 ++-- 6 files changed, 30 insertions(+), 51 deletions(-) create mode 100644 scripts/deploy_agent.py delete mode 100644 scripts/deploy_blueprint.py diff --git a/README.md b/README.md index 66765a9..8994938 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,14 @@ Extends the capabilities of the Curve DAO allowing it to interact with contracts | [L2 Parameter Agent](contracts/Agent.vy) | [0x5ccbB27FB594c5cF6aC0670bbcb360c0072F6839](https://arbiscan.io/address/0x5ccbB27FB594c5cF6aC0670bbcb360c0072F6839) | | [L2 Emergency Agent](contracts/Agent.vy) | [0x2CB6E1Adf22Af1A38d7C3370441743a123991EC3](https://arbiscan.io/address/0x2CB6E1Adf22Af1A38d7C3370441743a123991EC3) | | [L2 Vault](contracts/Vault.vy) | [0x25877b9413Cc7832A6d142891b50bd53935feF82](https://arbiscan.io/address/0x25877b9413Cc7832A6d142891b50bd53935feF82) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0x187FE3505e56f4dA67b06564F03575cC15bE2B4d](https://arbiscan.io/address/0x187FE3505e56f4dA67b06564F03575cC15bE2B4d) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x187FE3505e56f4dA67b06564F03575cC15bE2B4d](https://arbiscan.io/address/0x187FE3505e56f4dA67b06564F03575cC15bE2B4d) | ### Testnet Deployment Steps 1. Deploy `Agent` blueprint to Arbitrum ```bash - $ ape run deploy_blueprint Agent --network https://goerli-rollup.arbitrum.io/rpc + $ ape run deploy_agent --network https://goerli-rollup.arbitrum.io/rpc ``` 2. Deploy `ArbitrumRelayer` and `Vault` to Arbitrum @@ -51,7 +51,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [L2 Parameter Agent](contracts/Agent.vy) | [0xE7F2B72E94d1c2497150c24EA8D65aFFf1027b9b](https://optimistic.etherscan.io/address/0xE7F2B72E94d1c2497150c24EA8D65aFFf1027b9b) | | [L2 Emergency Agent](contracts/Agent.vy) | [0x9fF1ddE4BE9BbD891836863d227248047B3D881b](https://optimistic.etherscan.io/address/0x9fF1ddE4BE9BbD891836863d227248047B3D881b) | | [L2 Vault](contracts/Vault.vy) | [0xD166EEdf272B860E991d331B71041799379185D5](https://optimistic.etherscan.io/address/0xD166EEdf272B860E991d331B71041799379185D5) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0xC5fd5D3b06a8ef50b911972CA313E4d327F7c0aC](https://optimistic.etherscan.io/address/0xc5fd5d3b06a8ef50b911972ca313e4d327f7c0ac) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0xC5fd5D3b06a8ef50b911972CA313E4d327F7c0aC](https://optimistic.etherscan.io/address/0xc5fd5d3b06a8ef50b911972ca313e4d327f7c0ac) | ### Testnet Deployment Steps @@ -88,7 +88,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [L2 Parameter Agent](contracts/Agent.vy) | [0x7Ea4B72f04D8B02994F4EdB171Ce5F56eEdF457F](https://basescan.org/address/0x7Ea4B72f04D8B02994F4EdB171Ce5F56eEdF457F) | | [L2 Emergency Agent](contracts/Agent.vy) | [0x95F0f720CAdDED982E6998b3390E6D3788c2CE5C](https://basescan.org/address/0x95F0f720CAdDED982E6998b3390E6D3788c2CE5C) | | [L2 Vault](contracts/Vault.vy) | [0xA4c0eA0fb8eb652e11C8123E589197E18Ca78AA8](https://basescan.org/address/0xA4c0eA0fb8eb652e11C8123E589197E18Ca78AA8) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0xF3BC9E5fA891977DCa765ff52E8f22A1F7d49c1f](https://basescan.org/address/0xF3BC9E5fA891977DCa765ff52E8f22A1F7d49c1f) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0xF3BC9E5fA891977DCa765ff52E8f22A1F7d49c1f](https://basescan.org/address/0xF3BC9E5fA891977DCa765ff52E8f22A1F7d49c1f) | ## Mantle @@ -102,7 +102,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [L2 Parameter Agent](contracts/Agent.vy) | [0x024d362f7aa162d8591304016fd60a209efc527e](https://explorer.mantle.xyz/address/0x024d362f7aa162d8591304016fd60a209efc527e) | | [L2 Emergency Agent](contracts/Agent.vy) | [0x4339b53cf7f6eec1a997ceea81165e45c1244429](https://explorer.mantle.xyz/address/0x4339b53cf7f6eec1a997ceea81165e45c1244429) | | [L2 Vault](contracts/Vault.vy) | [0x77A214bd4ee3650e5608339BBbE04b09f5546ECF](https://explorer.mantle.xyz/address/0x77A214bd4ee3650e5608339BBbE04b09f5546ECF) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd](https://explorer.mantle.xyz/address/0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd](https://explorer.mantle.xyz/address/0x5EF72230578b3e399E6C6F4F6360edF95e83BBfd) | ## Avalanche @@ -116,7 +116,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [Parameter Agent](contracts/Agent.vy) | [0x33F9A2F3B85e7D4Ff4f9286a9a8525060100D855](https://snowtrace.io/address/0x33F9A2F3B85e7D4Ff4f9286a9a8525060100D855) | | [Emergency Agent](contracts/Agent.vy) | [0x1309DB123020F0533aFAfaF11D26286d5871bEB0](https://snowtrace.io/address/0x1309DB123020F0533aFAfaF11D26286d5871bEB0) | | [Vault](contracts/Vault.vy) | [0xad422855ac8010f82F08696CA7750EfE061aa6D6](https://snowtrace.io/address/0xad422855ac8010f82F08696CA7750EfE061aa6D6) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0x31d13B6e3e287F506D21bBED9eA4b169971DF3fe](https://snowtrace.io/address/0x31d13B6e3e287F506D21bBED9eA4b169971DF3fe) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x31d13B6e3e287F506D21bBED9eA4b169971DF3fe](https://snowtrace.io/address/0x31d13B6e3e287F506D21bBED9eA4b169971DF3fe) | ## Fantom @@ -130,7 +130,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [Parameter Agent](contracts/Agent.vy) | [0x837814ba42c6f3B39f0A5060168F7027695DDAb1](https://ftmscan.com/address/0x837814ba42c6f3B39f0A5060168F7027695DDAb1) | | [Emergency Agent](contracts/Agent.vy) | [0x42113C6818ACb87ca3CaFDbBc6a6ae396f1548E6](https://ftmscan.com/address/0x42113C6818ACb87ca3CaFDbBc6a6ae396f1548E6) | | [Vault](contracts/Vault.vy) | [0x49C8De2D10C9A56DD9A59ab5Ca1216111276394C](https://ftmscan.com/address/0x49C8De2D10C9A56DD9A59ab5Ca1216111276394C) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0x0732539C8aD556594FDa6A50fA8E976cA6D514B9](https://ftmscan.com/address/0x0732539C8aD556594FDa6A50fA8E976cA6D514B9) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x0732539C8aD556594FDa6A50fA8E976cA6D514B9](https://ftmscan.com/address/0x0732539C8aD556594FDa6A50fA8E976cA6D514B9) | ## Binance Smart Chain @@ -144,7 +144,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [Parameter Agent](contracts/Agent.vy) | [0x618a38a556B66FdDdcB5495Be412Df911D18eA1d](https://bscscan.com/address/0x618a38a556B66FdDdcB5495Be412Df911D18eA1d) | | [Emergency Agent](contracts/Agent.vy) | [0xC940CE179f1F1bdC1EA1c02A2d0481bfD84C3280](https://bscscan.com/address/0xC940CE179f1F1bdC1EA1c02A2d0481bfD84C3280) | | [Vault](contracts/Vault.vy) | [0x44C927BacD65da570cB1F0A2F625367049525022](https://bscscan.com/address/0x44C927BacD65da570cB1F0A2F625367049525022) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0x3D09c5D6AE6e45d01C560342E11ef355C2763F01](https://bscscan.com/address/0x3D09c5D6AE6e45d01C560342E11ef355C2763F01) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x3D09c5D6AE6e45d01C560342E11ef355C2763F01](https://bscscan.com/address/0x3D09c5D6AE6e45d01C560342E11ef355C2763F01) | ## Kava @@ -157,7 +157,7 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [Ownership Agent](contracts/Agent.vy) | [0xeC6a886148B38C233B07cc6732142dccaBF1051D](https://kavascan.com/address/0xeC6a886148B38C233B07cc6732142dccaBF1051D) | | [Parameter Agent](contracts/Agent.vy) | [0x6e53131F68a034873b6bFA15502aF094Ef0c5854](https://kavascan.com/address/0x6e53131F68a034873b6bFA15502aF094Ef0c5854) | | [Emergency Agent](contracts/Agent.vy) | [0xA177D2bd2BD723878bD95982c0855291953f74C9](https://kavascan.com/address/0xA177D2bd2BD723878bD95982c0855291953f74C9) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0xC0AE3B85060530384647E9F3D63C9e1F53231f68](https://kavascan.com/address/0xC0AE3B85060530384647E9F3D63C9e1F53231f68) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0xC0AE3B85060530384647E9F3D63C9e1F53231f68](https://kavascan.com/address/0xC0AE3B85060530384647E9F3D63C9e1F53231f68) | ## Polygon @@ -170,4 +170,4 @@ preferable to generate a fresh account and use it for steps 2 and 3. | [Ownership Agent](contracts/Agent.vy) | [0x8cB05bFEd65b522a7cF98d590F1711A9Db43af71](https://polygonscan.com/address/0x8cB05bFEd65b522a7cF98d590F1711A9Db43af71) | | [Parameter Agent](contracts/Agent.vy) | [0x3CF7c393519ea55D1E1F2c55a6395be63b1A9F9C](https://polygonscan.com/address/0x3CF7c393519ea55D1E1F2c55a6395be63b1A9F9C) | | [Emergency Agent](contracts/Agent.vy) | [0x9FD6E204e08867170ddE54a8374083fF592eBD3E](https://polygonscan.com/address/0x9FD6E204e08867170ddE54a8374083fF592eBD3E) | -| [Agent Blueprint](scripts/deploy_blueprint.py) | [0x1fE46Da288A55aAf32facc6D182fB1933B22c2E9](https://polygonscan.com/address/0x1fE46Da288A55aAf32facc6D182fB1933B22c2E9) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x1fE46Da288A55aAf32facc6D182fB1933B22c2E9](https://polygonscan.com/address/0x1fE46Da288A55aAf32facc6D182fB1933B22c2E9) | diff --git a/scripts/arbitrum.py b/scripts/arbitrum.py index 644025e..b39219c 100644 --- a/scripts/arbitrum.py +++ b/scripts/arbitrum.py @@ -1,9 +1,9 @@ import click from ape import project -from ape.cli import NetworkBoundCommand, account_option, network_option +from ape.cli import ConnectedProviderCommand, account_option, network_option -@click.command(cls=NetworkBoundCommand) +@click.command(cls=ConnectedProviderCommand) @account_option() @network_option() @click.option("--blueprint") diff --git a/scripts/deploy_agent.py b/scripts/deploy_agent.py new file mode 100644 index 0000000..fead744 --- /dev/null +++ b/scripts/deploy_agent.py @@ -0,0 +1,14 @@ +import click +from ape import project +from ape.cli import ConnectedProviderCommand, account_option, network_option + + +@click.command(cls=ConnectedProviderCommand) +@account_option() +@network_option() +def cli(account, network): + receipt = project.Agent.declare( + sender=account, + gas_price=project.provider.gas_price, + ) + click.echo(f"Agent blueprint deployed at: {receipt.contract_address}") diff --git a/scripts/deploy_blueprint.py b/scripts/deploy_blueprint.py deleted file mode 100644 index ae5331f..0000000 --- a/scripts/deploy_blueprint.py +++ /dev/null @@ -1,35 +0,0 @@ -from typing import Union - -import click -from ape import project -from ape.cli import NetworkBoundCommand, account_option, network_option - - -def get_blueprint_initcode(initcode: Union[str, bytes]): - if isinstance(initcode, str): - initcode = bytes.fromhex(initcode.removeprefix("0x")) - initcode = b"\xfe\x71\x00" + initcode # eip-5202 preamble version 0 - initcode = ( - b"\x61" + len(initcode).to_bytes(2, "big") + b"\x3d\x81\x60\x0a\x3d\x39\xf3" + initcode - ) - return initcode - - -@click.command(cls=NetworkBoundCommand) -@account_option() -@network_option() -@click.argument("name") -def cli(account, network, name): - contract = getattr(project, name) - initcode = get_blueprint_initcode(contract.contract_type.deployment_bytecode.bytecode) - tx = project.provider.network.ecosystem.create_transaction( - chain_id=project.provider.chain_id, - data=initcode, - gas_price=project.provider.gas_price, - nonce=account.nonce, - ) - tx.gas_limit = project.provider.estimate_gas_cost(tx) - tx.signature = account.sign_transaction(tx) - - receipt = project.provider.send_transaction(tx) - click.echo(f"{name.title()} blueprint deployed at: {receipt.contract_address}") diff --git a/scripts/optimism.py b/scripts/optimism.py index 2588d50..003fbf5 100644 --- a/scripts/optimism.py +++ b/scripts/optimism.py @@ -1,9 +1,9 @@ import click from ape import project -from ape.cli import NetworkBoundCommand, account_option, network_option +from ape.cli import ConnectedProviderCommand, account_option, network_option -@click.command(cls=NetworkBoundCommand) +@click.command(cls=ConnectedProviderCommand) @account_option() @network_option() @click.option("--blueprint") diff --git a/scripts/polygon_zkevm.py b/scripts/polygon_zkevm.py index b81a86e..34e46d6 100644 --- a/scripts/polygon_zkevm.py +++ b/scripts/polygon_zkevm.py @@ -1,12 +1,12 @@ import click from ape import project -from ape.cli import NetworkBoundCommand, account_option, network_option +from ape.cli import ConnectedProviderCommand, account_option, network_option POLYGON_ZKEVM_BRIDGE = "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe" -@click.command(cls=NetworkBoundCommand) +@click.command(cls=ConnectedProviderCommand) @account_option() @network_option() @click.option("--blueprint") From 0e4afebbaaf5c15bc0aa5c8ad4245e0c5e06f64c Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Fri, 3 May 2024 19:57:21 +0300 Subject: [PATCH 08/13] chore: remove unnecessary methods in broadcast --- .../polygon_zkevm/PolygonzkEVMBroadcaster.vy | 27 +++++-------------- tests/polygon_zkevm/test_broadcaster.py | 26 ++---------------- 2 files changed, 8 insertions(+), 45 deletions(-) diff --git a/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy b/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy index 62ce197..a3bc747 100644 --- a/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy +++ b/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy @@ -55,8 +55,8 @@ future_admins: public(AdminSet) agent: public(HashMap[address, Agent]) -polygon_zkevm_bridge: public(PolygonZkEVMBridge) -destination_network: public(uint32) +POLYGON_ZKEVM_BRIDGE: public(immutable(PolygonZkEVMBridge)) +DESTINATION_NETWORK: public(immutable(uint32)) @external @@ -71,8 +71,8 @@ def __init__(_admins: AdminSet, _polygon_zkevm_bridge: PolygonZkEVMBridge, _dest self.agent[_admins.parameter] = Agent.PARAMETER self.agent[_admins.emergency] = Agent.EMERGENCY - self.polygon_zkevm_bridge = _polygon_zkevm_bridge - self.destination_network = _destination_network + POLYGON_ZKEVM_BRIDGE = _polygon_zkevm_bridge + DESTINATION_NETWORK = _destination_network log ApplyAdmins(_admins) @@ -82,11 +82,12 @@ def broadcast(_messages: DynArray[Message, MAX_MESSAGES], _force_update: bool=Fa """ @notice Broadcast a sequence of messages. @param _messages The sequence of messages to broadcast. + @param _force_update Indicates if the new global exit root is updated or not (forceUpdateGlobalExitRoot) """ agent: Agent = self.agent[msg.sender] assert agent != empty(Agent) - self.polygon_zkevm_bridge.bridgeMessage(self.destination_network, self, _force_update, + POLYGON_ZKEVM_BRIDGE.bridgeMessage(DESTINATION_NETWORK, self, _force_update, _abi_encode( # relay(uint256,(address,bytes)[]) agent, _messages, @@ -97,22 +98,6 @@ def broadcast(_messages: DynArray[Message, MAX_MESSAGES], _force_update: bool=Fa log Broadcast(agent, _messages) -@external -def set_new_bridge(_new_bridge: PolygonZkEVMBridge): - assert msg.sender == self.admins.ownership - - self.polygon_zkevm_bridge = _new_bridge - log SetNewBridge(_new_bridge) - - -@external -def set_destination_network(_new_network: uint32): - assert msg.sender == self.admins.ownership - - self.destination_network = _new_network - log SetNewDestinationNetwork(_new_network) - - @external def commit_admins(_future_admins: AdminSet): """ diff --git a/tests/polygon_zkevm/test_broadcaster.py b/tests/polygon_zkevm/test_broadcaster.py index d4a8641..b9c1128 100644 --- a/tests/polygon_zkevm/test_broadcaster.py +++ b/tests/polygon_zkevm/test_broadcaster.py @@ -8,8 +8,8 @@ def test_constructor(alice, bob, charlie, broadcaster, mock_bridge): assert broadcaster.admins() == (alice, bob, charlie) - assert broadcaster.polygon_zkevm_bridge() == mock_bridge - assert broadcaster.destination_network() == 3 + assert broadcaster.POLYGON_ZKEVM_BRIDGE() == mock_bridge + assert broadcaster.DESTINATION_NETWORK() == 3 @pytest.mark.parametrize("idx,force_update", itertools.product(range(3), [False, True])) @@ -36,28 +36,6 @@ def test_broadcast_reverts(dave, broadcaster): broadcaster.broadcast([(dave.address, b"")], False, sender=dave) -def test_set_new_bridge(alice, bob, broadcaster, ZERO_ADDRESS): - tx = broadcaster.set_new_bridge(ZERO_ADDRESS, sender=alice) - - assert broadcaster.polygon_zkevm_bridge() == ZERO_ADDRESS - assert len(tx.logs) == 1 - assert tx.logs[0]["topics"][0] == keccak(text="SetNewBridge(address)") - - with ape.reverts(): - broadcaster.set_new_bridge(ZERO_ADDRESS, sender=bob) - - -def test_set_destination_network(alice, bob, broadcaster, ZERO_ADDRESS): - tx = broadcaster.set_destination_network(2, sender=alice) - - assert broadcaster.destination_network() == 2 - assert len(tx.logs) == 1 - assert tx.logs[0]["topics"][0] == keccak(text="SetNewDestinationNetwork(uint32)") - - with ape.reverts(): - broadcaster.set_destination_network(2, sender=bob) - - def test_commit_admins(alice, bob, charlie, broadcaster): tx = broadcaster.commit_admins((alice, bob, charlie), sender=alice) From d07f3c9d98b780d43d7ace67b0e672d57be63205 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Fri, 3 May 2024 19:57:37 +0300 Subject: [PATCH 09/13] fix: fix deploy script --- scripts/polygon_zkevm.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/polygon_zkevm.py b/scripts/polygon_zkevm.py index b81a86e..00973e5 100644 --- a/scripts/polygon_zkevm.py +++ b/scripts/polygon_zkevm.py @@ -35,6 +35,11 @@ def cli(account, network, blueprint, destination_chain_id): "0x467947EE34aF926cF1DCac093870f613C96B1E0c", ) - if destination_chain_id == 196: # xlayer + if int(destination_chain_id) == 196: # xlayer destination_network = 3 - return project.PolygonzkEVMBroadcaster.deploy(admins, POLYGON_ZKEVM_BRIDGE, destination_network, sender=account) + return project.PolygonzkEVMBroadcaster.deploy( + admins, POLYGON_ZKEVM_BRIDGE, destination_network, + sender=account, + max_priority_fee="1 gwei", + max_fee="20 gwei", + ) From ad662b03499b67dcda229335fb466f86e0952884 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Mon, 6 May 2024 20:01:42 +0300 Subject: [PATCH 10/13] chore: update broadcaster --- contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy b/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy index a3bc747..d7ce2e4 100644 --- a/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy +++ b/contracts/polygon_zkevm/PolygonzkEVMBroadcaster.vy @@ -78,9 +78,10 @@ def __init__(_admins: AdminSet, _polygon_zkevm_bridge: PolygonZkEVMBridge, _dest @external -def broadcast(_messages: DynArray[Message, MAX_MESSAGES], _force_update: bool=False): +def broadcast(_messages: DynArray[Message, MAX_MESSAGES], _force_update: bool=True): """ @notice Broadcast a sequence of messages. + @dev Save `depositCount` from POLYGON_ZKEVM_BRIDGE.BridgeEvent to claim message on destination chain @param _messages The sequence of messages to broadcast. @param _force_update Indicates if the new global exit root is updated or not (forceUpdateGlobalExitRoot) """ From d792e27754b9860447cc119dcc05707e301c8d2d Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Mon, 6 May 2024 20:24:05 +0300 Subject: [PATCH 11/13] chore: update scripts --- scripts/polygon_zkevm/README.md | 29 ++++++++++++ scripts/polygon_zkevm/__init__.py | 31 ++++++++++++ scripts/polygon_zkevm/claim_message.py | 47 +++++++++++++++++++ .../deploy.py} | 11 ++--- 4 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 scripts/polygon_zkevm/README.md create mode 100644 scripts/polygon_zkevm/__init__.py create mode 100644 scripts/polygon_zkevm/claim_message.py rename scripts/{polygon_zkevm.py => polygon_zkevm/deploy.py} (76%) diff --git a/scripts/polygon_zkevm/README.md b/scripts/polygon_zkevm/README.md new file mode 100644 index 0000000..434c3a8 --- /dev/null +++ b/scripts/polygon_zkevm/README.md @@ -0,0 +1,29 @@ +## Deploy +1. Deploy `Agent` blueprint + + ```bash + ape run deploy_agent --network + ``` + +2. Deploy `Relayer` and `Vault` + + ```bash + ape run polygon_zkevm deploy --blueprint --network + ``` + +3. Deploy `Broadcaster` + + ```bash + ape run polygon_zkevm deploy --network --destination_chain_id + ``` + +## Claim message on destination chain +Save `depositCount` from PolygonZkEVMBridge.BridgeEvent to claim message on destination chain: +```bash +ape run polygon_zkevm claim_message --deposit_cnt --network +``` + +Example: +```bash +ape run polygon_zkevm claim_message --deposit_cnt 189238 --network https://rpc.xlayer.tech +``` diff --git a/scripts/polygon_zkevm/__init__.py b/scripts/polygon_zkevm/__init__.py new file mode 100644 index 0000000..590f40d --- /dev/null +++ b/scripts/polygon_zkevm/__init__.py @@ -0,0 +1,31 @@ +from ape.api import ProviderAPI + +POLYGON_ZKEVM_BRIDGE = "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe" +BRIDGE_ABI = [ + {"constant": False, "inputs": [ + {"indexed": False, "internalType": "bytes32[32]", "name": "smtProofLocalExitRoot", "type": "bytes32[32]"}, + {"indexed": False, "internalType": "bytes32[32]", "name": "smtProofRollupExitRoot", "type": "bytes32[32]"}, + {"indexed": False, "internalType": "uint256", "name": "globalIndex", "type": "uint256"}, + {"indexed": False, "internalType": "bytes32", "name": "mainnetExitRoot", "type": "bytes32"}, + {"indexed": False, "internalType": "bytes32", "name": "rollupExitRoot", "type": "bytes32"}, + {"indexed": False, "internalType": "uint32", "name": "originNetwork", "type": "uint32"}, + {"indexed": False, "internalType": "address", "name": "originAddress", "type": "address"}, + {"indexed": False, "internalType": "uint32", "name": "destinationNetwork", "type": "uint32"}, + {"indexed": False, "internalType": "address", "name": "destinationAddress", "type": "address"}, + {"indexed": False, "internalType": "uint256", "name": "amount", "type": "uint256"}, + {"indexed": False, "internalType": "bytes", "name": "metadata", "type": "bytes"}], "name": "claimMessage", + "outputs": [], "payable": False, "stateMutability": "nonpayable", "type": "function"}, +] + + +def get_destination_network(destination_chain_id: int | str): + if int(destination_chain_id) == 196: # xlayer + return 3 + raise "Unknown destination chain id" + + +def get_bridge_url(provider: ProviderAPI): + rpc = provider.http_uri # try + if provider.chain_id == 196: # xlayer + rpc = "https://rpc.xlayer.tech" + return rpc + "/priapi/v1/ob/bridge" diff --git a/scripts/polygon_zkevm/claim_message.py b/scripts/polygon_zkevm/claim_message.py new file mode 100644 index 0000000..403852e --- /dev/null +++ b/scripts/polygon_zkevm/claim_message.py @@ -0,0 +1,47 @@ +import click +import requests + +from ape import project, Contract +from ape.cli import ConnectedProviderCommand, account_option, network_option + +from . import BRIDGE_ABI, POLYGON_ZKEVM_BRIDGE, get_bridge_url + + +@click.command(cls=ConnectedProviderCommand) +@account_option() +@network_option() +@click.option("--deposit_cnt") +def cli(account, network, deposit_cnt): + chain_id = project.provider.chain_id + + if chain_id not in (1,): + bridge = Contract(POLYGON_ZKEVM_BRIDGE, abi=BRIDGE_ABI) + url = get_bridge_url(project.provider) + + status = requests.get( + url=f"{url}/bridge", + params={"net_id": 0, "deposit_cnt": int(deposit_cnt)}, + ).json()["deposit"] + if not status["ready_for_claim"]: + raise "Not ready yet" + + proof = requests.get( + url=f"{url}/merkle-proof", + params={"net_id": 0, "deposit_cnt": int(deposit_cnt)}, + ).json() + + bridge.claimMessage( + proof["proof"]["merkle_proof"], + proof["proof"]["rollup_merkle_proof"], + status["global_index"], + proof["proof"]["main_exit_root"], + proof["proof"]["rollup_exit_root"], + status["orig_net"], + status["orig_addr"], + status["dest_net"], + status["dest_addr"], + status["amount"], + status["metadata"], + gas_price=project.provider.gas_price, + sender=account, + ) diff --git a/scripts/polygon_zkevm.py b/scripts/polygon_zkevm/deploy.py similarity index 76% rename from scripts/polygon_zkevm.py rename to scripts/polygon_zkevm/deploy.py index 00973e5..3359cc9 100644 --- a/scripts/polygon_zkevm.py +++ b/scripts/polygon_zkevm/deploy.py @@ -1,12 +1,11 @@ import click from ape import project -from ape.cli import NetworkBoundCommand, account_option, network_option +from ape.cli import ConnectedProviderCommand, account_option, network_option +from . import POLYGON_ZKEVM_BRIDGE, get_destination_network -POLYGON_ZKEVM_BRIDGE = "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe" - -@click.command(cls=NetworkBoundCommand) +@click.command(cls=ConnectedProviderCommand) @account_option() @network_option() @click.option("--blueprint") @@ -35,10 +34,8 @@ def cli(account, network, blueprint, destination_chain_id): "0x467947EE34aF926cF1DCac093870f613C96B1E0c", ) - if int(destination_chain_id) == 196: # xlayer - destination_network = 3 return project.PolygonzkEVMBroadcaster.deploy( - admins, POLYGON_ZKEVM_BRIDGE, destination_network, + admins, POLYGON_ZKEVM_BRIDGE, get_destination_network(destination_chain_id), sender=account, max_priority_fee="1 gwei", max_fee="20 gwei", From d53c84c7069ea465aeabc14d3dd4c2f01f8c3866 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Mon, 6 May 2024 22:53:25 +0300 Subject: [PATCH 12/13] chore: easy conflict resolve --- scripts/polygon_zkevm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/polygon_zkevm.py b/scripts/polygon_zkevm.py index 34e46d6..b81a86e 100644 --- a/scripts/polygon_zkevm.py +++ b/scripts/polygon_zkevm.py @@ -1,12 +1,12 @@ import click from ape import project -from ape.cli import ConnectedProviderCommand, account_option, network_option +from ape.cli import NetworkBoundCommand, account_option, network_option POLYGON_ZKEVM_BRIDGE = "0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe" -@click.command(cls=ConnectedProviderCommand) +@click.command(cls=NetworkBoundCommand) @account_option() @network_option() @click.option("--blueprint") From db3af56a729482dc7ae2400c364cf5dd83a5be43 Mon Sep 17 00:00:00 2001 From: Roman Agureev Date: Mon, 6 May 2024 22:59:50 +0300 Subject: [PATCH 13/13] chore: add deployment addresses --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 66765a9..9d932e4 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,21 @@ preferable to generate a fresh account and use it for steps 2 and 3. Note: The `OptimismRelayer` and the `OptimismBroadcaster` need to be deployed at the same address. To do so you need to use the same nonce. It's preferable to generate a fresh account and use it for steps 2 and 3. +## X layer + +### Mainnet Deployment Addresses + +| Name | Address | +|-----------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------| +| [L1 Broadcaster](contracts/optimism/PolygonzkEVMBroadcaster.vy) | [0x9D9e70CA10fE911Dee9869F21e5ebB24A9519Ade](https://etherscan.io/address/0x9D9e70CA10fE911Dee9869F21e5ebB24A9519Ade) | +| [L2 Relayer](contracts/optimism/PolygonzkEVMRelayer.vy) | [0x9D9e70CA10fE911Dee9869F21e5ebB24A9519Ade](https://www.okx.com/explorer/xlayer/address/0x9D9e70CA10fE911Dee9869F21e5ebB24A9519Ade) | +| [L2 Ownership Agent](contracts/Agent.vy) | [0x6628b9e7c0029cea234b382be17101648f32cd8f](https://www.okx.com/explorer/xlayer/address/0x6628b9e7c0029cea234b382be17101648f32cd8f) | +| [L2 Parameter Agent](contracts/Agent.vy) | [0xccc4864762412f3273bf7ca9264295909504ebb5](https://www.okx.com/explorer/xlayer/address/0xccc4864762412f3273bf7ca9264295909504ebb5) | +| [L2 Emergency Agent](contracts/Agent.vy) | [0x9ffc6f671d88593aae56d9d34f2b40d7a56d467f](https://www.okx.com/explorer/xlayer/address/0x9ffc6f671d88593aae56d9d34f2b40d7a56d467f) | +| [L2 Vault](contracts/Vault.vy) | [0x0848F3800F04b3ad4309A5f27814be7FC4740cB9](https://www.okx.com/explorer/xlayer/address/0x0848F3800F04b3ad4309A5f27814be7FC4740cB9) | +| [Agent Blueprint](scripts/deploy_agent.py) | [0x0199429171bce183048dccf1d5546ca519ea9717](https://www.okx.com/explorer/xlayer/address/0x0199429171bce183048dccf1d5546ca519ea9717) | + + ## Base ### Mainnet Deployment Addresses