From 5db832641027f3c153e63d314c57bafa5747b7e4 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Sat, 25 Nov 2023 21:33:54 +0800 Subject: [PATCH 01/17] feat(protocol): improve bridged token name and symbol override (#15242) Co-authored-by: ptchela <80599907+ptchela@users.noreply.github.com> Co-authored-by: Daniel Wang --- .../contracts/tokenvault/BridgedERC1155.sol | 19 ++++++++----- .../contracts/tokenvault/BridgedERC20.sol | 16 +++++++++-- .../contracts/tokenvault/BridgedERC721.sol | 13 ++++++--- .../contracts/tokenvault/LibBridgedToken.sol | 27 +++++++++++++++++++ .../protocol/test/tokenvault/ERC20Vault.t.sol | 3 ++- 5 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 packages/protocol/contracts/tokenvault/LibBridgedToken.sol diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol index 3de84eb5f57..c972c9fb175 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol @@ -12,6 +12,7 @@ import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/extensions/IERC1155MetadataURIUpgradeable.sol"; import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol"; import "../common/EssentialContract.sol"; +import "./LibBridgedToken.sol"; /// @title BridgedERC1155 /// @notice Contract for bridging ERC1155 tokens across different chains. @@ -23,7 +24,7 @@ contract BridgedERC1155 is { address public srcToken; // Address of the source token contract. uint256 public srcChainId; // Source chain ID where the token originates. - string public symbol; // Symbol of the bridged token. + string private symbol_; // Symbol of the bridged token. string private name_; // Name of the bridged token. uint256[46] private __gap; @@ -57,9 +58,7 @@ contract BridgedERC1155 is __ERC1155_init(""); srcToken = _srcToken; srcChainId = _srcChainId; - // Note: name and symbol can intentionally be empty ("") as it's not - // part of the ERC1155 standard. - symbol = _symbol; + symbol_ = _symbol; name_ = _name; } @@ -117,10 +116,16 @@ contract BridgedERC1155 is return ERC1155Upgradeable.safeTransferFrom(from, to, tokenId, amount, data); } - /// @notice Gets the concatenated name of the bridged token. - /// @return The concatenated name. + /// @notice Gets the name of the bridged token. + /// @return The name. function name() public view returns (string memory) { - return string.concat(name_, unicode" ⭀", Strings.toString(srcChainId)); + return LibBridgedToken.buildName(name_, srcChainId); + } + + /// @notice Gets the symbol of the bridged token. + /// @return The symbol. + function symbol() public view returns (string memory) { + return LibBridgedToken.buildSymbol(symbol_); } } diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20.sol b/packages/protocol/contracts/tokenvault/BridgedERC20.sol index 88aa50461b3..466e62ae082 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20.sol @@ -12,6 +12,7 @@ import import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; import "../common/EssentialContract.sol"; import "./IMintableERC20.sol"; +import "./LibBridgedToken.sol"; /// @title BridgedERC20 /// @notice An upgradeable ERC20 contract that represents tokens bridged from @@ -128,14 +129,25 @@ contract BridgedERC20 is } /// @notice Gets the name of the token. - /// @return The name of the token with the source chain ID appended. + /// @return The name. function name() public view override(ERC20Upgradeable, IERC20MetadataUpgradeable) returns (string memory) { - return string.concat(super.name(), unicode" ⭀", Strings.toString(srcChainId)); + return LibBridgedToken.buildName(super.name(), srcChainId); + } + + /// @notice Gets the symbol of the bridged token. + /// @return The symbol. + function symbol() + public + view + override(ERC20Upgradeable, IERC20MetadataUpgradeable) + returns (string memory) + { + return LibBridgedToken.buildSymbol(super.symbol()); } /// @notice Gets the number of decimal places of the token. diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/tokenvault/BridgedERC721.sol index 82ad8670987..3cdf5f3ba31 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC721.sol @@ -9,6 +9,7 @@ pragma solidity ^0.8.20; import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/ERC721Upgradeable.sol"; import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; import "../common/EssentialContract.sol"; +import "./LibBridgedToken.sol"; /// @title BridgedERC721 /// @notice Contract for bridging ERC721 tokens across different chains. @@ -89,10 +90,16 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { return ERC721Upgradeable.transferFrom(from, to, tokenId); } - /// @notice Gets the concatenated name of the bridged token. - /// @return The concatenated name. + /// @notice Gets the name of the token. + /// @return The name. function name() public view override(ERC721Upgradeable) returns (string memory) { - return string.concat(super.name(), unicode" ⭀", Strings.toString(srcChainId)); + return LibBridgedToken.buildName(super.name(), srcChainId); + } + + /// @notice Gets the symbol of the bridged token. + /// @return The symbol. + function symbol() public view override(ERC721Upgradeable) returns (string memory) { + return LibBridgedToken.buildSymbol(super.symbol()); } /// @notice Gets the source token and source chain ID being bridged. diff --git a/packages/protocol/contracts/tokenvault/LibBridgedToken.sol b/packages/protocol/contracts/tokenvault/LibBridgedToken.sol new file mode 100644 index 00000000000..3ca96871ae3 --- /dev/null +++ b/packages/protocol/contracts/tokenvault/LibBridgedToken.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; + +/// @title LibBridgedToken +library LibBridgedToken { + function buildName( + string memory name, + uint256 srcChainId + ) + internal + pure + returns (string memory) + { + return string.concat("Bridged ", name, unicode" (⭀", Strings.toString(srcChainId), ")"); + } + + function buildSymbol(string memory symbol) internal pure returns (string memory) { + return string.concat(symbol, ".t"); + } +} diff --git a/packages/protocol/test/tokenvault/ERC20Vault.t.sol b/packages/protocol/test/tokenvault/ERC20Vault.t.sol index 04b6a138aaa..b798ca09893 100644 --- a/packages/protocol/test/tokenvault/ERC20Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC20Vault.t.sol @@ -348,7 +348,8 @@ contract TestERC20Vault is Test { assertEq(bridgedAddressAfter != address(0), true); BridgedERC20 bridgedERC20 = BridgedERC20(bridgedAddressAfter); - assertEq(bridgedERC20.name(), unicode"ERC20 ⭀31337"); + assertEq(bridgedERC20.name(), unicode"Bridged ERC20 (⭀31337)"); + assertEq(bridgedERC20.symbol(), unicode"ERC20.t"); assertEq(bridgedERC20.balanceOf(Bob), amount); } From d21518b765b6812ac2e22fbd2154fc7e784de9fa Mon Sep 17 00:00:00 2001 From: jeff <113397187+cyberhorsey@users.noreply.github.com> Date: Sat, 25 Nov 2023 18:33:17 -0800 Subject: [PATCH 02/17] feat(eventindexer): Update eventindexer post hooks, add AssigmentHook to deploy script, update chart apis (#15235) --- packages/eventindexer/.gitignore | 3 +- packages/eventindexer/TaikoL1.json | 155 +- packages/eventindexer/abigen.sh | 4 +- packages/eventindexer/chart.go | 1 + packages/eventindexer/cmd/flags/indexer.go | 8 + .../assignmenthook/AssignmentHook.go | 1479 +++++++++++++++++ .../eventindexer/contracts/taikol1/TaikoL1.go | 425 +---- packages/eventindexer/event.go | 3 + packages/eventindexer/generator/generator.go | 212 ++- .../eventindexer/http/get_chart_by_task.go | 5 +- packages/eventindexer/http/get_stats.go | 40 +- packages/eventindexer/http/get_stats_test.go | 20 +- packages/eventindexer/indexer/config.go | 2 + packages/eventindexer/indexer/config_test.go | 3 + packages/eventindexer/indexer/filter.go | 16 + packages/eventindexer/indexer/indexer.go | 21 +- .../indexer/save_block_assigned_event.go | 147 ++ .../indexer/save_block_proposed_event.go | 48 - .../indexer/save_transition_proved_event.go | 3 +- packages/eventindexer/indexer/subscribe.go | 223 ++- .../1666650599_create_events_table.sql | 1 + .../1666650701_create_stats_table.sql | 13 +- ...06203931_create_time_series_data_table.sql | 1 + packages/eventindexer/mock/stat_repository.go | 38 +- packages/eventindexer/prometheus.go | 8 + packages/eventindexer/repo/chart.go | 2 + packages/eventindexer/repo/chart_test.go | 1 + packages/eventindexer/repo/event.go | 4 + packages/eventindexer/repo/stat.go | 77 +- packages/eventindexer/repo/stat_test.go | 64 +- packages/eventindexer/stat.go | 29 +- .../healthchecker/healthchecker.go | 11 - packages/protocol/script/DeployOnL1.s.sol | 12 +- packages/relayer/ICrossChainSync.json | 6 +- packages/relayer/TaikoL1.json | 155 +- .../icrosschainsync/ICrossChainSync.go | 38 +- packages/relayer/bindings/taikol1/TaikoL1.go | 425 +---- packages/relayer/bindings/taikol2/TaikoL2.go | 472 +++++- 38 files changed, 2843 insertions(+), 1332 deletions(-) create mode 100644 packages/eventindexer/contracts/assignmenthook/AssignmentHook.go create mode 100644 packages/eventindexer/indexer/save_block_assigned_event.go diff --git a/packages/eventindexer/.gitignore b/packages/eventindexer/.gitignore index eeedab188e5..9dbce223f63 100644 --- a/packages/eventindexer/.gitignore +++ b/packages/eventindexer/.gitignore @@ -43,4 +43,5 @@ terraform.rc Bridge.json TaikoL2.json -IHeaderSync.json \ No newline at end of file +IHeaderSync.json +AssignmentHook.json \ No newline at end of file diff --git a/packages/eventindexer/TaikoL1.json b/packages/eventindexer/TaikoL1.json index fea82990c0a..643312b5522 100644 --- a/packages/eventindexer/TaikoL1.json +++ b/packages/eventindexer/TaikoL1.json @@ -39,46 +39,6 @@ "name": "L1_ASSIGNED_PROVER_NOT_ALLOWED", "type": "error" }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_EXPIRED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_EXPIRED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INSUFFICIENT_FEE", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INSUFFICIENT_FEE", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_PARAMS", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_PARAMS", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_SIG", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_SIG", - "type": "error" - }, { "inputs": [], "name": "L1_BLOB_FOR_DA_DISABLED", @@ -194,6 +154,16 @@ "name": "L1_INVALID_PROOF", "type": "error" }, + { + "inputs": [], + "name": "L1_INVALID_PROVER", + "type": "error" + }, + { + "inputs": [], + "name": "L1_INVALID_PROVER", + "type": "error" + }, { "inputs": [], "name": "L1_INVALID_TIER", @@ -216,7 +186,12 @@ }, { "inputs": [], - "name": "L1_NOT_ASSIGNED_PROVER", + "name": "L1_LIVENESS_BOND_NOT_RECEIVED", + "type": "error" + }, + { + "inputs": [], + "name": "L1_LIVENESS_BOND_NOT_RECEIVED", "type": "error" }, { @@ -226,7 +201,7 @@ }, { "inputs": [], - "name": "L1_PROPOSER_NOT_EOA", + "name": "L1_NOT_ASSIGNED_PROVER", "type": "error" }, { @@ -236,17 +211,17 @@ }, { "inputs": [], - "name": "L1_PROVING_PAUSED", + "name": "L1_PROPOSER_NOT_EOA", "type": "error" }, { "inputs": [], - "name": "L1_TIER_NOT_FOUND", + "name": "L1_PROVING_PAUSED", "type": "error" }, { "inputs": [], - "name": "L1_TIER_NOT_FOUND", + "name": "L1_RECEIVE_DISABLED", "type": "error" }, { @@ -422,12 +397,6 @@ "name": "livenessBond", "type": "uint96" }, - { - "indexed": false, - "internalType": "uint256", - "name": "proverFee", - "type": "uint256" - }, { "components": [ { @@ -559,12 +528,6 @@ "name": "livenessBond", "type": "uint96" }, - { - "indexed": false, - "internalType": "uint256", - "name": "proverFee", - "type": "uint256" - }, { "components": [ { @@ -779,7 +742,13 @@ { "indexed": true, "internalType": "uint64", - "name": "srcHeight", + "name": "syncedInBlock", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "blockId", "type": "uint64" }, { @@ -804,13 +773,13 @@ { "indexed": true, "internalType": "uint64", - "name": "remoteBlockId", + "name": "syncedInBlock", "type": "uint64" }, { - "indexed": false, + "indexed": true, "internalType": "uint64", - "name": "syncedInBlock", + "name": "blockId", "type": "uint64" }, { @@ -968,44 +937,6 @@ "name": "TokenCredited", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenCredited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenDebited", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1352,19 +1283,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "depositTaikoToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2207,19 +2125,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawTaikoToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "stateMutability": "payable", "type": "receive" diff --git a/packages/eventindexer/abigen.sh b/packages/eventindexer/abigen.sh index 57f5ec9205e..e61ebde29fe 100755 --- a/packages/eventindexer/abigen.sh +++ b/packages/eventindexer/abigen.sh @@ -5,9 +5,9 @@ if [ ! -d "../protocol/out" ]; then exit 1 fi -paths=("TaikoL1.sol" "Bridge.sol") +paths=("TaikoL1.sol" "Bridge.sol" "AssignmentHook.sol") -names=("TaikoL1" "Bridge") +names=("TaikoL1" "Bridge" "AssignmentHook") for (( i = 0; i < ${#paths[@]}; ++i )); diff --git a/packages/eventindexer/chart.go b/packages/eventindexer/chart.go index 088ecfdf203..a3ddc541026 100644 --- a/packages/eventindexer/chart.go +++ b/packages/eventindexer/chart.go @@ -17,5 +17,6 @@ type ChartRepository interface { task string, start string, end string, + feeTokenAddress string, ) (*ChartResponse, error) } diff --git a/packages/eventindexer/cmd/flags/indexer.go b/packages/eventindexer/cmd/flags/indexer.go index 7e4b859d28c..37f16b529d6 100644 --- a/packages/eventindexer/cmd/flags/indexer.go +++ b/packages/eventindexer/cmd/flags/indexer.go @@ -60,6 +60,13 @@ var ( Category: indexerCategory, EnvVars: []string{"SWAP_ADDRESSES"}, } + AssignmentHookAddress = &cli.StringFlag{ + Name: "assignmentHookAddress", + Usage: "Address of the AssignmentHook contract", + Required: false, + Category: indexerCategory, + EnvVars: []string{"ASSIGNMENT_HOOK_ADDRESS"}, + } CORSOrigins = &cli.StringFlag{ Name: "http.corsOrigins", Usage: "Comma-delinated list of cors origins", @@ -127,6 +134,7 @@ var IndexerFlags = MergeFlags(CommonFlags, []cli.Flag{ MetricsHTTPPort, BridgeAddress, SwapAddresses, + AssignmentHookAddress, CORSOrigins, BlockBatchSize, SubscriptionBackoff, diff --git a/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go b/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go new file mode 100644 index 00000000000..366bfd3d6d9 --- /dev/null +++ b/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go @@ -0,0 +1,1479 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package assignmenthook + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// AssignmentHookProverAssignment is an auto generated low-level Go binding around an user-defined struct. +type AssignmentHookProverAssignment struct { + FeeToken common.Address + Expiry uint64 + MaxBlockId uint64 + MaxProposedIn uint64 + MetaHash [32]byte + TierFees []TaikoDataTierFee + Signature []byte +} + +// TaikoDataBlock is an auto generated low-level Go binding around an user-defined struct. +type TaikoDataBlock struct { + MetaHash [32]byte + AssignedProver common.Address + LivenessBond *big.Int + BlockId uint64 + ProposedAt uint64 + ProposedIn uint64 + NextTransitionId uint32 + VerifiedTransitionId uint32 + Reserved [7][32]byte +} + +// TaikoDataBlockMetadata is an auto generated low-level Go binding around an user-defined struct. +type TaikoDataBlockMetadata struct { + L1Hash [32]byte + Difficulty [32]byte + BlobHash [32]byte + ExtraData [32]byte + DepositsHash [32]byte + Coinbase common.Address + Id uint64 + GasLimit uint32 + Timestamp uint64 + L1Height uint64 + TxListByteOffset *big.Int + TxListByteSize *big.Int + MinTier uint16 + BlobUsed bool + ParentMetaHash [32]byte +} + +// TaikoDataTierFee is an auto generated low-level Go binding around an user-defined struct. +type TaikoDataTierFee struct { + Tier uint16 + Fee *big.Int +} + +// AssignmentHookMetaData contains all meta data concerning the AssignmentHook contract. +var AssignmentHookMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxProposedIn\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"}],\"internalType\":\"structTaikoData.TierFee[]\",\"name\":\"tierFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structAssignmentHook.ProverAssignment\",\"name\":\"assignment\",\"type\":\"tuple\"}],\"name\":\"BlockAssigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_GAS_PAYING_PROVER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxProposedIn\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"}],\"internalType\":\"structTaikoData.TierFee[]\",\"name\":\"tierFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structAssignmentHook.ProverAssignment\",\"name\":\"assignment\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taikoAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"hashAssignment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onBlockProposed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// AssignmentHookABI is the input ABI used to generate the binding from. +// Deprecated: Use AssignmentHookMetaData.ABI instead. +var AssignmentHookABI = AssignmentHookMetaData.ABI + +// AssignmentHook is an auto generated Go binding around an Ethereum contract. +type AssignmentHook struct { + AssignmentHookCaller // Read-only binding to the contract + AssignmentHookTransactor // Write-only binding to the contract + AssignmentHookFilterer // Log filterer for contract events +} + +// AssignmentHookCaller is an auto generated read-only Go binding around an Ethereum contract. +type AssignmentHookCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssignmentHookTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AssignmentHookTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssignmentHookFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AssignmentHookFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssignmentHookSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AssignmentHookSession struct { + Contract *AssignmentHook // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssignmentHookCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AssignmentHookCallerSession struct { + Contract *AssignmentHookCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AssignmentHookTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AssignmentHookTransactorSession struct { + Contract *AssignmentHookTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssignmentHookRaw is an auto generated low-level Go binding around an Ethereum contract. +type AssignmentHookRaw struct { + Contract *AssignmentHook // Generic contract binding to access the raw methods on +} + +// AssignmentHookCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AssignmentHookCallerRaw struct { + Contract *AssignmentHookCaller // Generic read-only contract binding to access the raw methods on +} + +// AssignmentHookTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AssignmentHookTransactorRaw struct { + Contract *AssignmentHookTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAssignmentHook creates a new instance of AssignmentHook, bound to a specific deployed contract. +func NewAssignmentHook(address common.Address, backend bind.ContractBackend) (*AssignmentHook, error) { + contract, err := bindAssignmentHook(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AssignmentHook{AssignmentHookCaller: AssignmentHookCaller{contract: contract}, AssignmentHookTransactor: AssignmentHookTransactor{contract: contract}, AssignmentHookFilterer: AssignmentHookFilterer{contract: contract}}, nil +} + +// NewAssignmentHookCaller creates a new read-only instance of AssignmentHook, bound to a specific deployed contract. +func NewAssignmentHookCaller(address common.Address, caller bind.ContractCaller) (*AssignmentHookCaller, error) { + contract, err := bindAssignmentHook(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AssignmentHookCaller{contract: contract}, nil +} + +// NewAssignmentHookTransactor creates a new write-only instance of AssignmentHook, bound to a specific deployed contract. +func NewAssignmentHookTransactor(address common.Address, transactor bind.ContractTransactor) (*AssignmentHookTransactor, error) { + contract, err := bindAssignmentHook(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AssignmentHookTransactor{contract: contract}, nil +} + +// NewAssignmentHookFilterer creates a new log filterer instance of AssignmentHook, bound to a specific deployed contract. +func NewAssignmentHookFilterer(address common.Address, filterer bind.ContractFilterer) (*AssignmentHookFilterer, error) { + contract, err := bindAssignmentHook(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AssignmentHookFilterer{contract: contract}, nil +} + +// bindAssignmentHook binds a generic wrapper to an already deployed contract. +func bindAssignmentHook(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AssignmentHookMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssignmentHook *AssignmentHookRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssignmentHook.Contract.AssignmentHookCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssignmentHook *AssignmentHookRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssignmentHook.Contract.AssignmentHookTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssignmentHook *AssignmentHookRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssignmentHook.Contract.AssignmentHookTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssignmentHook *AssignmentHookCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssignmentHook.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssignmentHook *AssignmentHookTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssignmentHook.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssignmentHook *AssignmentHookTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssignmentHook.Contract.contract.Transact(opts, method, params...) +} + +// MAXGASPAYINGPROVER is a free data retrieval call binding the contract method 0x12925031. +// +// Solidity: function MAX_GAS_PAYING_PROVER() view returns(uint256) +func (_AssignmentHook *AssignmentHookCaller) MAXGASPAYINGPROVER(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "MAX_GAS_PAYING_PROVER") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXGASPAYINGPROVER is a free data retrieval call binding the contract method 0x12925031. +// +// Solidity: function MAX_GAS_PAYING_PROVER() view returns(uint256) +func (_AssignmentHook *AssignmentHookSession) MAXGASPAYINGPROVER() (*big.Int, error) { + return _AssignmentHook.Contract.MAXGASPAYINGPROVER(&_AssignmentHook.CallOpts) +} + +// MAXGASPAYINGPROVER is a free data retrieval call binding the contract method 0x12925031. +// +// Solidity: function MAX_GAS_PAYING_PROVER() view returns(uint256) +func (_AssignmentHook *AssignmentHookCallerSession) MAXGASPAYINGPROVER() (*big.Int, error) { + return _AssignmentHook.Contract.MAXGASPAYINGPROVER(&_AssignmentHook.CallOpts) +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_AssignmentHook *AssignmentHookCaller) AddressManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "addressManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_AssignmentHook *AssignmentHookSession) AddressManager() (common.Address, error) { + return _AssignmentHook.Contract.AddressManager(&_AssignmentHook.CallOpts) +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_AssignmentHook *AssignmentHookCallerSession) AddressManager() (common.Address, error) { + return _AssignmentHook.Contract.AddressManager(&_AssignmentHook.CallOpts) +} + +// HashAssignment is a free data retrieval call binding the contract method 0x9f64a349. +// +// Solidity: function hashAssignment((address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment, address taikoAddress, bytes32 blobHash) pure returns(bytes32) +func (_AssignmentHook *AssignmentHookCaller) HashAssignment(opts *bind.CallOpts, assignment AssignmentHookProverAssignment, taikoAddress common.Address, blobHash [32]byte) ([32]byte, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "hashAssignment", assignment, taikoAddress, blobHash) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// HashAssignment is a free data retrieval call binding the contract method 0x9f64a349. +// +// Solidity: function hashAssignment((address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment, address taikoAddress, bytes32 blobHash) pure returns(bytes32) +func (_AssignmentHook *AssignmentHookSession) HashAssignment(assignment AssignmentHookProverAssignment, taikoAddress common.Address, blobHash [32]byte) ([32]byte, error) { + return _AssignmentHook.Contract.HashAssignment(&_AssignmentHook.CallOpts, assignment, taikoAddress, blobHash) +} + +// HashAssignment is a free data retrieval call binding the contract method 0x9f64a349. +// +// Solidity: function hashAssignment((address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment, address taikoAddress, bytes32 blobHash) pure returns(bytes32) +func (_AssignmentHook *AssignmentHookCallerSession) HashAssignment(assignment AssignmentHookProverAssignment, taikoAddress common.Address, blobHash [32]byte) ([32]byte, error) { + return _AssignmentHook.Contract.HashAssignment(&_AssignmentHook.CallOpts, assignment, taikoAddress, blobHash) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AssignmentHook *AssignmentHookCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AssignmentHook *AssignmentHookSession) Owner() (common.Address, error) { + return _AssignmentHook.Contract.Owner(&_AssignmentHook.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AssignmentHook *AssignmentHookCallerSession) Owner() (common.Address, error) { + return _AssignmentHook.Contract.Owner(&_AssignmentHook.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_AssignmentHook *AssignmentHookCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_AssignmentHook *AssignmentHookSession) Paused() (bool, error) { + return _AssignmentHook.Contract.Paused(&_AssignmentHook.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_AssignmentHook *AssignmentHookCallerSession) Paused() (bool, error) { + return _AssignmentHook.Contract.Paused(&_AssignmentHook.CallOpts) +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_AssignmentHook *AssignmentHookCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "pendingOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_AssignmentHook *AssignmentHookSession) PendingOwner() (common.Address, error) { + return _AssignmentHook.Contract.PendingOwner(&_AssignmentHook.CallOpts) +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_AssignmentHook *AssignmentHookCallerSession) PendingOwner() (common.Address, error) { + return _AssignmentHook.Contract.PendingOwner(&_AssignmentHook.CallOpts) +} + +// Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. +// +// Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_AssignmentHook *AssignmentHookCaller) Resolve(opts *bind.CallOpts, chainId uint64, name [32]byte, allowZeroAddress bool) (common.Address, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "resolve", chainId, name, allowZeroAddress) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. +// +// Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_AssignmentHook *AssignmentHookSession) Resolve(chainId uint64, name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _AssignmentHook.Contract.Resolve(&_AssignmentHook.CallOpts, chainId, name, allowZeroAddress) +} + +// Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. +// +// Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_AssignmentHook *AssignmentHookCallerSession) Resolve(chainId uint64, name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _AssignmentHook.Contract.Resolve(&_AssignmentHook.CallOpts, chainId, name, allowZeroAddress) +} + +// Resolve0 is a free data retrieval call binding the contract method 0xa86f9d9e. +// +// Solidity: function resolve(bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_AssignmentHook *AssignmentHookCaller) Resolve0(opts *bind.CallOpts, name [32]byte, allowZeroAddress bool) (common.Address, error) { + var out []interface{} + err := _AssignmentHook.contract.Call(opts, &out, "resolve0", name, allowZeroAddress) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Resolve0 is a free data retrieval call binding the contract method 0xa86f9d9e. +// +// Solidity: function resolve(bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_AssignmentHook *AssignmentHookSession) Resolve0(name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _AssignmentHook.Contract.Resolve0(&_AssignmentHook.CallOpts, name, allowZeroAddress) +} + +// Resolve0 is a free data retrieval call binding the contract method 0xa86f9d9e. +// +// Solidity: function resolve(bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_AssignmentHook *AssignmentHookCallerSession) Resolve0(name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _AssignmentHook.Contract.Resolve0(&_AssignmentHook.CallOpts, name, allowZeroAddress) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_AssignmentHook *AssignmentHookTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "acceptOwnership") +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_AssignmentHook *AssignmentHookSession) AcceptOwnership() (*types.Transaction, error) { + return _AssignmentHook.Contract.AcceptOwnership(&_AssignmentHook.TransactOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_AssignmentHook *AssignmentHookTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _AssignmentHook.Contract.AcceptOwnership(&_AssignmentHook.TransactOpts) +} + +// Init is a paid mutator transaction binding the contract method 0x19ab453c. +// +// Solidity: function init(address _addressManager) returns() +func (_AssignmentHook *AssignmentHookTransactor) Init(opts *bind.TransactOpts, _addressManager common.Address) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "init", _addressManager) +} + +// Init is a paid mutator transaction binding the contract method 0x19ab453c. +// +// Solidity: function init(address _addressManager) returns() +func (_AssignmentHook *AssignmentHookSession) Init(_addressManager common.Address) (*types.Transaction, error) { + return _AssignmentHook.Contract.Init(&_AssignmentHook.TransactOpts, _addressManager) +} + +// Init is a paid mutator transaction binding the contract method 0x19ab453c. +// +// Solidity: function init(address _addressManager) returns() +func (_AssignmentHook *AssignmentHookTransactorSession) Init(_addressManager common.Address) (*types.Transaction, error) { + return _AssignmentHook.Contract.Init(&_AssignmentHook.TransactOpts, _addressManager) +} + +// OnBlockProposed is a paid mutator transaction binding the contract method 0x6bfd8a0f. +// +// Solidity: function onBlockProposed((bytes32,address,uint96,uint64,uint64,uint64,uint32,uint32,bytes32[7]) blk, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, bytes data) payable returns() +func (_AssignmentHook *AssignmentHookTransactor) OnBlockProposed(opts *bind.TransactOpts, blk TaikoDataBlock, meta TaikoDataBlockMetadata, data []byte) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "onBlockProposed", blk, meta, data) +} + +// OnBlockProposed is a paid mutator transaction binding the contract method 0x6bfd8a0f. +// +// Solidity: function onBlockProposed((bytes32,address,uint96,uint64,uint64,uint64,uint32,uint32,bytes32[7]) blk, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, bytes data) payable returns() +func (_AssignmentHook *AssignmentHookSession) OnBlockProposed(blk TaikoDataBlock, meta TaikoDataBlockMetadata, data []byte) (*types.Transaction, error) { + return _AssignmentHook.Contract.OnBlockProposed(&_AssignmentHook.TransactOpts, blk, meta, data) +} + +// OnBlockProposed is a paid mutator transaction binding the contract method 0x6bfd8a0f. +// +// Solidity: function onBlockProposed((bytes32,address,uint96,uint64,uint64,uint64,uint32,uint32,bytes32[7]) blk, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, bytes data) payable returns() +func (_AssignmentHook *AssignmentHookTransactorSession) OnBlockProposed(blk TaikoDataBlock, meta TaikoDataBlockMetadata, data []byte) (*types.Transaction, error) { + return _AssignmentHook.Contract.OnBlockProposed(&_AssignmentHook.TransactOpts, blk, meta, data) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_AssignmentHook *AssignmentHookTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_AssignmentHook *AssignmentHookSession) Pause() (*types.Transaction, error) { + return _AssignmentHook.Contract.Pause(&_AssignmentHook.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_AssignmentHook *AssignmentHookTransactorSession) Pause() (*types.Transaction, error) { + return _AssignmentHook.Contract.Pause(&_AssignmentHook.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AssignmentHook *AssignmentHookTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AssignmentHook *AssignmentHookSession) RenounceOwnership() (*types.Transaction, error) { + return _AssignmentHook.Contract.RenounceOwnership(&_AssignmentHook.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AssignmentHook *AssignmentHookTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _AssignmentHook.Contract.RenounceOwnership(&_AssignmentHook.TransactOpts) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AssignmentHook *AssignmentHookTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AssignmentHook *AssignmentHookSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _AssignmentHook.Contract.TransferOwnership(&_AssignmentHook.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AssignmentHook *AssignmentHookTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _AssignmentHook.Contract.TransferOwnership(&_AssignmentHook.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_AssignmentHook *AssignmentHookTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_AssignmentHook *AssignmentHookSession) Unpause() (*types.Transaction, error) { + return _AssignmentHook.Contract.Unpause(&_AssignmentHook.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_AssignmentHook *AssignmentHookTransactorSession) Unpause() (*types.Transaction, error) { + return _AssignmentHook.Contract.Unpause(&_AssignmentHook.TransactOpts) +} + +// AssignmentHookBlockAssignedIterator is returned from FilterBlockAssigned and is used to iterate over the raw logs and unpacked data for BlockAssigned events raised by the AssignmentHook contract. +type AssignmentHookBlockAssignedIterator struct { + Event *AssignmentHookBlockAssigned // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookBlockAssignedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookBlockAssigned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookBlockAssigned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookBlockAssignedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookBlockAssignedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookBlockAssigned represents a BlockAssigned event raised by the AssignmentHook contract. +type AssignmentHookBlockAssigned struct { + AssignedProver common.Address + Meta TaikoDataBlockMetadata + Assignment AssignmentHookProverAssignment + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBlockAssigned is a free log retrieval operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// +// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) +func (_AssignmentHook *AssignmentHookFilterer) FilterBlockAssigned(opts *bind.FilterOpts, assignedProver []common.Address) (*AssignmentHookBlockAssignedIterator, error) { + + var assignedProverRule []interface{} + for _, assignedProverItem := range assignedProver { + assignedProverRule = append(assignedProverRule, assignedProverItem) + } + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "BlockAssigned", assignedProverRule) + if err != nil { + return nil, err + } + return &AssignmentHookBlockAssignedIterator{contract: _AssignmentHook.contract, event: "BlockAssigned", logs: logs, sub: sub}, nil +} + +// WatchBlockAssigned is a free log subscription operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// +// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) +func (_AssignmentHook *AssignmentHookFilterer) WatchBlockAssigned(opts *bind.WatchOpts, sink chan<- *AssignmentHookBlockAssigned, assignedProver []common.Address) (event.Subscription, error) { + + var assignedProverRule []interface{} + for _, assignedProverItem := range assignedProver { + assignedProverRule = append(assignedProverRule, assignedProverItem) + } + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "BlockAssigned", assignedProverRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookBlockAssigned) + if err := _AssignmentHook.contract.UnpackLog(event, "BlockAssigned", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBlockAssigned is a log parse operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// +// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) +func (_AssignmentHook *AssignmentHookFilterer) ParseBlockAssigned(log types.Log) (*AssignmentHookBlockAssigned, error) { + event := new(AssignmentHookBlockAssigned) + if err := _AssignmentHook.contract.UnpackLog(event, "BlockAssigned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssignmentHookInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AssignmentHook contract. +type AssignmentHookInitializedIterator struct { + Event *AssignmentHookInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookInitialized represents a Initialized event raised by the AssignmentHook contract. +type AssignmentHookInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AssignmentHook *AssignmentHookFilterer) FilterInitialized(opts *bind.FilterOpts) (*AssignmentHookInitializedIterator, error) { + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &AssignmentHookInitializedIterator{contract: _AssignmentHook.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AssignmentHook *AssignmentHookFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AssignmentHookInitialized) (event.Subscription, error) { + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookInitialized) + if err := _AssignmentHook.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AssignmentHook *AssignmentHookFilterer) ParseInitialized(log types.Log) (*AssignmentHookInitialized, error) { + event := new(AssignmentHookInitialized) + if err := _AssignmentHook.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssignmentHookOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the AssignmentHook contract. +type AssignmentHookOwnershipTransferStartedIterator struct { + Event *AssignmentHookOwnershipTransferStarted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookOwnershipTransferStartedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookOwnershipTransferStarted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the AssignmentHook contract. +type AssignmentHookOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_AssignmentHook *AssignmentHookFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*AssignmentHookOwnershipTransferStartedIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &AssignmentHookOwnershipTransferStartedIterator{contract: _AssignmentHook.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_AssignmentHook *AssignmentHookFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *AssignmentHookOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookOwnershipTransferStarted) + if err := _AssignmentHook.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_AssignmentHook *AssignmentHookFilterer) ParseOwnershipTransferStarted(log types.Log) (*AssignmentHookOwnershipTransferStarted, error) { + event := new(AssignmentHookOwnershipTransferStarted) + if err := _AssignmentHook.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssignmentHookOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the AssignmentHook contract. +type AssignmentHookOwnershipTransferredIterator struct { + Event *AssignmentHookOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookOwnershipTransferred represents a OwnershipTransferred event raised by the AssignmentHook contract. +type AssignmentHookOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_AssignmentHook *AssignmentHookFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*AssignmentHookOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &AssignmentHookOwnershipTransferredIterator{contract: _AssignmentHook.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_AssignmentHook *AssignmentHookFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *AssignmentHookOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookOwnershipTransferred) + if err := _AssignmentHook.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_AssignmentHook *AssignmentHookFilterer) ParseOwnershipTransferred(log types.Log) (*AssignmentHookOwnershipTransferred, error) { + event := new(AssignmentHookOwnershipTransferred) + if err := _AssignmentHook.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssignmentHookPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the AssignmentHook contract. +type AssignmentHookPausedIterator struct { + Event *AssignmentHookPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookPaused represents a Paused event raised by the AssignmentHook contract. +type AssignmentHookPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_AssignmentHook *AssignmentHookFilterer) FilterPaused(opts *bind.FilterOpts) (*AssignmentHookPausedIterator, error) { + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &AssignmentHookPausedIterator{contract: _AssignmentHook.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_AssignmentHook *AssignmentHookFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *AssignmentHookPaused) (event.Subscription, error) { + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookPaused) + if err := _AssignmentHook.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_AssignmentHook *AssignmentHookFilterer) ParsePaused(log types.Log) (*AssignmentHookPaused, error) { + event := new(AssignmentHookPaused) + if err := _AssignmentHook.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssignmentHookUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the AssignmentHook contract. +type AssignmentHookUnpausedIterator struct { + Event *AssignmentHookUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookUnpaused represents a Unpaused event raised by the AssignmentHook contract. +type AssignmentHookUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_AssignmentHook *AssignmentHookFilterer) FilterUnpaused(opts *bind.FilterOpts) (*AssignmentHookUnpausedIterator, error) { + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &AssignmentHookUnpausedIterator{contract: _AssignmentHook.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_AssignmentHook *AssignmentHookFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *AssignmentHookUnpaused) (event.Subscription, error) { + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookUnpaused) + if err := _AssignmentHook.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_AssignmentHook *AssignmentHookFilterer) ParseUnpaused(log types.Log) (*AssignmentHookUnpaused, error) { + event := new(AssignmentHookUnpaused) + if err := _AssignmentHook.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/eventindexer/contracts/taikol1/TaikoL1.go b/packages/eventindexer/contracts/taikol1/TaikoL1.go index 491618fe57c..00a66871680 100644 --- a/packages/eventindexer/contracts/taikol1/TaikoL1.go +++ b/packages/eventindexer/contracts/taikol1/TaikoL1.go @@ -146,7 +146,7 @@ type TaikoDataTransitionState struct { // TaikoL1MetaData contains all meta data concerning the TaikoL1 contract. var TaikoL1MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proverFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proverFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"srcHeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositTaikoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getTaikoTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTaikoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_RECEIVE_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getTaikoTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // TaikoL1ABI is the input ABI used to generate the binding from. @@ -954,27 +954,6 @@ func (_TaikoL1 *TaikoL1TransactorSession) DepositEtherToL2(recipient common.Addr return _TaikoL1.Contract.DepositEtherToL2(&_TaikoL1.TransactOpts, recipient) } -// DepositTaikoToken is a paid mutator transaction binding the contract method 0x98f39aba. -// -// Solidity: function depositTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Transactor) DepositTaikoToken(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.contract.Transact(opts, "depositTaikoToken", amount) -} - -// DepositTaikoToken is a paid mutator transaction binding the contract method 0x98f39aba. -// -// Solidity: function depositTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Session) DepositTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.DepositTaikoToken(&_TaikoL1.TransactOpts, amount) -} - -// DepositTaikoToken is a paid mutator transaction binding the contract method 0x98f39aba. -// -// Solidity: function depositTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1TransactorSession) DepositTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.DepositTaikoToken(&_TaikoL1.TransactOpts, amount) -} - // Init is a paid mutator transaction binding the contract method 0x2cc0b254. // // Solidity: function init(address _addressManager, bytes32 _genesisBlockHash) returns() @@ -1164,27 +1143,6 @@ func (_TaikoL1 *TaikoL1TransactorSession) VerifyBlocks(maxBlocksToVerify uint64) return _TaikoL1.Contract.VerifyBlocks(&_TaikoL1.TransactOpts, maxBlocksToVerify) } -// WithdrawTaikoToken is a paid mutator transaction binding the contract method 0x5043f059. -// -// Solidity: function withdrawTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Transactor) WithdrawTaikoToken(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.contract.Transact(opts, "withdrawTaikoToken", amount) -} - -// WithdrawTaikoToken is a paid mutator transaction binding the contract method 0x5043f059. -// -// Solidity: function withdrawTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Session) WithdrawTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.WithdrawTaikoToken(&_TaikoL1.TransactOpts, amount) -} - -// WithdrawTaikoToken is a paid mutator transaction binding the contract method 0x5043f059. -// -// Solidity: function withdrawTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1TransactorSession) WithdrawTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.WithdrawTaikoToken(&_TaikoL1.TransactOpts, amount) -} - // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -1546,15 +1504,14 @@ type TaikoL1BlockProposed struct { BlockId *big.Int AssignedProver common.Address LivenessBond *big.Int - ProverFee *big.Int Meta TaikoDataBlockMetadata DepositsProcessed []TaikoDataEthDeposit Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed is a free log retrieval operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// FilterBlockProposed is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposedIterator, error) { var blockIdRule []interface{} @@ -1573,9 +1530,9 @@ func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, bloc return &TaikoL1BlockProposedIterator{contract: _TaikoL1.contract, event: "BlockProposed", logs: logs, sub: sub}, nil } -// WatchBlockProposed is a free log subscription operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// WatchBlockProposed is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { var blockIdRule []interface{} @@ -1619,9 +1576,9 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink c }), nil } -// ParseBlockProposed is a log parse operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// ParseBlockProposed is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed(log types.Log) (*TaikoL1BlockProposed, error) { event := new(TaikoL1BlockProposed) if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { @@ -1703,15 +1660,14 @@ type TaikoL1BlockProposed0 struct { BlockId *big.Int AssignedProver common.Address LivenessBond *big.Int - ProverFee *big.Int Meta TaikoDataBlockMetadata DepositsProcessed []TaikoDataEthDeposit Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed0 is a free log retrieval operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// FilterBlockProposed0 is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposed0Iterator, error) { var blockIdRule []interface{} @@ -1730,9 +1686,9 @@ func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blo return &TaikoL1BlockProposed0Iterator{contract: _TaikoL1.contract, event: "BlockProposed0", logs: logs, sub: sub}, nil } -// WatchBlockProposed0 is a free log subscription operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// WatchBlockProposed0 is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed0, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { var blockIdRule []interface{} @@ -1776,9 +1732,9 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink }), nil } -// ParseBlockProposed0 is a log parse operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// ParseBlockProposed0 is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed0(log types.Log) (*TaikoL1BlockProposed0, error) { event := new(TaikoL1BlockProposed0) if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed0", log); err != nil { @@ -2189,40 +2145,49 @@ func (it *TaikoL1CrossChainSyncedIterator) Close() error { // TaikoL1CrossChainSynced represents a CrossChainSynced event raised by the TaikoL1 contract. type TaikoL1CrossChainSynced struct { - SrcHeight uint64 - BlockHash [32]byte - SignalRoot [32]byte - Raw types.Log // Blockchain specific contextual infos + SyncedInBlock uint64 + BlockId uint64 + BlockHash [32]byte + SignalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterCrossChainSynced is a free log retrieval operation binding the contract event 0x004ce985b8852a486571d0545799251fd671adcf33b7854a5f0f6a6a2431a555. +// FilterCrossChainSynced is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed srcHeight, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, srcHeight []uint64) (*TaikoL1CrossChainSyncedIterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL1CrossChainSyncedIterator, error) { - var srcHeightRule []interface{} - for _, srcHeightItem := range srcHeight { - srcHeightRule = append(srcHeightRule, srcHeightItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced", srcHeightRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } return &TaikoL1CrossChainSyncedIterator{contract: _TaikoL1.contract, event: "CrossChainSynced", logs: logs, sub: sub}, nil } -// WatchCrossChainSynced is a free log subscription operation binding the contract event 0x004ce985b8852a486571d0545799251fd671adcf33b7854a5f0f6a6a2431a555. +// WatchCrossChainSynced is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed srcHeight, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced, srcHeight []uint64) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - var srcHeightRule []interface{} - for _, srcHeightItem := range srcHeight { - srcHeightRule = append(srcHeightRule, srcHeightItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced", srcHeightRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -2254,9 +2219,9 @@ func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sin }), nil } -// ParseCrossChainSynced is a log parse operation binding the contract event 0x004ce985b8852a486571d0545799251fd671adcf33b7854a5f0f6a6a2431a555. +// ParseCrossChainSynced is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed srcHeight, bytes32 blockHash, bytes32 signalRoot) +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) func (_TaikoL1 *TaikoL1Filterer) ParseCrossChainSynced(log types.Log) (*TaikoL1CrossChainSynced, error) { event := new(TaikoL1CrossChainSynced) if err := _TaikoL1.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { @@ -2335,8 +2300,8 @@ func (it *TaikoL1CrossChainSynced0Iterator) Close() error { // TaikoL1CrossChainSynced0 represents a CrossChainSynced0 event raised by the TaikoL1 contract. type TaikoL1CrossChainSynced0 struct { - RemoteBlockId uint64 SyncedInBlock uint64 + BlockId uint64 BlockHash [32]byte SignalRoot [32]byte Raw types.Log // Blockchain specific contextual infos @@ -2344,15 +2309,19 @@ type TaikoL1CrossChainSynced0 struct { // FilterCrossChainSynced0 is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced0(opts *bind.FilterOpts, remoteBlockId []uint64) (*TaikoL1CrossChainSynced0Iterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced0(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL1CrossChainSynced0Iterator, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced0", remoteBlockIdRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced0", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -2361,15 +2330,19 @@ func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced0(opts *bind.FilterOpts, // WatchCrossChainSynced0 is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced0(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced0, remoteBlockId []uint64) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced0(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced0, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced0", remoteBlockIdRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced0", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -2403,7 +2376,7 @@ func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced0(opts *bind.WatchOpts, si // ParseCrossChainSynced0 is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) func (_TaikoL1 *TaikoL1Filterer) ParseCrossChainSynced0(log types.Log) (*TaikoL1CrossChainSynced0, error) { event := new(TaikoL1CrossChainSynced0) if err := _TaikoL1.contract.UnpackLog(event, "CrossChainSynced0", log); err != nil { @@ -3524,141 +3497,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTokenCredited(log types.Log) (*TaikoL1Toke return event, nil } -// TaikoL1TokenCredited0Iterator is returned from FilterTokenCredited0 and is used to iterate over the raw logs and unpacked data for TokenCredited0 events raised by the TaikoL1 contract. -type TaikoL1TokenCredited0Iterator struct { - Event *TaikoL1TokenCredited0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1TokenCredited0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenCredited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenCredited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TokenCredited0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1TokenCredited0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1TokenCredited0 represents a TokenCredited0 event raised by the TaikoL1 contract. -type TaikoL1TokenCredited0 struct { - To common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTokenCredited0 is a free log retrieval operation binding the contract event 0xcc91b0b567e69e32d26830c50d1078f0baec319d458fa847f2633c1c2f71dd74. -// -// Solidity: event TokenCredited(address to, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) FilterTokenCredited0(opts *bind.FilterOpts) (*TaikoL1TokenCredited0Iterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TokenCredited0") - if err != nil { - return nil, err - } - return &TaikoL1TokenCredited0Iterator{contract: _TaikoL1.contract, event: "TokenCredited0", logs: logs, sub: sub}, nil -} - -// WatchTokenCredited0 is a free log subscription operation binding the contract event 0xcc91b0b567e69e32d26830c50d1078f0baec319d458fa847f2633c1c2f71dd74. -// -// Solidity: event TokenCredited(address to, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) WatchTokenCredited0(opts *bind.WatchOpts, sink chan<- *TaikoL1TokenCredited0) (event.Subscription, error) { - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TokenCredited0") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1TokenCredited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenCredited0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTokenCredited0 is a log parse operation binding the contract event 0xcc91b0b567e69e32d26830c50d1078f0baec319d458fa847f2633c1c2f71dd74. -// -// Solidity: event TokenCredited(address to, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) ParseTokenCredited0(log types.Log) (*TaikoL1TokenCredited0, error) { - event := new(TaikoL1TokenCredited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenCredited0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TokenDebitedIterator is returned from FilterTokenDebited and is used to iterate over the raw logs and unpacked data for TokenDebited events raised by the TaikoL1 contract. type TaikoL1TokenDebitedIterator struct { Event *TaikoL1TokenDebited // Event containing the contract specifics and raw log @@ -3794,141 +3632,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTokenDebited(log types.Log) (*TaikoL1Token return event, nil } -// TaikoL1TokenDebited0Iterator is returned from FilterTokenDebited0 and is used to iterate over the raw logs and unpacked data for TokenDebited0 events raised by the TaikoL1 contract. -type TaikoL1TokenDebited0Iterator struct { - Event *TaikoL1TokenDebited0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1TokenDebited0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenDebited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenDebited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TokenDebited0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1TokenDebited0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1TokenDebited0 represents a TokenDebited0 event raised by the TaikoL1 contract. -type TaikoL1TokenDebited0 struct { - From common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTokenDebited0 is a free log retrieval operation binding the contract event 0x9414c932608e522aea77e1b5fd1cdb441e5d57daf49d9a9a0b7409ef8d9e0070. -// -// Solidity: event TokenDebited(address from, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) FilterTokenDebited0(opts *bind.FilterOpts) (*TaikoL1TokenDebited0Iterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TokenDebited0") - if err != nil { - return nil, err - } - return &TaikoL1TokenDebited0Iterator{contract: _TaikoL1.contract, event: "TokenDebited0", logs: logs, sub: sub}, nil -} - -// WatchTokenDebited0 is a free log subscription operation binding the contract event 0x9414c932608e522aea77e1b5fd1cdb441e5d57daf49d9a9a0b7409ef8d9e0070. -// -// Solidity: event TokenDebited(address from, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) WatchTokenDebited0(opts *bind.WatchOpts, sink chan<- *TaikoL1TokenDebited0) (event.Subscription, error) { - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TokenDebited0") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1TokenDebited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenDebited0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTokenDebited0 is a log parse operation binding the contract event 0x9414c932608e522aea77e1b5fd1cdb441e5d57daf49d9a9a0b7409ef8d9e0070. -// -// Solidity: event TokenDebited(address from, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) ParseTokenDebited0(log types.Log) (*TaikoL1TokenDebited0, error) { - event := new(TaikoL1TokenDebited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenDebited0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TokenDepositedIterator is returned from FilterTokenDeposited and is used to iterate over the raw logs and unpacked data for TokenDeposited events raised by the TaikoL1 contract. type TaikoL1TokenDepositedIterator struct { Event *TaikoL1TokenDeposited // Event containing the contract specifics and raw log diff --git a/packages/eventindexer/event.go b/packages/eventindexer/event.go index 1a561d7c168..c21496d28b8 100644 --- a/packages/eventindexer/event.go +++ b/packages/eventindexer/event.go @@ -16,6 +16,7 @@ var ( EventNameTransitionProved = "TransitionProved" EventNameTransitionContested = "TransitionContested" EventNameBlockProposed = "BlockProposed" + EventNameBlockAssigned = "BlockAssigned" EventNameBlockVerified = "BlockVerified" EventNameMessageSent = "MessageSent" EventNameSwap = "Swap" @@ -41,6 +42,7 @@ type Event struct { To string `json:"to"` TokenID sql.NullInt64 `json:"tokenID"` ContractAddress string `json:"contractAddress"` + FeeTokenAddress string `json:"feeTokenAddress"` TransactedAt time.Time `json:"transactedAt"` } @@ -59,6 +61,7 @@ type SaveEventOpts struct { To *string TokenID *int64 ContractAddress *string + FeeTokenAddress *string TransactedAt time.Time } diff --git a/packages/eventindexer/generator/generator.go b/packages/eventindexer/generator/generator.go index df4f08ba4b4..3bf7a70fe72 100644 --- a/packages/eventindexer/generator/generator.go +++ b/packages/eventindexer/generator/generator.go @@ -11,6 +11,7 @@ import ( "github.com/taikoxyz/taiko-mono/packages/eventindexer" "github.com/taikoxyz/taiko-mono/packages/eventindexer/tasks" "github.com/urfave/cli/v2" + "gorm.io/gorm" ) var ( @@ -128,24 +129,12 @@ func (g *Generator) generateByTask(ctx context.Context, task string) error { for d := startingDate; d.Before(currentDate); d = d.AddDate(0, 0, 1) { slog.Info("Processing", "task", task, "date", d.Format("2006-01-02"), "currentDate", currentDate.Format("2006-01-02")) - result, err := g.queryByTask(task, d) + err := g.queryByTask(task, d) if err != nil { slog.Info("Query failed", "task", task, "date", d.Format("2006-01-02"), "error", err.Error()) return err } - slog.Info("Query successful", "task", task, "date", d.Format("2006-01-02"), "result", result.String()) - - insertStmt := ` - INSERT INTO time_series_data(task, value, date) - VALUES (?, ?, ?)` - - err = g.db.GormDB().Exec(insertStmt, task, result, d.Format("2006-01-02")).Error - if err != nil { - slog.Info("Insert failed", "task", task, "date", d.Format("2006-01-02"), "error", err.Error()) - return err - } - slog.Info("Processed", "task", task, "date", d.Format("2006-01-02")) } @@ -193,7 +182,7 @@ func (g *Generator) getCurrentDate() time.Time { // nolint: funlen, gocognit // queryByTask runs a database query which should return result data based on the // task -func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, error) { +func (g *Generator) queryByTask(task string, date time.Time) error { dateString := date.Format("2006-01-02") var result decimal.Decimal @@ -202,24 +191,107 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e switch task { case tasks.TotalProofRewards: - var dailyProofRewards decimal.NullDecimal + var feeTokenAddresses []string = make([]string, 0) + // get unique fee token addresses + query := "SELECT DISTINCT(fee_token_address) FROM events WHERE stat_type = ?" - query := "SELECT COALESCE(SUM(proof_reward), 0) FROM events WHERE event = ? AND DATE(transacted_at) = ?" err = g.db.GormDB(). - Raw(query, eventindexer.EventNameBlockProposed, dateString). - Scan(&dailyProofRewards).Error - - tsdResult, err := g.previousDayTsdResultByTask(task, date) + Raw(query, eventindexer.EventNameBlockAssigned). + Scan(&feeTokenAddresses).Error if err != nil { - return result, err + return err + } + + for _, feeTokenAddress := range feeTokenAddresses { + f := feeTokenAddress + + var dailyProofRewards decimal.NullDecimal + + // nolint: lll + query := "SELECT COALESCE(SUM(proof_reward), 0) FROM events WHERE event = ? AND DATE(transacted_at) = ? AND fee_token_address = ?" + err = g.db.GormDB(). + Raw(query, eventindexer.EventNameBlockAssigned, dateString, f). + Scan(&dailyProofRewards).Error + + if err != nil { + return err + } + + tsdResult, err := g.previousDayTsdResultByTask(task, date, &f) + if err != nil { + return err + } + + result := tsdResult.Decimal.Add(dailyProofRewards.Decimal) + + slog.Info("Query successful", + "task", task, + "date", dateString, + "result", result.String(), + "feeTokenAddress", f, + ) + + insertStmt := ` + INSERT INTO time_series_data(task, value, date, fee_token_address) + VALUES (?, ?, ?, ?)` + + err = g.db.GormDB().Exec(insertStmt, task, result, dateString, f).Error + if err != nil { + slog.Info("Insert failed", "task", task, "date", dateString, "error", err.Error()) + return err + } } - result = tsdResult.Decimal.Add(dailyProofRewards.Decimal) + // return early for array processing data + return nil case tasks.ProofRewardsPerDay: - query := "SELECT COALESCE(SUM(proof_reward), 0) FROM events WHERE event = ? AND DATE(transacted_at) = ?" + var feeTokenAddresses []string = make([]string, 0) + // get unique fee token addresses + query := "SELECT DISTINCT(fee_token_address) FROM events WHERE stat_type = ?" + err = g.db.GormDB(). - Raw(query, eventindexer.EventNameBlockProposed, dateString). - Scan(&result).Error + Raw(query, eventindexer.EventNameBlockAssigned). + Scan(&feeTokenAddresses).Error + if err != nil { + return err + } + + for _, feeTokenAddress := range feeTokenAddresses { + f := feeTokenAddress + + var result decimal.Decimal + + // nolint: lll + query := `SELECT COALESCE(SUM(proof_reward), 0) FROM events WHERE event = ? AND DATE(transacted_at) = ? AND fee_token_address = ?` + err = g.db.GormDB(). + Raw(query, eventindexer.EventNameBlockAssigned, dateString, f). + Scan(&result).Error + + if err != nil { + return err + } + + slog.Info("Query successful", + "task", task, + "date", dateString, + "result", result.String(), + "feeTokenAddress", f, + ) + + insertStmt := ` + INSERT INTO time_series_data(task, value, date, fee_token_address) + VALUES (?, ?, ?, ?)` + + err = g.db.GormDB().Exec(insertStmt, task, result, dateString, f).Error + if err != nil { + slog.Info("Insert failed", "task", task, "date", dateString, "error", err.Error()) + return err + } + } + + // return early for array processing data + return nil + case tasks.BridgeMessagesSentPerDay: err = g.eventCount(task, date, eventindexer.EventNameMessageSent, &result) case tasks.TotalBridgeMessagesSent: @@ -227,12 +299,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e err = g.eventCount(task, date, eventindexer.EventNameMessageSent, &dailyMsgSentCount) if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyMsgSentCount.Decimal) @@ -243,12 +315,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e err = g.eventCount(task, date, eventindexer.EventNameBlockProposed, &dailyProposerCount) if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyProposerCount.Decimal) @@ -265,7 +337,7 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e eventindexer.EventNameBlockProposed, ).Scan(&result).Error if err != nil { - return result, err + return err } case tasks.UniqueProversPerDay: query := "SELECT COUNT(DISTINCT address) FROM events WHERE event = ? AND DATE(transacted_at) = ?" @@ -280,7 +352,7 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e eventindexer.EventNameTransitionProved, ).Scan(&result).Error if err != nil { - return result, err + return err } case tasks.TransitionProvedTxPerDay: query := "SELECT COUNT(*) FROM events WHERE event = ? AND DATE(transacted_at) = ?" @@ -298,12 +370,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e dateString, ).Scan(&dailyTransitionProvedCount).Error if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyTransitionProvedCount.Decimal) @@ -323,12 +395,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e dateString, ).Scan(&dailyTransitionContestedCount).Error if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyTransitionContestedCount.Decimal) @@ -342,12 +414,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e err = g.db.GormDB().Raw(query, dateString).Scan(&dailyAccountsCount).Error if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyAccountsCount.Decimal) @@ -361,12 +433,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e err = g.db.GormDB().Raw(query, dateString).Scan(&dailyBlockCount).Error if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyBlockCount.Decimal) @@ -382,12 +454,12 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e err = g.db.GormDB().Raw(query, dateString).Scan(&dailyTxCount).Error if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyTxCount.Decimal) @@ -402,34 +474,60 @@ func (g *Generator) queryByTask(task string, date time.Time) (decimal.Decimal, e err = g.db.GormDB().Raw(query, dateString, ZeroAddress.Hex()).Scan(&dailyContractCount).Error if err != nil { - return result, err + return err } - tsdResult, err := g.previousDayTsdResultByTask(task, date) + tsdResult, err := g.previousDayTsdResultByTask(task, date, nil) if err != nil { - return result, err + return err } result = tsdResult.Decimal.Add(dailyContractCount.Decimal) default: - return result, errors.New("task not supported") + return errors.New("task not supported") + } + + if err != nil { + return err } + slog.Info("Query successful", "task", task, "date", dateString, "result", result.String()) + + insertStmt := ` + INSERT INTO time_series_data(task, value, date) + VALUES (?, ?, ?)` + + err = g.db.GormDB().Exec(insertStmt, task, result, dateString).Error if err != nil { - return result, err + slog.Info("Insert failed", "task", task, "date", dateString, "error", err.Error()) + return err } - return result, nil + return nil } // previousDayTsdResultByTask returns the previous day's time series data, based on // task and time passed in. -func (g *Generator) previousDayTsdResultByTask(task string, date time.Time) (decimal.NullDecimal, error) { +func (g *Generator) previousDayTsdResultByTask( + task string, + date time.Time, + feeTokenAddress *string, +) (decimal.NullDecimal, error) { var tsdResult decimal.NullDecimal - tsdQuery := `SELECT value FROM time_series_data WHERE task = ? AND date = ?` + var tsdQuery string = `SELECT value FROM time_series_data WHERE task = ? AND date = ?` + + var q *gorm.DB = g.db.GormDB(). + Raw(tsdQuery, task, date.AddDate(0, 0, -1).Format("2006-01-02")) + + if feeTokenAddress != nil { + tsdQuery = `SELECT value FROM time_series_data WHERE task = ? AND date = ? AND fee_token_address = ?` + q = g.db.GormDB(). + Raw(tsdQuery, task, date.AddDate(0, 0, -1).Format("2006-01-02"), *feeTokenAddress) + } - err := g.db.GormDB().Raw(tsdQuery, task, date.AddDate(0, 0, -1).Format("2006-01-02")).Scan(&tsdResult).Error + err := q. + Scan(&tsdResult).Error if err != nil { return tsdResult, err } diff --git a/packages/eventindexer/http/get_chart_by_task.go b/packages/eventindexer/http/get_chart_by_task.go index 3c97450df90..33e3e905f98 100644 --- a/packages/eventindexer/http/get_chart_by_task.go +++ b/packages/eventindexer/http/get_chart_by_task.go @@ -21,7 +21,7 @@ import ( // @Success 200 {object} eventindexer.ChartResponse // @Router /chartByTask [get] func (srv *Server) GetChartByTask(c echo.Context) error { - cached, found := srv.cache.Get(c.QueryParam("task")) + cached, found := srv.cache.Get(c.QueryParam("task") + c.QueryParam("fee_token_address")) var chart *eventindexer.ChartResponse @@ -35,12 +35,13 @@ func (srv *Server) GetChartByTask(c echo.Context) error { c.QueryParam("task"), c.QueryParam("start"), c.QueryParam("end"), + c.QueryParam("fee_token_address"), ) if err != nil { return webutils.LogAndRenderErrors(c, http.StatusUnprocessableEntity, err) } - srv.cache.Set(c.QueryParam("task"), chart, cache.DefaultExpiration) + srv.cache.Set(c.QueryParam("task")+c.QueryParam("fee_token_address"), chart, cache.DefaultExpiration) } return c.JSON(http.StatusOK, chart) diff --git a/packages/eventindexer/http/get_stats.go b/packages/eventindexer/http/get_stats.go index 8746b07724a..f031c800ce2 100644 --- a/packages/eventindexer/http/get_stats.go +++ b/packages/eventindexer/http/get_stats.go @@ -9,6 +9,17 @@ import ( "github.com/taikoxyz/taiko-mono/packages/eventindexer" ) +type proofRewardStatResponse struct { + AverageProofReward string `json:"averageProofReward"` + FeeTokenAddress string `json:"feeTokenAddress"` + NumBlocksAssigned uint64 `json:"numBlocksAssigned"` +} +type statsResponse struct { + AverageProofTime string `json:"averageProofTime"` + NumProofs uint64 `json:"numProofs"` + AverageProofRewards []proofRewardStatResponse `json:"averageProofRewards"` +} + // GetStats returns the current computed stats for the deployed network. // // @Summary Get stats @@ -20,22 +31,37 @@ import ( func (srv *Server) GetStats(c echo.Context) error { cached, found := srv.cache.Get(CacheKeyStats) - var stats *eventindexer.Stat - - var err error + var statsResp *statsResponse = &statsResponse{ + AverageProofRewards: make([]proofRewardStatResponse, 0), + } if found { - stats = cached.(*eventindexer.Stat) + statsResp = cached.(*statsResponse) } else { - stats, err = srv.statRepo.Find( + stats, err := srv.statRepo.FindAll( c.Request().Context(), ) if err != nil { return webutils.LogAndRenderErrors(c, http.StatusUnprocessableEntity, err) } - srv.cache.Set(CacheKeyStats, stats, 1*time.Minute) + for _, s := range stats { + if s.StatType == eventindexer.StatTypeProofTime { + statsResp.AverageProofTime = s.AverageProofTime + statsResp.NumProofs = s.NumProofs + } + + if s.StatType == eventindexer.StatTypeProofReward { + statsResp.AverageProofRewards = append(statsResp.AverageProofRewards, proofRewardStatResponse{ + AverageProofReward: s.AverageProofReward, + FeeTokenAddress: s.FeeTokenAddress, + NumBlocksAssigned: s.NumBlocksAssigned, + }) + } + } + + srv.cache.Set(CacheKeyStats, statsResp, 1*time.Minute) } - return c.JSON(http.StatusOK, stats) + return c.JSON(http.StatusOK, statsResp) } diff --git a/packages/eventindexer/http/get_stats_test.go b/packages/eventindexer/http/get_stats_test.go index 9926d1f9a25..5af0728b3c0 100644 --- a/packages/eventindexer/http/get_stats_test.go +++ b/packages/eventindexer/http/get_stats_test.go @@ -16,13 +16,23 @@ import ( func Test_GetStats(t *testing.T) { srv := newTestServer("") - var proofTime = big.NewInt(5) - var proofReward = big.NewInt(7) + var proofTime = big.NewInt(1) + + feeTokenAddress := "0x01" + _, err := srv.statRepo.Save(context.Background(), eventindexer.SaveStatOpts{ - ProofTime: proofTime, - ProofReward: proofReward, + ProofReward: proofReward, + StatType: eventindexer.StatTypeProofReward, + FeeTokenAddress: &feeTokenAddress, + }) + + assert.Equal(t, nil, err) + + _, err = srv.statRepo.Save(context.Background(), eventindexer.SaveStatOpts{ + ProofTime: proofTime, + StatType: eventindexer.StatTypeProofTime, }) assert.Equal(t, nil, err) @@ -38,7 +48,7 @@ func Test_GetStats(t *testing.T) { "0x123", http.StatusOK, // nolint: lll - []string{`{"id":1,"averageProofTime":"5","averageProofReward":"7","averageProposerReward":"","numProposerRewards":0,"numProofs":1,"numVerifiedBlocks":1}`}, + []string{`{"averageProofTime":"1","numProofs":1,"averageProofRewards":\[{"averageProofReward":"7","feeTokenAddress":"0x01","numBlocksAssigned":1}\]}`}, }, } diff --git a/packages/eventindexer/indexer/config.go b/packages/eventindexer/indexer/config.go index a46bd5c4afe..32ff034db0a 100644 --- a/packages/eventindexer/indexer/config.go +++ b/packages/eventindexer/indexer/config.go @@ -33,6 +33,7 @@ type Config struct { ETHClientTimeout uint64 L1TaikoAddress common.Address BridgeAddress common.Address + AssignmentHookAddress common.Address SwapAddresses []common.Address CORSOrigins []string BlockBatchSize uint64 @@ -75,6 +76,7 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) { ETHClientTimeout: c.Uint64(flags.ETHClientTimeout.Name), L1TaikoAddress: common.HexToAddress(c.String(flags.L1TaikoAddress.Name)), BridgeAddress: common.HexToAddress(c.String(flags.BridgeAddress.Name)), + AssignmentHookAddress: common.HexToAddress(c.String(flags.AssignmentHookAddress.Name)), SwapAddresses: swaps, CORSOrigins: cors, BlockBatchSize: c.Uint64(flags.BlockBatchSize.Name), diff --git a/packages/eventindexer/indexer/config_test.go b/packages/eventindexer/indexer/config_test.go index 2e026fa4f45..1b86d67b635 100644 --- a/packages/eventindexer/indexer/config_test.go +++ b/packages/eventindexer/indexer/config_test.go @@ -14,6 +14,7 @@ var ( metricsHttpPort = "1001" l1TaikoAddress = "0x63FaC9201494f0bd17B9892B9fae4d52fe3BD377" bridgeAddress = "0x73FaC9201494f0bd17B9892B9fae4d52fe3BD377" + assignmentHookAddress = "0x83FaC9201494f0bd17B9892B9fae4d52fe3BD377" swapAddresses = "0x33FaC9201494f0bd17B9892B9fae4d52fe3BD377,0x13FaC9201494f0bd17B9892B9fae4d52fe3BD377" corsOrigins = "http://localhost:3000,http://localhost:3001" databaseMaxIdleConns = "10" @@ -54,6 +55,7 @@ func TestNewConfigFromCliContext(t *testing.T) { assert.Equal(t, uint64(1001), c.MetricsHTTPPort) assert.Equal(t, common.HexToAddress(l1TaikoAddress), c.L1TaikoAddress) assert.Equal(t, common.HexToAddress(bridgeAddress), c.BridgeAddress) + assert.Equal(t, common.HexToAddress(assignmentHookAddress), c.AssignmentHookAddress) assert.Equal(t, uint64(10), c.DatabaseMaxIdleConns) assert.Equal(t, uint64(10), c.DatabaseMaxOpenConns) assert.Equal(t, uint64(30), c.DatabaseMaxConnLifetime) @@ -81,6 +83,7 @@ func TestNewConfigFromCliContext(t *testing.T) { "--" + flags.L1TaikoAddress.Name, l1TaikoAddress, "--" + flags.BridgeAddress.Name, bridgeAddress, "--" + flags.SwapAddresses.Name, swapAddresses, + "--" + flags.AssignmentHookAddress.Name, assignmentHookAddress, "--" + flags.HTTPPort.Name, httpPort, "--" + flags.MetricsHTTPPort.Name, metricsHttpPort, "--" + flags.CORSOrigins.Name, corsOrigins, diff --git a/packages/eventindexer/indexer/filter.go b/packages/eventindexer/indexer/filter.go index 1441cd4540e..0c752aa7732 100644 --- a/packages/eventindexer/indexer/filter.go +++ b/packages/eventindexer/indexer/filter.go @@ -101,6 +101,22 @@ func filterFunc( }) } + if indxr.assignmentHook != nil { + wg.Go(func() error { + blocksAssigned, err := indxr.assignmentHook.FilterBlockAssigned(filterOpts, nil) + if err != nil { + return errors.Wrap(err, "indxr.assignmentHook.FilterBlockAssigned") + } + + err = indxr.saveBlockAssignedEvents(ctx, chainID, blocksAssigned) + if err != nil { + return errors.Wrap(err, "indxr.saveBlockAssignedEvents") + } + + return nil + }) + } + if indxr.swaps != nil { for _, s := range indxr.swaps { swap := s diff --git a/packages/eventindexer/indexer/indexer.go b/packages/eventindexer/indexer/indexer.go index 31d6ca2a6fe..1af622dfa2c 100644 --- a/packages/eventindexer/indexer/indexer.go +++ b/packages/eventindexer/indexer/indexer.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/labstack/echo/v4" "github.com/taikoxyz/taiko-mono/packages/eventindexer" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/assignmenthook" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/bridge" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/swap" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/taikol1" @@ -64,9 +65,10 @@ type Indexer struct { blockBatchSize uint64 subscriptionBackoff time.Duration - taikol1 *taikol1.TaikoL1 - bridge *bridge.Bridge - swaps []*swap.Swap + taikol1 *taikol1.TaikoL1 + bridge *bridge.Bridge + assignmentHook *assignmenthook.AssignmentHook + swaps []*swap.Swap httpPort uint64 srv *http.Server @@ -79,6 +81,8 @@ type Indexer struct { watchMode WatchMode syncMode SyncMode + + blockSaveMutex *sync.Mutex } func (indxr *Indexer) Start() error { @@ -190,6 +194,15 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { } } + var assignmentHookContract *assignmenthook.AssignmentHook + + if cfg.AssignmentHookAddress.Hex() != ZeroAddress.Hex() { + assignmentHookContract, err = assignmenthook.NewAssignmentHook(cfg.AssignmentHookAddress, ethClient) + if err != nil { + return errors.Wrap(err, "contracts.NewBridge") + } + } + var swapContracts []*swap.Swap if cfg.SwapAddresses != nil && len(cfg.SwapAddresses) > 0 { @@ -216,6 +229,7 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { return err } + i.blockSaveMutex = &sync.Mutex{} i.accountRepo = accountRepository i.eventRepo = eventRepository i.processedBlockRepo = processedBlockRepository @@ -227,6 +241,7 @@ func InitFromConfig(ctx context.Context, i *Indexer, cfg *Config) error { i.ethClient = ethClient i.taikol1 = taikoL1 i.bridge = bridgeContract + i.assignmentHook = assignmentHookContract i.swaps = swapContracts i.blockBatchSize = cfg.BlockBatchSize i.subscriptionBackoff = time.Duration(cfg.SubscriptionBackoff) * time.Second diff --git a/packages/eventindexer/indexer/save_block_assigned_event.go b/packages/eventindexer/indexer/save_block_assigned_event.go new file mode 100644 index 00000000000..954b692d71c --- /dev/null +++ b/packages/eventindexer/indexer/save_block_assigned_event.go @@ -0,0 +1,147 @@ +package indexer + +import ( + "context" + "encoding/json" + "math/big" + "time" + + "log/slog" + + "github.com/pkg/errors" + "github.com/taikoxyz/taiko-mono/packages/eventindexer" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/assignmenthook" +) + +func (indxr *Indexer) saveBlockAssignedEvents( + ctx context.Context, + chainID *big.Int, + events *assignmenthook.AssignmentHookBlockAssignedIterator, +) error { + if !events.Next() || events.Event == nil { + slog.Info("no blockAssigned events") + return nil + } + + for { + event := events.Event + + if err := indxr.saveBlockAssignedEvent(ctx, chainID, event); err != nil { + eventindexer.BlockAssignedEventsProcessedError.Inc() + + return errors.Wrap(err, "indxr.saveBlockAssignedEvent") + } + + if !events.Next() { + return nil + } + } +} + +func (indxr *Indexer) saveBlockAssignedEvent( + ctx context.Context, + chainID *big.Int, + event *assignmenthook.AssignmentHookBlockAssigned, +) error { + slog.Info("blockAssigned", "prover", event.AssignedProver.Hex()) + + marshaled, err := json.Marshal(event) + if err != nil { + return errors.Wrap(err, "json.Marshal(event)") + } + + assignedProver := event.AssignedProver.Hex() + + block, err := indxr.ethClient.BlockByNumber(ctx, new(big.Int).SetUint64(event.Raw.BlockNumber)) + if err != nil { + return errors.Wrap(err, "indxr.ethClient.BlockByNumber") + } + + proverReward, err := indxr.updateAverageProverReward(ctx, event) + if err != nil { + return errors.Wrap(err, "indxr.updateAverageProverReward") + } + + feeToken := event.Assignment.FeeToken.Hex() + + _, err = indxr.eventRepo.Save(ctx, eventindexer.SaveEventOpts{ + Name: eventindexer.EventNameBlockAssigned, + Data: string(marshaled), + ChainID: chainID, + Event: eventindexer.EventNameBlockAssigned, + Address: "", + AssignedProver: &assignedProver, + TransactedAt: time.Unix(int64(block.Time()), 0).UTC(), + Amount: proverReward, + ProofReward: proverReward, + FeeTokenAddress: &feeToken, + }) + if err != nil { + return errors.Wrap(err, "indxr.eventRepo.Save") + } + + eventindexer.BlockProposedEventsProcessed.Inc() + + return nil +} + +func (indxr *Indexer) updateAverageProverReward( + ctx context.Context, + event *assignmenthook.AssignmentHookBlockAssigned, +) (*big.Int, error) { + feeToken := event.Assignment.FeeToken.Hex() + + stat, err := indxr.statRepo.Find(ctx, eventindexer.StatTypeProofReward, &feeToken) + if err != nil { + return nil, errors.Wrap(err, "indxr.statRepo.Find") + } + + avg, ok := new(big.Int).SetString(stat.AverageProofReward, 10) + if !ok { + return nil, errors.New("unable to convert average proof time to string") + } + + var proverFee *big.Int + + tiers := event.Assignment.TierFees + minTier := event.Meta.MinTier + + for _, tier := range tiers { + if tier.Tier == minTier { + proverFee = tier.Fee + break + } + } + + newAverageProofReward := calcNewAverage( + avg, + new(big.Int).SetUint64(stat.NumProofs), + proverFee, + ) + + slog.Info("newAverageProofReward update", + "prover", + event.AssignedProver.Hex(), + "proverFee", + proverFee.String(), + "tiers", + event.Assignment.TierFees, + "minTier", + event.Meta.MinTier, + "avg", + avg.String(), + "newAvg", + newAverageProofReward.String(), + ) + + _, err = indxr.statRepo.Save(ctx, eventindexer.SaveStatOpts{ + ProofReward: newAverageProofReward, + StatType: eventindexer.StatTypeProofReward, + FeeTokenAddress: &feeToken, + }) + if err != nil { + return nil, errors.Wrap(err, "indxr.statRepo.Save") + } + + return big.NewInt(0), nil +} diff --git a/packages/eventindexer/indexer/save_block_proposed_event.go b/packages/eventindexer/indexer/save_block_proposed_event.go index 75b75ea179b..1f41c6656a8 100644 --- a/packages/eventindexer/indexer/save_block_proposed_event.go +++ b/packages/eventindexer/indexer/save_block_proposed_event.go @@ -75,11 +75,6 @@ func (indxr *Indexer) saveBlockProposedEvent( return errors.Wrap(err, "indxr.ethClient.BlockByNumber") } - proverReward, err := indxr.updateAverageProverReward(ctx, event) - if err != nil { - return errors.Wrap(err, "indxr.updateAverageProposerReward") - } - _, err = indxr.eventRepo.Save(ctx, eventindexer.SaveEventOpts{ Name: eventindexer.EventNameBlockProposed, Data: string(marshaled), @@ -89,8 +84,6 @@ func (indxr *Indexer) saveBlockProposedEvent( BlockID: &blockID, AssignedProver: &assignedProver, TransactedAt: time.Unix(int64(block.Time()), 0).UTC(), - Amount: event.ProverFee, - ProofReward: proverReward, }) if err != nil { return errors.Wrap(err, "indxr.eventRepo.Save") @@ -100,44 +93,3 @@ func (indxr *Indexer) saveBlockProposedEvent( return nil } - -func (indxr *Indexer) updateAverageProverReward( - ctx context.Context, - event *taikol1.TaikoL1BlockProposed, -) (*big.Int, error) { - stat, err := indxr.statRepo.Find(ctx) - if err != nil { - return nil, errors.Wrap(err, "indxr.statRepo.Find") - } - - avg, ok := new(big.Int).SetString(stat.AverageProofReward, 10) - if !ok { - return nil, errors.New("unable to convert average proof time to string") - } - - newAverageProofReward := calcNewAverage( - avg, - new(big.Int).SetUint64(stat.NumProofs), - event.ProverFee, - ) - - slog.Info("newAverageProofReward update", - "id", - event.BlockId.Int64(), - "prover", - event.AssignedProver.Hex(), - "avg", - avg.String(), - "newAvg", - newAverageProofReward.String(), - ) - - _, err = indxr.statRepo.Save(ctx, eventindexer.SaveStatOpts{ - ProofReward: newAverageProofReward, - }) - if err != nil { - return nil, errors.Wrap(err, "indxr.statRepo.Save") - } - - return event.ProverFee, nil -} diff --git a/packages/eventindexer/indexer/save_transition_proved_event.go b/packages/eventindexer/indexer/save_transition_proved_event.go index 4a27359e3cf..31e17caf871 100644 --- a/packages/eventindexer/indexer/save_transition_proved_event.go +++ b/packages/eventindexer/indexer/save_transition_proved_event.go @@ -108,7 +108,7 @@ func (indxr *Indexer) updateAverageProofTime(ctx context.Context, event *taikol1 return errors.Wrap(err, "indxr.ethClient.BlockByHash") } - stat, err := indxr.statRepo.Find(ctx) + stat, err := indxr.statRepo.Find(ctx, eventindexer.StatTypeProofTime, nil) if err != nil { return errors.Wrap(err, "indxr.statRepo.Find") } @@ -149,6 +149,7 @@ func (indxr *Indexer) updateAverageProofTime(ctx context.Context, event *taikol1 _, err = indxr.statRepo.Save(ctx, eventindexer.SaveStatOpts{ ProofTime: newAverageProofTime, + StatType: eventindexer.StatTypeProofTime, }) if err != nil { return errors.Wrap(err, "indxr.statRepo.Save") diff --git a/packages/eventindexer/indexer/subscribe.go b/packages/eventindexer/indexer/subscribe.go index 02f9f451172..80397d82f1c 100644 --- a/packages/eventindexer/indexer/subscribe.go +++ b/packages/eventindexer/indexer/subscribe.go @@ -7,11 +7,13 @@ import ( "log/slog" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/labstack/gommon/log" "github.com/pkg/errors" "github.com/taikoxyz/taiko-mono/packages/eventindexer" + "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/assignmenthook" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/bridge" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/swap" "github.com/taikoxyz/taiko-mono/packages/eventindexer/contracts/taikol1" @@ -41,6 +43,10 @@ func (indxr *Indexer) subscribe(ctx context.Context, chainID *big.Int) error { } } + if indxr.assignmentHook != nil { + go indxr.subscribeBlockAssigned(ctx, chainID, errChan) + } + go indxr.subscribeRawBlockData(ctx, chainID, errChan) // nolint: gosimple @@ -136,24 +142,8 @@ func (indxr *Indexer) subscribeTransitionProved(ctx context.Context, chainID *bi return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) - return - } - - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.save", "error", err) - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } @@ -203,24 +193,8 @@ func (indxr *Indexer) subscribeTransitionContested(ctx context.Context, chainID return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) - return - } - - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.save", "error", err) - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } @@ -281,26 +255,8 @@ func (indxr *Indexer) subscribeBlockProposed(ctx context.Context, chainID *big.I return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) - - return - } - - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.save", "error", err) - - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } @@ -345,24 +301,8 @@ func (indxr *Indexer) subscribeBlockVerified(ctx context.Context, chainID *big.I return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) - return - } - - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.save", "error", err) - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } @@ -408,24 +348,8 @@ func (indxr *Indexer) subscribeMessageSent(ctx context.Context, chainID *big.Int return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) - return - } - - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.save", "error", err) - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } @@ -468,24 +392,8 @@ func (indxr *Indexer) subscribeSwap(ctx context.Context, s *swap.Swap, chainID * return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) - return - } - - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.save", "error", err) - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } @@ -528,26 +436,91 @@ func (indxr *Indexer) subscribeLiquidityAdded(ctx context.Context, s *swap.Swap, return } - block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) - if err != nil { - slog.Error("indxr.subscribe, blockRepo.GetLatestBlockProcessed", "error", err) + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) + } + }() + } + } +} + +func (indxr *Indexer) subscribeBlockAssigned(ctx context.Context, chainID *big.Int, errChan chan error) { + sink := make(chan *assignmenthook.AssignmentHookBlockAssigned) + + sub := event.ResubscribeErr( + indxr.subscriptionBackoff, + func(ctx context.Context, err error) (event.Subscription, error) { + if err != nil { + log.Error("assignmenthook.AssignmentHookBlockAssignedd", "error", err) + } + log.Info("resubscribing to TransitionProved events") + + return indxr.assignmentHook.WatchBlockAssigned(&bind.WatchOpts{ + Context: ctx, + }, sink, nil) + }) + + defer sub.Unsubscribe() + + for { + select { + case <-ctx.Done(): + slog.Info("context finished") + return + case err := <-sub.Err(): + slog.Error("sub.Err()", "error", err) + errChan <- errors.Wrap(err, "sub.Err()") + case event := <-sink: + go func() { + log.Info("blockAssigned event from subscription", + "prover", event.AssignedProver.Hex(), + "metaId", event.Meta.Id, + ) + + if err := indxr.saveBlockAssignedEvent(ctx, chainID, event); err != nil { + eventindexer.TransitionProvedEventsProcessedError.Inc() + + log.Error("indxr.subscribe, indxr.saveBlockAssignedEvent", "error", err) + return } - if block.Height < event.Raw.BlockNumber { - err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ - Height: event.Raw.BlockNumber, - Hash: event.Raw.BlockHash, - ChainID: chainID, - }) - if err != nil { - slog.Error("indxr.subscribe, indxr.processedBlockRepo.Save", "error", err) - return - } - - eventindexer.BlocksProcessed.Inc() + if err := indxr.saveLatestBlockSeen(ctx, chainID, event.Raw.BlockNumber, event.Raw.BlockHash); err != nil { + log.Error("indxr.subscribe, indxr.saveLatestBlockSeen", "error", err) } }() } } } + +func (indxr *Indexer) saveLatestBlockSeen( + ctx context.Context, + chainID *big.Int, + blockNumber uint64, + blockHash common.Hash, +) error { + indxr.blockSaveMutex.Lock() + defer indxr.blockSaveMutex.Unlock() + + block, err := indxr.processedBlockRepo.GetLatestBlockProcessed(chainID) + if err != nil { + slog.Error("indxr.subscribe, indxr.processedBlockRepo.GetLatestBlockProcessed", "error", err) + return err + } + + if block.Height < blockNumber { + err = indxr.processedBlockRepo.Save(eventindexer.SaveProcessedBlockOpts{ + Height: blockNumber, + Hash: blockHash, + ChainID: chainID, + }) + if err != nil { + slog.Error("indxr.subscribe, blockRepo.save", "error", err) + return err + } + + eventindexer.BlocksProcessed.Inc() + } + + return nil +} diff --git a/packages/eventindexer/migrations/1666650599_create_events_table.sql b/packages/eventindexer/migrations/1666650599_create_events_table.sql index 3452a9f2f61..8075afc911f 100644 --- a/packages/eventindexer/migrations/1666650599_create_events_table.sql +++ b/packages/eventindexer/migrations/1666650599_create_events_table.sql @@ -12,6 +12,7 @@ CREATE TABLE IF NOT EXISTS events ( proof_reward VARCHAR(255) DEFAULT NULL, proposer_reward VARCHAR(255) DEFAULT NULL, assigned_prover VARCHAR(42) NOT NULL DEFAULT "", + fee_token_address varchar(42) DEFAULT "", transacted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP , updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP diff --git a/packages/eventindexer/migrations/1666650701_create_stats_table.sql b/packages/eventindexer/migrations/1666650701_create_stats_table.sql index 60bbbeea6fc..2cc76773d09 100644 --- a/packages/eventindexer/migrations/1666650701_create_stats_table.sql +++ b/packages/eventindexer/migrations/1666650701_create_stats_table.sql @@ -2,12 +2,13 @@ -- +goose StatementBegin CREATE TABLE IF NOT EXISTS stats ( id int NOT NULL PRIMARY KEY AUTO_INCREMENT, - average_proof_time VARCHAR(255) NOT NULL DEFAULT "0", - average_proof_reward VARCHAR(255) NOT NULL DEFAULT "0", - average_proposer_reward VARCHAR(255) NOT NULL DEFAULT "0", - num_proposer_rewards int NOT NULL default 0, - num_proofs int NOT NULL default 0, - num_verified_blocks int NOT NULL default 0, + average_proof_time VARCHAR(255) DEFAULT "0", + average_proof_reward VARCHAR(255) DEFAULT "0", + stat_type varchar(22) NOT NULL, + num_proofs int default 0, + num_verified_blocks int default 0, + num_blocks_assigned int default 0, + fee_token_address VARCHAR(42) DEFAULT "", created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP , updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); diff --git a/packages/eventindexer/migrations/20230906203931_create_time_series_data_table.sql b/packages/eventindexer/migrations/20230906203931_create_time_series_data_table.sql index b41b7cf0bcc..90dda4e4d44 100644 --- a/packages/eventindexer/migrations/20230906203931_create_time_series_data_table.sql +++ b/packages/eventindexer/migrations/20230906203931_create_time_series_data_table.sql @@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS time_series_data ( task VARCHAR(40) NOT NULL, value DECIMAL(65, 0) NOT NULL, date VARCHAR(20) NOT NULL, + fee_token_address varchar(42) DEFAULT "", created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP , updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE key `task_date` (`task`, `date`) diff --git a/packages/eventindexer/mock/stat_repository.go b/packages/eventindexer/mock/stat_repository.go index f49d29b01f2..8754fa8a781 100644 --- a/packages/eventindexer/mock/stat_repository.go +++ b/packages/eventindexer/mock/stat_repository.go @@ -7,36 +7,60 @@ import ( ) type StatRepository struct { - stats *eventindexer.Stat + stats []*eventindexer.Stat } func NewStatRepository() *StatRepository { - return &StatRepository{} + return &StatRepository{ + stats: make([]*eventindexer.Stat, 0), + } } func (r *StatRepository) Save(ctx context.Context, opts eventindexer.SaveStatOpts) (*eventindexer.Stat, error) { proofReward := "" - if opts.ProofReward != nil { + if opts.StatType == eventindexer.StatTypeProofReward && opts.ProofReward != nil { proofReward = opts.ProofReward.String() } proofTime := "" - if opts.ProofTime != nil { + if opts.StatType == eventindexer.StatTypeProofTime && opts.ProofTime != nil { proofTime = opts.ProofTime.String() } - r.stats = &eventindexer.Stat{ + stat := &eventindexer.Stat{ ID: 1, AverageProofTime: proofTime, AverageProofReward: proofReward, NumProofs: 1, - NumVerifiedBlocks: 1, + NumBlocksAssigned: 1, + StatType: opts.StatType, + } + + if opts.FeeTokenAddress != nil { + stat.FeeTokenAddress = *opts.FeeTokenAddress } + r.stats = append(r.stats, stat) + + return stat, nil +} + +// FindAll finds each type of unique stat and merges them together +func (r *StatRepository) FindAll( + ctx context.Context, +) ([]*eventindexer.Stat, error) { return r.stats, nil } func (r *StatRepository) Find( ctx context.Context, + statType string, + feeTokenAddress *string, ) (*eventindexer.Stat, error) { - return r.stats, nil + for _, s := range r.stats { + if s.StatType == statType { + return s, nil + } + } + + return nil, nil } diff --git a/packages/eventindexer/prometheus.go b/packages/eventindexer/prometheus.go index 36df523d6a1..578db75e2b4 100644 --- a/packages/eventindexer/prometheus.go +++ b/packages/eventindexer/prometheus.go @@ -10,10 +10,18 @@ var ( Name: "block_proposed_events_processed_ops_total", Help: "The total number of processed BlockProposed events", }) + BlockAssignedEventsProcessed = promauto.NewCounter(prometheus.CounterOpts{ + Name: "block_assigned_events_processed_ops_total", + Help: "The total number of processed BlockAssigned events", + }) BlockProposedEventsProcessedError = promauto.NewCounter(prometheus.CounterOpts{ Name: "block_proposed_events_processed_error_ops_total", Help: "The total number of processed BlockProposed event errors encountered", }) + BlockAssignedEventsProcessedError = promauto.NewCounter(prometheus.CounterOpts{ + Name: "block_assigned_events_processed_error_ops_total", + Help: "The total number of processed BlockAssigned event errors encountered", + }) TransitionProvedEventsProcessed = promauto.NewCounter(prometheus.CounterOpts{ Name: "block_proven_events_processed_ops_total", Help: "The total number of processed BlockProven events", diff --git a/packages/eventindexer/repo/chart.go b/packages/eventindexer/repo/chart.go index 590ed4e92f5..2e91afa45cb 100644 --- a/packages/eventindexer/repo/chart.go +++ b/packages/eventindexer/repo/chart.go @@ -30,9 +30,11 @@ func (r *ChartRepository) Find( task string, start string, end string, + feeTokenAddress string, ) (*eventindexer.ChartResponse, error) { q := `SELECT * FROM time_series_data WHERE task = ? AND date BETWEEN ? AND ? + AND fee_token_address = "" ORDER BY date;` var tsd []*eventindexer.TimeSeriesData diff --git a/packages/eventindexer/repo/chart_test.go b/packages/eventindexer/repo/chart_test.go index a8dfadd73f0..6a1bdcfa1a2 100644 --- a/packages/eventindexer/repo/chart_test.go +++ b/packages/eventindexer/repo/chart_test.go @@ -60,6 +60,7 @@ func Test_Integration_FindChart(t *testing.T) { "test", "2023-09-08", "2023-09-09", + "0x01", ) assert.Equal(t, nil, err) assert.Equal(t, 0, len(chart.Chart)) diff --git a/packages/eventindexer/repo/event.go b/packages/eventindexer/repo/event.go index 45776bffc98..64d0b609177 100644 --- a/packages/eventindexer/repo/event.go +++ b/packages/eventindexer/repo/event.go @@ -99,6 +99,10 @@ func (r *EventRepository) Save(ctx context.Context, opts eventindexer.SaveEventO e.ContractAddress = *opts.ContractAddress } + if opts.FeeTokenAddress != nil { + e.FeeTokenAddress = *opts.FeeTokenAddress + } + if err := r.db.GormDB().Create(e).Error; err != nil { return nil, errors.Wrap(err, "r.db.Create") } diff --git a/packages/eventindexer/repo/stat.go b/packages/eventindexer/repo/stat.go index 82a5efd31b4..5742c72e1c8 100644 --- a/packages/eventindexer/repo/stat.go +++ b/packages/eventindexer/repo/stat.go @@ -24,28 +24,32 @@ func NewStatRepository(db eventindexer.DB) (*StatRepository, error) { func (r *StatRepository) Save(ctx context.Context, opts eventindexer.SaveStatOpts) (*eventindexer.Stat, error) { s := &eventindexer.Stat{} - if err := r.db. - GormDB(). + q := r.db. + GormDB().Where("stat_type = ?", opts.StatType) + + if opts.FeeTokenAddress != nil { + q.Where("fee_token_address = ?", *opts.FeeTokenAddress) + } + + if err := q. FirstOrCreate(s). Error; err != nil { return nil, errors.Wrap(err, "r.db.gormDB.FirstOrCreate") } - if opts.ProofReward != nil { - s.NumVerifiedBlocks++ + if opts.StatType == eventindexer.StatTypeProofReward && opts.ProofReward != nil { + s.NumBlocksAssigned++ + s.FeeTokenAddress = *opts.FeeTokenAddress + s.StatType = opts.StatType s.AverageProofReward = opts.ProofReward.String() } - if opts.ProofTime != nil { + if opts.StatType == eventindexer.StatTypeProofTime && opts.ProofTime != nil { s.NumProofs++ + s.StatType = opts.StatType s.AverageProofTime = opts.ProofTime.String() } - if opts.ProposerReward != nil { - s.NumProposerRewards++ - s.AverageProposerReward = opts.ProposerReward.String() - } - if err := r.db.GormDB().Save(s).Error; err != nil { return nil, errors.Wrap(err, "r.db.Save") } @@ -53,27 +57,62 @@ func (r *StatRepository) Save(ctx context.Context, opts eventindexer.SaveStatOpt return s, nil } -func (r *StatRepository) Find(ctx context.Context) (*eventindexer.Stat, error) { +// FindAll finds each type of unique stat and merges them together +func (r *StatRepository) FindAll( + ctx context.Context, +) ([]*eventindexer.Stat, error) { + // first find all unique proof reward stats by fee token address + var proofRewardStats []*eventindexer.Stat + + err := r.db. + GormDB().Where("stat_type = ?", eventindexer.StatTypeProofReward). + Scan(&proofRewardStats). + Error + if err != nil { + return nil, err + } + + // then find the average proof time stats + var proofTimeStat *eventindexer.Stat + + err = r.db. + GormDB().Where("stat_type = ?", eventindexer.StatTypeProofTime). + Scan(&proofTimeStat). + Error + if err != nil { + return nil, err + } + + return append(proofRewardStats, proofTimeStat), nil +} + +func (r *StatRepository) Find( + ctx context.Context, + statType string, + feeTokenAddress *string, +) (*eventindexer.Stat, error) { s := &eventindexer.Stat{} - if err := r.db. - GormDB(). + q := r.db. + GormDB().Where("stat_type = ?", statType) + + if feeTokenAddress != nil { + q.Where("fee_token_address = ?", *feeTokenAddress) + } + + if err := q. FirstOrCreate(s). Error; err != nil { return nil, errors.Wrap(err, "r.db.gormDB.FirstOrCreate") } - if s.AverageProofReward == "" { + if statType == eventindexer.StatTypeProofReward && s.AverageProofReward == "" { s.AverageProofReward = "0" } - if s.AverageProofTime == "" { + if statType == eventindexer.StatTypeProofTime && s.AverageProofTime == "" { s.AverageProofTime = "0" } - if s.AverageProposerReward == "" { - s.AverageProposerReward = "0" - } - return s, nil } diff --git a/packages/eventindexer/repo/stat_test.go b/packages/eventindexer/repo/stat_test.go index 37abb5b81cf..f07c36115ca 100644 --- a/packages/eventindexer/repo/stat_test.go +++ b/packages/eventindexer/repo/stat_test.go @@ -20,6 +20,8 @@ func TestIntegration_Stat_Save(t *testing.T) { var proofReward = big.NewInt(4) + feeTokenAddress := "0x01" + tests := []struct { name string opts eventindexer.SaveStatOpts @@ -28,7 +30,9 @@ func TestIntegration_Stat_Save(t *testing.T) { { "successProofReward", eventindexer.SaveStatOpts{ - ProofReward: proofReward, + ProofReward: proofReward, + StatType: eventindexer.StatTypeProofReward, + FeeTokenAddress: &feeTokenAddress, }, nil, }, @@ -53,32 +57,49 @@ func TestIntegration_Stat_Find(t *testing.T) { var proofReward = big.NewInt(4) - var proposerReward = big.NewInt(7) + var proofTime = big.NewInt(7) - for i := 0; i < 3; i++ { - _, err = statRepo.Save(context.Background(), eventindexer.SaveStatOpts{ - ProofReward: proofReward, - ProposerReward: proposerReward, - }) - } + feeTokenAddress := "0x01" + + _, err = statRepo.Save(context.Background(), eventindexer.SaveStatOpts{ + StatType: eventindexer.StatTypeProofReward, + ProofReward: proofReward, + FeeTokenAddress: &feeTokenAddress, + }) + + assert.Equal(t, nil, err) + + _, err = statRepo.Save(context.Background(), eventindexer.SaveStatOpts{ + StatType: eventindexer.StatTypeProofTime, + ProofTime: proofTime, + }) assert.Equal(t, nil, err) tests := []struct { - name string - wantResp *eventindexer.Stat - wantErr error + name string + statType string + feeTokenAddress string + wantResp *eventindexer.Stat + wantErr error }{ { - "success", + "successStatTypeProofReward", + eventindexer.StatTypeProofReward, + "0x01", + &eventindexer.Stat{ + ID: 1, + AverageProofReward: proofReward.String(), + }, + nil, + }, + { + "successStatTypeProofTime", + eventindexer.StatTypeProofTime, + "", &eventindexer.Stat{ - ID: 1, - AverageProofReward: proofReward.String(), - AverageProofTime: "0", - AverageProposerReward: proposerReward.String(), - NumProposerRewards: 3, - NumProofs: 0, - NumVerifiedBlocks: 3, + ID: 1, + AverageProofTime: proofTime.String(), }, nil, }, @@ -86,10 +107,11 @@ func TestIntegration_Stat_Find(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - resp, err := statRepo.Find(context.Background()) + f := tt.feeTokenAddress + resp, err := statRepo.Find(context.Background(), tt.statType, &f) assert.Equal(t, tt.wantErr, err) - assert.Equal(t, *tt.wantResp, *resp) + assert.Equal(t, tt.wantResp.AverageProofReward, resp.AverageProofReward) }) } } diff --git a/packages/eventindexer/stat.go b/packages/eventindexer/stat.go index 0734ca64def..f5344c5c849 100644 --- a/packages/eventindexer/stat.go +++ b/packages/eventindexer/stat.go @@ -5,28 +5,35 @@ import ( "math/big" ) +var ( + StatTypeProofTime = "proofTime" + StatTypeProofReward = "proofReward" +) + // Event represents a stored EVM event. The fields will be serialized // into the Data field to be unmarshalled into a concrete struct // dependant on the name of the event type Stat struct { - ID int `json:"id"` - AverageProofTime string `json:"averageProofTime"` - AverageProofReward string `json:"averageProofReward"` - AverageProposerReward string `json:"averageProposerReward"` - NumProposerRewards uint64 `json:"numProposerRewards"` - NumProofs uint64 `json:"numProofs"` - NumVerifiedBlocks uint64 `json:"numVerifiedBlocks"` + ID int `json:"id"` + AverageProofTime string `json:"averageProofTime"` + AverageProofReward string `json:"averageProofReward"` + NumProofs uint64 `json:"numProofs"` + NumBlocksAssigned uint64 `json:"numBlocksAssigned"` + FeeTokenAddress string `json:"feeTokenAddress"` + StatType string `json:"statType"` } // SaveStatOpts type SaveStatOpts struct { - ProofTime *big.Int - ProofReward *big.Int - ProposerReward *big.Int + ProofTime *big.Int + ProofReward *big.Int + FeeTokenAddress *string + StatType string } // StatRepository is used to interact with stats in the store type StatRepository interface { Save(ctx context.Context, opts SaveStatOpts) (*Stat, error) - Find(ctx context.Context) (*Stat, error) + Find(ctx context.Context, statType string, feeTokenAddress *string) (*Stat, error) + FindAll(ctx context.Context) ([]*Stat, error) } diff --git a/packages/guardian-prover-health-check/healthchecker/healthchecker.go b/packages/guardian-prover-health-check/healthchecker/healthchecker.go index c27567f8680..68d42ec39a8 100644 --- a/packages/guardian-prover-health-check/healthchecker/healthchecker.go +++ b/packages/guardian-prover-health-check/healthchecker/healthchecker.go @@ -84,17 +84,6 @@ func InitFromConfig(ctx context.Context, h *HealthChecker, cfg *Config) (err err return err } - endpoints := make([]*url.URL, 0) - - for _, v := range cfg.GuardianProverEndpoints { - url, err := url.Parse(v) - if err != nil { - return err - } - - endpoints = append(endpoints, url) - } - ethClient, err := ethclient.Dial(cfg.RPCUrl) if err != nil { return err diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index cf1c67dda45..99963ed0f34 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -14,6 +14,7 @@ import "forge-std/console2.sol"; import "../contracts/L1/TaikoToken.sol"; import "../contracts/L1/TaikoL1.sol"; +import "../contracts/L1/hooks/AssignmentHook.sol"; import "../contracts/L1/provers/GuardianProver.sol"; import "../contracts/L1/verifiers/PseZkVerifier.sol"; import "../contracts/L1/verifiers/SgxVerifier.sol"; @@ -32,10 +33,10 @@ import "../contracts/signal/SignalService.sol"; import "../contracts/common/AddressManager.sol"; import "../contracts/test/erc20/FreeMintERC20.sol"; import "../contracts/test/erc20/MayFailFreeMintERC20.sol"; - /// @title DeployOnL1 /// @notice This script deploys the core Taiko protocol smart contract on L1, /// initializing the rollup. + contract DeployOnL1 is Script { // NOTE: this value must match the constant defined in GuardianProver.sol uint256 public constant NUM_GUARDIANS = 5; @@ -196,6 +197,15 @@ contract DeployOnL1 is Script { // PlonkVerifier deployPlonkVerifiers(pseZkVerifier); + // Assignment Hook + AssignmentHook assignmentHook = new ProxiedAssignmentHook(); + + deployProxy( + "assignment_hook", + address(assignmentHook), + bytes.concat(assignmentHook.init.selector, abi.encode(addressManagerProxy)) + ); + vm.stopBroadcast(); } diff --git a/packages/relayer/ICrossChainSync.json b/packages/relayer/ICrossChainSync.json index 670968d37d7..95981eed4aa 100644 --- a/packages/relayer/ICrossChainSync.json +++ b/packages/relayer/ICrossChainSync.json @@ -5,13 +5,13 @@ { "indexed": true, "internalType": "uint64", - "name": "remoteBlockId", + "name": "syncedInBlock", "type": "uint64" }, { - "indexed": false, + "indexed": true, "internalType": "uint64", - "name": "syncedInBlock", + "name": "blockId", "type": "uint64" }, { diff --git a/packages/relayer/TaikoL1.json b/packages/relayer/TaikoL1.json index fea82990c0a..643312b5522 100644 --- a/packages/relayer/TaikoL1.json +++ b/packages/relayer/TaikoL1.json @@ -39,46 +39,6 @@ "name": "L1_ASSIGNED_PROVER_NOT_ALLOWED", "type": "error" }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_EXPIRED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_EXPIRED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INSUFFICIENT_FEE", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INSUFFICIENT_FEE", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_PARAMS", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_PARAMS", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_SIG", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ASSIGNMENT_INVALID_SIG", - "type": "error" - }, { "inputs": [], "name": "L1_BLOB_FOR_DA_DISABLED", @@ -194,6 +154,16 @@ "name": "L1_INVALID_PROOF", "type": "error" }, + { + "inputs": [], + "name": "L1_INVALID_PROVER", + "type": "error" + }, + { + "inputs": [], + "name": "L1_INVALID_PROVER", + "type": "error" + }, { "inputs": [], "name": "L1_INVALID_TIER", @@ -216,7 +186,12 @@ }, { "inputs": [], - "name": "L1_NOT_ASSIGNED_PROVER", + "name": "L1_LIVENESS_BOND_NOT_RECEIVED", + "type": "error" + }, + { + "inputs": [], + "name": "L1_LIVENESS_BOND_NOT_RECEIVED", "type": "error" }, { @@ -226,7 +201,7 @@ }, { "inputs": [], - "name": "L1_PROPOSER_NOT_EOA", + "name": "L1_NOT_ASSIGNED_PROVER", "type": "error" }, { @@ -236,17 +211,17 @@ }, { "inputs": [], - "name": "L1_PROVING_PAUSED", + "name": "L1_PROPOSER_NOT_EOA", "type": "error" }, { "inputs": [], - "name": "L1_TIER_NOT_FOUND", + "name": "L1_PROVING_PAUSED", "type": "error" }, { "inputs": [], - "name": "L1_TIER_NOT_FOUND", + "name": "L1_RECEIVE_DISABLED", "type": "error" }, { @@ -422,12 +397,6 @@ "name": "livenessBond", "type": "uint96" }, - { - "indexed": false, - "internalType": "uint256", - "name": "proverFee", - "type": "uint256" - }, { "components": [ { @@ -559,12 +528,6 @@ "name": "livenessBond", "type": "uint96" }, - { - "indexed": false, - "internalType": "uint256", - "name": "proverFee", - "type": "uint256" - }, { "components": [ { @@ -779,7 +742,13 @@ { "indexed": true, "internalType": "uint64", - "name": "srcHeight", + "name": "syncedInBlock", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "blockId", "type": "uint64" }, { @@ -804,13 +773,13 @@ { "indexed": true, "internalType": "uint64", - "name": "remoteBlockId", + "name": "syncedInBlock", "type": "uint64" }, { - "indexed": false, + "indexed": true, "internalType": "uint64", - "name": "syncedInBlock", + "name": "blockId", "type": "uint64" }, { @@ -968,44 +937,6 @@ "name": "TokenCredited", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenCredited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenDebited", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1352,19 +1283,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "depositTaikoToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2207,19 +2125,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawTaikoToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "stateMutability": "payable", "type": "receive" diff --git a/packages/relayer/bindings/icrosschainsync/ICrossChainSync.go b/packages/relayer/bindings/icrosschainsync/ICrossChainSync.go index 7ae4a8cdf99..e1e12a79531 100644 --- a/packages/relayer/bindings/icrosschainsync/ICrossChainSync.go +++ b/packages/relayer/bindings/icrosschainsync/ICrossChainSync.go @@ -39,7 +39,7 @@ type ICrossChainSyncSnippet struct { // ICrossChainSyncMetaData contains all meta data concerning the ICrossChainSync contract. var ICrossChainSyncMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"snippet\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"snippet\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ICrossChainSyncABI is the input ABI used to generate the binding from. @@ -288,8 +288,8 @@ func (it *ICrossChainSyncCrossChainSyncedIterator) Close() error { // ICrossChainSyncCrossChainSynced represents a CrossChainSynced event raised by the ICrossChainSync contract. type ICrossChainSyncCrossChainSynced struct { - RemoteBlockId uint64 SyncedInBlock uint64 + BlockId uint64 BlockHash [32]byte SignalRoot [32]byte Raw types.Log // Blockchain specific contextual infos @@ -297,15 +297,19 @@ type ICrossChainSyncCrossChainSynced struct { // FilterCrossChainSynced is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_ICrossChainSync *ICrossChainSyncFilterer) FilterCrossChainSynced(opts *bind.FilterOpts, remoteBlockId []uint64) (*ICrossChainSyncCrossChainSyncedIterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_ICrossChainSync *ICrossChainSyncFilterer) FilterCrossChainSynced(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*ICrossChainSyncCrossChainSyncedIterator, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _ICrossChainSync.contract.FilterLogs(opts, "CrossChainSynced", remoteBlockIdRule) + logs, sub, err := _ICrossChainSync.contract.FilterLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -314,15 +318,19 @@ func (_ICrossChainSync *ICrossChainSyncFilterer) FilterCrossChainSynced(opts *bi // WatchCrossChainSynced is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_ICrossChainSync *ICrossChainSyncFilterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *ICrossChainSyncCrossChainSynced, remoteBlockId []uint64) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_ICrossChainSync *ICrossChainSyncFilterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *ICrossChainSyncCrossChainSynced, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _ICrossChainSync.contract.WatchLogs(opts, "CrossChainSynced", remoteBlockIdRule) + logs, sub, err := _ICrossChainSync.contract.WatchLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -356,7 +364,7 @@ func (_ICrossChainSync *ICrossChainSyncFilterer) WatchCrossChainSynced(opts *bin // ParseCrossChainSynced is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) func (_ICrossChainSync *ICrossChainSyncFilterer) ParseCrossChainSynced(log types.Log) (*ICrossChainSyncCrossChainSynced, error) { event := new(ICrossChainSyncCrossChainSynced) if err := _ICrossChainSync.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { diff --git a/packages/relayer/bindings/taikol1/TaikoL1.go b/packages/relayer/bindings/taikol1/TaikoL1.go index 491618fe57c..00a66871680 100644 --- a/packages/relayer/bindings/taikol1/TaikoL1.go +++ b/packages/relayer/bindings/taikol1/TaikoL1.go @@ -146,7 +146,7 @@ type TaikoDataTransitionState struct { // TaikoL1MetaData contains all meta data concerning the TaikoL1 contract. var TaikoL1MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proverFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proverFee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"srcHeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositTaikoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getTaikoTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTaikoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_RECEIVE_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getTaikoTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // TaikoL1ABI is the input ABI used to generate the binding from. @@ -954,27 +954,6 @@ func (_TaikoL1 *TaikoL1TransactorSession) DepositEtherToL2(recipient common.Addr return _TaikoL1.Contract.DepositEtherToL2(&_TaikoL1.TransactOpts, recipient) } -// DepositTaikoToken is a paid mutator transaction binding the contract method 0x98f39aba. -// -// Solidity: function depositTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Transactor) DepositTaikoToken(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.contract.Transact(opts, "depositTaikoToken", amount) -} - -// DepositTaikoToken is a paid mutator transaction binding the contract method 0x98f39aba. -// -// Solidity: function depositTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Session) DepositTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.DepositTaikoToken(&_TaikoL1.TransactOpts, amount) -} - -// DepositTaikoToken is a paid mutator transaction binding the contract method 0x98f39aba. -// -// Solidity: function depositTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1TransactorSession) DepositTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.DepositTaikoToken(&_TaikoL1.TransactOpts, amount) -} - // Init is a paid mutator transaction binding the contract method 0x2cc0b254. // // Solidity: function init(address _addressManager, bytes32 _genesisBlockHash) returns() @@ -1164,27 +1143,6 @@ func (_TaikoL1 *TaikoL1TransactorSession) VerifyBlocks(maxBlocksToVerify uint64) return _TaikoL1.Contract.VerifyBlocks(&_TaikoL1.TransactOpts, maxBlocksToVerify) } -// WithdrawTaikoToken is a paid mutator transaction binding the contract method 0x5043f059. -// -// Solidity: function withdrawTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Transactor) WithdrawTaikoToken(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.contract.Transact(opts, "withdrawTaikoToken", amount) -} - -// WithdrawTaikoToken is a paid mutator transaction binding the contract method 0x5043f059. -// -// Solidity: function withdrawTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1Session) WithdrawTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.WithdrawTaikoToken(&_TaikoL1.TransactOpts, amount) -} - -// WithdrawTaikoToken is a paid mutator transaction binding the contract method 0x5043f059. -// -// Solidity: function withdrawTaikoToken(uint256 amount) returns() -func (_TaikoL1 *TaikoL1TransactorSession) WithdrawTaikoToken(amount *big.Int) (*types.Transaction, error) { - return _TaikoL1.Contract.WithdrawTaikoToken(&_TaikoL1.TransactOpts, amount) -} - // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -1546,15 +1504,14 @@ type TaikoL1BlockProposed struct { BlockId *big.Int AssignedProver common.Address LivenessBond *big.Int - ProverFee *big.Int Meta TaikoDataBlockMetadata DepositsProcessed []TaikoDataEthDeposit Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed is a free log retrieval operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// FilterBlockProposed is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposedIterator, error) { var blockIdRule []interface{} @@ -1573,9 +1530,9 @@ func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, bloc return &TaikoL1BlockProposedIterator{contract: _TaikoL1.contract, event: "BlockProposed", logs: logs, sub: sub}, nil } -// WatchBlockProposed is a free log subscription operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// WatchBlockProposed is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { var blockIdRule []interface{} @@ -1619,9 +1576,9 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink c }), nil } -// ParseBlockProposed is a log parse operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// ParseBlockProposed is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed(log types.Log) (*TaikoL1BlockProposed, error) { event := new(TaikoL1BlockProposed) if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { @@ -1703,15 +1660,14 @@ type TaikoL1BlockProposed0 struct { BlockId *big.Int AssignedProver common.Address LivenessBond *big.Int - ProverFee *big.Int Meta TaikoDataBlockMetadata DepositsProcessed []TaikoDataEthDeposit Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed0 is a free log retrieval operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// FilterBlockProposed0 is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposed0Iterator, error) { var blockIdRule []interface{} @@ -1730,9 +1686,9 @@ func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blo return &TaikoL1BlockProposed0Iterator{contract: _TaikoL1.contract, event: "BlockProposed0", logs: logs, sub: sub}, nil } -// WatchBlockProposed0 is a free log subscription operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// WatchBlockProposed0 is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed0, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { var blockIdRule []interface{} @@ -1776,9 +1732,9 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink }), nil } -// ParseBlockProposed0 is a log parse operation binding the contract event 0x16b70ac93964250a116fa6c730a771b24c7a0546bf6e6a5dcf120bd37348237f. +// ParseBlockProposed0 is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, uint256 proverFee, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) +// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed0(log types.Log) (*TaikoL1BlockProposed0, error) { event := new(TaikoL1BlockProposed0) if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed0", log); err != nil { @@ -2189,40 +2145,49 @@ func (it *TaikoL1CrossChainSyncedIterator) Close() error { // TaikoL1CrossChainSynced represents a CrossChainSynced event raised by the TaikoL1 contract. type TaikoL1CrossChainSynced struct { - SrcHeight uint64 - BlockHash [32]byte - SignalRoot [32]byte - Raw types.Log // Blockchain specific contextual infos + SyncedInBlock uint64 + BlockId uint64 + BlockHash [32]byte + SignalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterCrossChainSynced is a free log retrieval operation binding the contract event 0x004ce985b8852a486571d0545799251fd671adcf33b7854a5f0f6a6a2431a555. +// FilterCrossChainSynced is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed srcHeight, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, srcHeight []uint64) (*TaikoL1CrossChainSyncedIterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL1CrossChainSyncedIterator, error) { - var srcHeightRule []interface{} - for _, srcHeightItem := range srcHeight { - srcHeightRule = append(srcHeightRule, srcHeightItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced", srcHeightRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } return &TaikoL1CrossChainSyncedIterator{contract: _TaikoL1.contract, event: "CrossChainSynced", logs: logs, sub: sub}, nil } -// WatchCrossChainSynced is a free log subscription operation binding the contract event 0x004ce985b8852a486571d0545799251fd671adcf33b7854a5f0f6a6a2431a555. +// WatchCrossChainSynced is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed srcHeight, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced, srcHeight []uint64) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - var srcHeightRule []interface{} - for _, srcHeightItem := range srcHeight { - srcHeightRule = append(srcHeightRule, srcHeightItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced", srcHeightRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -2254,9 +2219,9 @@ func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sin }), nil } -// ParseCrossChainSynced is a log parse operation binding the contract event 0x004ce985b8852a486571d0545799251fd671adcf33b7854a5f0f6a6a2431a555. +// ParseCrossChainSynced is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed srcHeight, bytes32 blockHash, bytes32 signalRoot) +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) func (_TaikoL1 *TaikoL1Filterer) ParseCrossChainSynced(log types.Log) (*TaikoL1CrossChainSynced, error) { event := new(TaikoL1CrossChainSynced) if err := _TaikoL1.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { @@ -2335,8 +2300,8 @@ func (it *TaikoL1CrossChainSynced0Iterator) Close() error { // TaikoL1CrossChainSynced0 represents a CrossChainSynced0 event raised by the TaikoL1 contract. type TaikoL1CrossChainSynced0 struct { - RemoteBlockId uint64 SyncedInBlock uint64 + BlockId uint64 BlockHash [32]byte SignalRoot [32]byte Raw types.Log // Blockchain specific contextual infos @@ -2344,15 +2309,19 @@ type TaikoL1CrossChainSynced0 struct { // FilterCrossChainSynced0 is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced0(opts *bind.FilterOpts, remoteBlockId []uint64) (*TaikoL1CrossChainSynced0Iterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced0(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL1CrossChainSynced0Iterator, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced0", remoteBlockIdRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "CrossChainSynced0", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -2361,15 +2330,19 @@ func (_TaikoL1 *TaikoL1Filterer) FilterCrossChainSynced0(opts *bind.FilterOpts, // WatchCrossChainSynced0 is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced0(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced0, remoteBlockId []uint64) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced0(opts *bind.WatchOpts, sink chan<- *TaikoL1CrossChainSynced0, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced0", remoteBlockIdRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "CrossChainSynced0", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -2403,7 +2376,7 @@ func (_TaikoL1 *TaikoL1Filterer) WatchCrossChainSynced0(opts *bind.WatchOpts, si // ParseCrossChainSynced0 is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) func (_TaikoL1 *TaikoL1Filterer) ParseCrossChainSynced0(log types.Log) (*TaikoL1CrossChainSynced0, error) { event := new(TaikoL1CrossChainSynced0) if err := _TaikoL1.contract.UnpackLog(event, "CrossChainSynced0", log); err != nil { @@ -3524,141 +3497,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTokenCredited(log types.Log) (*TaikoL1Toke return event, nil } -// TaikoL1TokenCredited0Iterator is returned from FilterTokenCredited0 and is used to iterate over the raw logs and unpacked data for TokenCredited0 events raised by the TaikoL1 contract. -type TaikoL1TokenCredited0Iterator struct { - Event *TaikoL1TokenCredited0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1TokenCredited0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenCredited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenCredited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TokenCredited0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1TokenCredited0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1TokenCredited0 represents a TokenCredited0 event raised by the TaikoL1 contract. -type TaikoL1TokenCredited0 struct { - To common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTokenCredited0 is a free log retrieval operation binding the contract event 0xcc91b0b567e69e32d26830c50d1078f0baec319d458fa847f2633c1c2f71dd74. -// -// Solidity: event TokenCredited(address to, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) FilterTokenCredited0(opts *bind.FilterOpts) (*TaikoL1TokenCredited0Iterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TokenCredited0") - if err != nil { - return nil, err - } - return &TaikoL1TokenCredited0Iterator{contract: _TaikoL1.contract, event: "TokenCredited0", logs: logs, sub: sub}, nil -} - -// WatchTokenCredited0 is a free log subscription operation binding the contract event 0xcc91b0b567e69e32d26830c50d1078f0baec319d458fa847f2633c1c2f71dd74. -// -// Solidity: event TokenCredited(address to, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) WatchTokenCredited0(opts *bind.WatchOpts, sink chan<- *TaikoL1TokenCredited0) (event.Subscription, error) { - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TokenCredited0") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1TokenCredited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenCredited0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTokenCredited0 is a log parse operation binding the contract event 0xcc91b0b567e69e32d26830c50d1078f0baec319d458fa847f2633c1c2f71dd74. -// -// Solidity: event TokenCredited(address to, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) ParseTokenCredited0(log types.Log) (*TaikoL1TokenCredited0, error) { - event := new(TaikoL1TokenCredited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenCredited0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TokenDebitedIterator is returned from FilterTokenDebited and is used to iterate over the raw logs and unpacked data for TokenDebited events raised by the TaikoL1 contract. type TaikoL1TokenDebitedIterator struct { Event *TaikoL1TokenDebited // Event containing the contract specifics and raw log @@ -3794,141 +3632,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTokenDebited(log types.Log) (*TaikoL1Token return event, nil } -// TaikoL1TokenDebited0Iterator is returned from FilterTokenDebited0 and is used to iterate over the raw logs and unpacked data for TokenDebited0 events raised by the TaikoL1 contract. -type TaikoL1TokenDebited0Iterator struct { - Event *TaikoL1TokenDebited0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1TokenDebited0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenDebited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1TokenDebited0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TokenDebited0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1TokenDebited0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1TokenDebited0 represents a TokenDebited0 event raised by the TaikoL1 contract. -type TaikoL1TokenDebited0 struct { - From common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTokenDebited0 is a free log retrieval operation binding the contract event 0x9414c932608e522aea77e1b5fd1cdb441e5d57daf49d9a9a0b7409ef8d9e0070. -// -// Solidity: event TokenDebited(address from, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) FilterTokenDebited0(opts *bind.FilterOpts) (*TaikoL1TokenDebited0Iterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TokenDebited0") - if err != nil { - return nil, err - } - return &TaikoL1TokenDebited0Iterator{contract: _TaikoL1.contract, event: "TokenDebited0", logs: logs, sub: sub}, nil -} - -// WatchTokenDebited0 is a free log subscription operation binding the contract event 0x9414c932608e522aea77e1b5fd1cdb441e5d57daf49d9a9a0b7409ef8d9e0070. -// -// Solidity: event TokenDebited(address from, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) WatchTokenDebited0(opts *bind.WatchOpts, sink chan<- *TaikoL1TokenDebited0) (event.Subscription, error) { - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TokenDebited0") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1TokenDebited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenDebited0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTokenDebited0 is a log parse operation binding the contract event 0x9414c932608e522aea77e1b5fd1cdb441e5d57daf49d9a9a0b7409ef8d9e0070. -// -// Solidity: event TokenDebited(address from, uint256 amount) -func (_TaikoL1 *TaikoL1Filterer) ParseTokenDebited0(log types.Log) (*TaikoL1TokenDebited0, error) { - event := new(TaikoL1TokenDebited0) - if err := _TaikoL1.contract.UnpackLog(event, "TokenDebited0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TokenDepositedIterator is returned from FilterTokenDeposited and is used to iterate over the raw logs and unpacked data for TokenDeposited events raised by the TaikoL1 contract. type TaikoL1TokenDepositedIterator struct { Event *TaikoL1TokenDeposited // Event containing the contract specifics and raw log diff --git a/packages/relayer/bindings/taikol2/TaikoL2.go b/packages/relayer/bindings/taikol2/TaikoL2.go index 41ea5939d57..c42f60def9e 100644 --- a/packages/relayer/bindings/taikol2/TaikoL2.go +++ b/packages/relayer/bindings/taikol2/TaikoL2.go @@ -45,7 +45,7 @@ type TaikoL2Config struct { // TaikoL2MetaData contains all meta data concerning the TaikoL2 contract. var TaikoL2MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"EIP1559_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_BASEFEE_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_GOLDEN_TOUCH_K\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_SENDER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_PUBLIC_INPUT_HASH_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_TOO_LATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Overflow\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasExcess\",\"type\":\"uint64\"}],\"name\":\"Anchored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_PRIVATEKEY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l1SignalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"anchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasExcess\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"getBasefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"basefee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasTargetPerL1Block\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"basefeeAdjustmentQuotient\",\"type\":\"uint8\"}],\"internalType\":\"structTaikoL2.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signalService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_gasExcess\",\"type\":\"uint64\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"}],\"name\":\"l2Hashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestSyncedL1Height\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"k\",\"type\":\"uint8\"}],\"name\":\"signAnchor\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signalService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipFeeCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l1height\",\"type\":\"uint256\"}],\"name\":\"snippets\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"EIP1559_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_BASEFEE_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_GOLDEN_TOUCH_K\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_SENDER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_PUBLIC_INPUT_HASH_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_TOO_LATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Overflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasExcess\",\"type\":\"uint64\"}],\"name\":\"Anchored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_PRIVATEKEY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l1SignalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"anchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasExcess\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"getBasefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"basefee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasTargetPerL1Block\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"basefeeAdjustmentQuotient\",\"type\":\"uint8\"}],\"internalType\":\"structTaikoL2.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signalService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_gasExcess\",\"type\":\"uint64\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"}],\"name\":\"l2Hashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestSyncedL1Height\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"k\",\"type\":\"uint8\"}],\"name\":\"signAnchor\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signalService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipFeeCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l1height\",\"type\":\"uint256\"}],\"name\":\"snippets\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // TaikoL2ABI is the input ABI used to generate the binding from. @@ -256,6 +256,37 @@ func (_TaikoL2 *TaikoL2CallerSession) GOLDENTOUCHPRIVATEKEY() (*big.Int, error) return _TaikoL2.Contract.GOLDENTOUCHPRIVATEKEY(&_TaikoL2.CallOpts) } +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_TaikoL2 *TaikoL2Caller) AddressManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TaikoL2.contract.Call(opts, &out, "addressManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_TaikoL2 *TaikoL2Session) AddressManager() (common.Address, error) { + return _TaikoL2.Contract.AddressManager(&_TaikoL2.CallOpts) +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_TaikoL2 *TaikoL2CallerSession) AddressManager() (common.Address, error) { + return _TaikoL2.Contract.AddressManager(&_TaikoL2.CallOpts) +} + // GasExcess is a free data retrieval call binding the contract method 0xf535bd56. // // Solidity: function gasExcess() view returns(uint64) @@ -504,6 +535,37 @@ func (_TaikoL2 *TaikoL2CallerSession) Owner() (common.Address, error) { return _TaikoL2.Contract.Owner(&_TaikoL2.CallOpts) } +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_TaikoL2 *TaikoL2Caller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _TaikoL2.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_TaikoL2 *TaikoL2Session) Paused() (bool, error) { + return _TaikoL2.Contract.Paused(&_TaikoL2.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_TaikoL2 *TaikoL2CallerSession) Paused() (bool, error) { + return _TaikoL2.Contract.Paused(&_TaikoL2.CallOpts) +} + // PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. // // Solidity: function pendingOwner() view returns(address) @@ -566,6 +628,68 @@ func (_TaikoL2 *TaikoL2CallerSession) PublicInputHash() ([32]byte, error) { return _TaikoL2.Contract.PublicInputHash(&_TaikoL2.CallOpts) } +// Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. +// +// Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_TaikoL2 *TaikoL2Caller) Resolve(opts *bind.CallOpts, chainId uint64, name [32]byte, allowZeroAddress bool) (common.Address, error) { + var out []interface{} + err := _TaikoL2.contract.Call(opts, &out, "resolve", chainId, name, allowZeroAddress) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. +// +// Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_TaikoL2 *TaikoL2Session) Resolve(chainId uint64, name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _TaikoL2.Contract.Resolve(&_TaikoL2.CallOpts, chainId, name, allowZeroAddress) +} + +// Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. +// +// Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_TaikoL2 *TaikoL2CallerSession) Resolve(chainId uint64, name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _TaikoL2.Contract.Resolve(&_TaikoL2.CallOpts, chainId, name, allowZeroAddress) +} + +// Resolve0 is a free data retrieval call binding the contract method 0xa86f9d9e. +// +// Solidity: function resolve(bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_TaikoL2 *TaikoL2Caller) Resolve0(opts *bind.CallOpts, name [32]byte, allowZeroAddress bool) (common.Address, error) { + var out []interface{} + err := _TaikoL2.contract.Call(opts, &out, "resolve0", name, allowZeroAddress) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Resolve0 is a free data retrieval call binding the contract method 0xa86f9d9e. +// +// Solidity: function resolve(bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_TaikoL2 *TaikoL2Session) Resolve0(name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _TaikoL2.Contract.Resolve0(&_TaikoL2.CallOpts, name, allowZeroAddress) +} + +// Resolve0 is a free data retrieval call binding the contract method 0xa86f9d9e. +// +// Solidity: function resolve(bytes32 name, bool allowZeroAddress) view returns(address addr) +func (_TaikoL2 *TaikoL2CallerSession) Resolve0(name [32]byte, allowZeroAddress bool) (common.Address, error) { + return _TaikoL2.Contract.Resolve0(&_TaikoL2.CallOpts, name, allowZeroAddress) +} + // SignAnchor is a free data retrieval call binding the contract method 0x591aad8a. // // Solidity: function signAnchor(bytes32 digest, uint8 k) view returns(uint8 v, uint256 r, uint256 s) @@ -796,6 +920,27 @@ func (_TaikoL2 *TaikoL2TransactorSession) Init(_signalService common.Address, _g return _TaikoL2.Contract.Init(&_TaikoL2.TransactOpts, _signalService, _gasExcess) } +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_TaikoL2 *TaikoL2Transactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TaikoL2.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_TaikoL2 *TaikoL2Session) Pause() (*types.Transaction, error) { + return _TaikoL2.Contract.Pause(&_TaikoL2.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_TaikoL2 *TaikoL2TransactorSession) Pause() (*types.Transaction, error) { + return _TaikoL2.Contract.Pause(&_TaikoL2.TransactOpts) +} + // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() @@ -838,6 +983,27 @@ func (_TaikoL2 *TaikoL2TransactorSession) TransferOwnership(newOwner common.Addr return _TaikoL2.Contract.TransferOwnership(&_TaikoL2.TransactOpts, newOwner) } +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_TaikoL2 *TaikoL2Transactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TaikoL2.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_TaikoL2 *TaikoL2Session) Unpause() (*types.Transaction, error) { + return _TaikoL2.Contract.Unpause(&_TaikoL2.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_TaikoL2 *TaikoL2TransactorSession) Unpause() (*types.Transaction, error) { + return _TaikoL2.Contract.Unpause(&_TaikoL2.TransactOpts) +} + // TaikoL2AnchoredIterator is returned from FilterAnchored and is used to iterate over the raw logs and unpacked data for Anchored events raised by the TaikoL2 contract. type TaikoL2AnchoredIterator struct { Event *TaikoL2Anchored // Event containing the contract specifics and raw log @@ -1042,8 +1208,8 @@ func (it *TaikoL2CrossChainSyncedIterator) Close() error { // TaikoL2CrossChainSynced represents a CrossChainSynced event raised by the TaikoL2 contract. type TaikoL2CrossChainSynced struct { - RemoteBlockId uint64 SyncedInBlock uint64 + BlockId uint64 BlockHash [32]byte SignalRoot [32]byte Raw types.Log // Blockchain specific contextual infos @@ -1051,15 +1217,19 @@ type TaikoL2CrossChainSynced struct { // FilterCrossChainSynced is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL2 *TaikoL2Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, remoteBlockId []uint64) (*TaikoL2CrossChainSyncedIterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL2 *TaikoL2Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL2CrossChainSyncedIterator, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "CrossChainSynced", remoteBlockIdRule) + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -1068,15 +1238,19 @@ func (_TaikoL2 *TaikoL2Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, r // WatchCrossChainSynced is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL2CrossChainSynced, remoteBlockId []uint64) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL2CrossChainSynced, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - var remoteBlockIdRule []interface{} - for _, remoteBlockIdItem := range remoteBlockId { - remoteBlockIdRule = append(remoteBlockIdRule, remoteBlockIdItem) + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) } - logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "CrossChainSynced", remoteBlockIdRule) + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -1110,7 +1284,7 @@ func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sin // ParseCrossChainSynced is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event CrossChainSynced(uint64 indexed remoteBlockId, uint64 syncedInBlock, bytes32 blockHash, bytes32 signalRoot) +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) func (_TaikoL2 *TaikoL2Filterer) ParseCrossChainSynced(log types.Log) (*TaikoL2CrossChainSynced, error) { event := new(TaikoL2CrossChainSynced) if err := _TaikoL2.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { @@ -1559,3 +1733,271 @@ func (_TaikoL2 *TaikoL2Filterer) ParseOwnershipTransferred(log types.Log) (*Taik event.Raw = log return event, nil } + +// TaikoL2PausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the TaikoL2 contract. +type TaikoL2PausedIterator struct { + Event *TaikoL2Paused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TaikoL2PausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TaikoL2Paused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TaikoL2Paused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TaikoL2PausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TaikoL2PausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TaikoL2Paused represents a Paused event raised by the TaikoL2 contract. +type TaikoL2Paused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_TaikoL2 *TaikoL2Filterer) FilterPaused(opts *bind.FilterOpts) (*TaikoL2PausedIterator, error) { + + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &TaikoL2PausedIterator{contract: _TaikoL2.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_TaikoL2 *TaikoL2Filterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *TaikoL2Paused) (event.Subscription, error) { + + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TaikoL2Paused) + if err := _TaikoL2.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_TaikoL2 *TaikoL2Filterer) ParsePaused(log types.Log) (*TaikoL2Paused, error) { + event := new(TaikoL2Paused) + if err := _TaikoL2.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TaikoL2UnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the TaikoL2 contract. +type TaikoL2UnpausedIterator struct { + Event *TaikoL2Unpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TaikoL2UnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TaikoL2Unpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TaikoL2Unpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TaikoL2UnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TaikoL2UnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TaikoL2Unpaused represents a Unpaused event raised by the TaikoL2 contract. +type TaikoL2Unpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_TaikoL2 *TaikoL2Filterer) FilterUnpaused(opts *bind.FilterOpts) (*TaikoL2UnpausedIterator, error) { + + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &TaikoL2UnpausedIterator{contract: _TaikoL2.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_TaikoL2 *TaikoL2Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *TaikoL2Unpaused) (event.Subscription, error) { + + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TaikoL2Unpaused) + if err := _TaikoL2.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_TaikoL2 *TaikoL2Filterer) ParseUnpaused(log types.Log) (*TaikoL2Unpaused, error) { + event := new(TaikoL2Unpaused) + if err := _TaikoL2.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} From af09d5beee2cf7989d407a51549190257ba902b3 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Mon, 27 Nov 2023 22:42:20 +0800 Subject: [PATCH 03/17] fix(protocol): fix a bug in ERC20Vault (#15272) --- packages/protocol/contracts/tokenvault/ERC20Vault.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/tokenvault/ERC20Vault.sol index e4db98439a1..5d6a6e1cdef 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC20Vault.sol @@ -190,7 +190,7 @@ contract ERC20Vault is BaseVault { if (amount > 0) { if (bridgedToCanonical[token].addr != address(0)) { - IMintableERC20(token).burn(address(this), amount); + IMintableERC20(token).mint(message.owner, amount); } else { ERC20Upgradeable(token).safeTransfer(message.owner, amount); } From 7b5a60fa85e110a989865897d1528b7dd4f1e67a Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:38:51 +0800 Subject: [PATCH 04/17] fix(protocol): use ERC1967Proxy (#15247) Co-authored-by: Daniel Wang Co-authored-by: jeff <113397187+cyberhorsey@users.noreply.github.com> Co-authored-by: David Co-authored-by: D <51912515+adaki2004@users.noreply.github.com> --- packages/protocol/contracts/L1/TaikoData.sol | 8 +- packages/protocol/contracts/L1/TaikoL1.sol | 13 +- packages/protocol/contracts/L1/TaikoToken.sol | 14 +- .../contracts/L1/gov/TaikoGovernor.sol | 64 +- .../L1/gov/TaikoTimelockController.sol | 26 + .../contracts/L1/hooks/AssignmentHook.sol | 15 +- .../contracts/L1/libs/LibDepositing.sol | 1 - .../contracts/L1/libs/LibProposing.sol | 6 +- .../protocol/contracts/L1/libs/LibProving.sol | 20 +- .../protocol/contracts/L1/libs/LibUtils.sol | 2 +- .../contracts/L1/libs/LibVerifying.sol | 4 +- .../contracts/L1/provers/GuardianProver.sol | 6 +- .../L1/tiers/TaikoA6TierProvider.sol | 8 +- .../L1/verifiers/GuardianVerifier.sol | 6 +- .../contracts/L1/verifiers/PseZkVerifier.sol | 6 +- .../L1/verifiers/SgxAndZkVerifier.sol | 6 +- .../contracts/L1/verifiers/SgxVerifier.sol | 15 +- packages/protocol/contracts/L2/TaikoL2.sol | 11 +- .../L2/TaikoL2EIP1559Configurable.sol | 4 - packages/protocol/contracts/bridge/Bridge.sol | 10 +- .../contracts/common/AddressManager.sol | 16 +- .../contracts/common/AddressResolver.sol | 3 +- .../contracts/common/AuthorizableContract.sol | 8 - .../contracts/common/EssentialContract.sol | 83 +-- .../contracts/common/OwnerUUPSUpgradable.sol | 79 +++ .../protocol/contracts/libs/LibAddress.sol | 12 +- .../protocol/contracts/libs/LibDeploy.sol | 32 + .../contracts/libs/LibDeployHelper.sol | 78 +++ .../contracts/signal/SignalService.sol | 11 +- .../contracts/team/TimeLockTokenPool.sol | 19 +- .../contracts/team/airdrop/ERC20Airdrop.sol | 40 ++ .../contracts/team/airdrop/ERC20Airdrop2.sol | 102 +++ .../contracts/team/airdrop/ERC721Airdrop.sol | 42 ++ .../team/airdrop/MerkleClaimable.sol | 81 +++ .../contracts/tokenvault/BaseVault.sol | 3 +- .../contracts/tokenvault/BridgedERC1155.sol | 6 +- .../contracts/tokenvault/BridgedERC20.sol | 10 +- .../contracts/tokenvault/BridgedERC721.sol | 6 +- .../contracts/tokenvault/ERC1155Vault.sol | 27 +- .../contracts/tokenvault/ERC20Vault.sol | 30 +- .../contracts/tokenvault/ERC721Vault.sol | 20 +- packages/protocol/foundry.toml | 3 +- .../protocol/genesis/GenerateGenesis.g.sol | 328 ++++----- packages/protocol/genesis/test_config.js | 55 +- packages/protocol/package.json | 7 +- .../AuthorizeRemoteTaikoProtocols.s.sol | 4 +- packages/protocol/script/DeployOnL1.s.sol | 621 ++++++++++-------- packages/protocol/script/SetAddress.s.sol | 6 +- .../script/SetRemoteBridgeSuites.s.sol | 43 +- packages/protocol/script/test_deploy_on_l1.sh | 9 +- .../script/upgrade/TransferOwnership.s.sol | 34 - .../upgrade/UpgradeAddressManager.s.sol | 20 - .../script/upgrade/UpgradeBridge.s.sol | 20 - .../script/upgrade/UpgradeERC1155Vault.s.sol | 20 - .../script/upgrade/UpgradeERC20Vault.s.sol | 20 - .../script/upgrade/UpgradeERC721Vault.s.sol | 20 - .../script/upgrade/UpgradeScript.s.sol | 31 - .../script/upgrade/UpgradeSignalService.sol | 20 - .../script/upgrade/UpgradeTaikoL1.s.sol | 20 - .../script/upgrade/UpgradeTaikoL2.s.sol | 20 - .../script/upgrade/UpgradeTaikoToken.s.sol | 20 - packages/protocol/test/HelperContracts.sol | 56 ++ packages/protocol/test/L1/SgxVerifier.t.sol | 16 +- packages/protocol/test/L1/TaikoL1.t.sol | 25 +- .../test/L1/TaikoL1LibProvingWithTiers.t.sol | 26 +- packages/protocol/test/L1/TaikoL1TestBase.sol | 147 +++-- packages/protocol/test/L1/TaikoToken.t.sol | 77 --- packages/protocol/test/L2/Lib1559Math.t.sol | 6 +- packages/protocol/test/L2/TaikoL2.t.sol | 69 +- packages/protocol/test/TaikoTest.sol | 85 +++ packages/protocol/test/TestBase.sol | 106 --- packages/protocol/test/bridge/Bridge.t.sol | 77 ++- .../test/common/EssentialContract.t.sol | 118 ++++ .../test/libs/LibFixedPointMath.t.sol | 6 +- .../protocol/test/signal/SignalService.t.sol | 71 +- .../test/team/TimeLockTokenPool.t.sol | 21 +- .../test/team/airdrop/MerkleClaimable.t.sol | 248 +++++++ .../test/tokenvault/ERC1155Vault.t.sol | 108 +-- .../protocol/test/tokenvault/ERC20Vault.t.sol | 105 +-- .../test/tokenvault/ERC721Vault.t.sol | 109 +-- .../airdrop/airdrop_db/example_claimList.json | 7 + .../protocol/utils/airdrop/buildMerkleTree.ts | 97 +++ .../protocol/utils/generate_genesis/main.ts | 2 +- .../utils/generate_genesis/taikoL2.ts | 395 +++++------ pnpm-lock.yaml | 45 +- 85 files changed, 2429 insertions(+), 1867 deletions(-) create mode 100644 packages/protocol/contracts/L1/gov/TaikoTimelockController.sol create mode 100644 packages/protocol/contracts/common/OwnerUUPSUpgradable.sol create mode 100644 packages/protocol/contracts/libs/LibDeploy.sol create mode 100644 packages/protocol/contracts/libs/LibDeployHelper.sol create mode 100644 packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol create mode 100644 packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol create mode 100644 packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol create mode 100644 packages/protocol/contracts/team/airdrop/MerkleClaimable.sol delete mode 100644 packages/protocol/script/upgrade/TransferOwnership.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeAddressManager.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeBridge.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeScript.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeSignalService.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol create mode 100644 packages/protocol/test/HelperContracts.sol delete mode 100644 packages/protocol/test/L1/TaikoToken.t.sol create mode 100644 packages/protocol/test/TaikoTest.sol delete mode 100644 packages/protocol/test/TestBase.sol create mode 100644 packages/protocol/test/common/EssentialContract.t.sol create mode 100644 packages/protocol/test/team/airdrop/MerkleClaimable.t.sol create mode 100644 packages/protocol/utils/airdrop/airdrop_db/example_claimList.json create mode 100644 packages/protocol/utils/airdrop/buildMerkleTree.ts diff --git a/packages/protocol/contracts/L1/TaikoData.sol b/packages/protocol/contracts/L1/TaikoData.sol index b46ba0553de..5184e261a99 100644 --- a/packages/protocol/contracts/L1/TaikoData.sol +++ b/packages/protocol/contracts/L1/TaikoData.sol @@ -184,12 +184,10 @@ library TaikoData { ) transitions; // Ring buffer for Ether deposits mapping(uint256 depositId_mod_ethDepositRingBufferSize => uint256) ethDeposits; - // In-protocol Taiko token balances - mapping(address account => uint256 balance) tokenBalances; // Reusable blobs mapping(bytes32 blobHash => uint256 since) reusableBlobs; - SlotA slotA; // slot 7 - SlotB slotB; // slot 8 - uint256[142] __gap; + SlotA slotA; // slot 6 + SlotB slotB; // slot 7 + uint256[143] __gap; } } diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index a1db1f116f1..b7021cff04c 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -36,7 +36,7 @@ contract TaikoL1 is EssentialContract, ICrossChainSync, ITierProvider, TaikoEven /// @param _addressManager The {AddressManager} address. /// @param _genesisBlockHash The block hash of the genesis block. function init(address _addressManager, bytes32 _genesisBlockHash) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); LibVerifying.init(state, getConfig(), _genesisBlockHash); } @@ -171,13 +171,6 @@ contract TaikoL1 is EssentialContract, ICrossChainSync, ITierProvider, TaikoEven b = state.slotB; } - /// @notice Gets the in-protocol Taiko token balance for a user - /// @param user The user. - /// @return The user's Taiko token balance. - function getTaikoTokenBalance(address user) public view returns (uint256) { - return state.tokenBalances[user]; - } - /// @notice Retrieves the configuration for a specified tier. /// @param tierId ID of the tier. /// @return Tier struct containing the tier's parameters. This @@ -243,7 +236,3 @@ contract TaikoL1 is EssentialContract, ICrossChainSync, ITierProvider, TaikoEven return LibVerifying.isConfigValid(getConfig()); } } - -/// @title ProxiedTaikoL1 -/// @notice Proxied version of the parent contract. -contract ProxiedTaikoL1 is Proxied, TaikoL1 { } diff --git a/packages/protocol/contracts/L1/TaikoToken.sol b/packages/protocol/contracts/L1/TaikoToken.sol index 92148356dea..a87b49095ee 100644 --- a/packages/protocol/contracts/L1/TaikoToken.sol +++ b/packages/protocol/contracts/L1/TaikoToken.sol @@ -23,12 +23,10 @@ contract TaikoToken is EssentialContract, ERC20SnapshotUpgradeable, ERC20VotesUp error TKO_INVALID_PREMINT_PARAMS(); /// @notice Initializes the TaikoToken contract and mints initial tokens. - /// @param _addressManager The {AddressManager} address. /// @param _name The name of the token. /// @param _symbol The symbol of the token. /// @param _recipient The address to receive initial token minting. function init( - address _addressManager, string calldata _name, string calldata _symbol, address _recipient @@ -36,10 +34,10 @@ contract TaikoToken is EssentialContract, ERC20SnapshotUpgradeable, ERC20VotesUp public initializer { - EssentialContract._init(_addressManager); - ERC20Upgradeable.__ERC20_init(_name, _symbol); - ERC20SnapshotUpgradeable.__ERC20Snapshot_init(); - ERC20VotesUpgradeable.__ERC20Votes_init(); + _Essential_init(); + __ERC20_init(_name, _symbol); + __ERC20Snapshot_init(); + __ERC20Votes_init(); // Mint 1 billion tokens _mint(_recipient, 1_000_000_000 ether); @@ -133,7 +131,3 @@ contract TaikoToken is EssentialContract, ERC20SnapshotUpgradeable, ERC20VotesUp super._burn(from, amount); } } - -/// @title ProxiedTaikoToken -/// @notice Proxied version of the TaikoToken contract. -contract ProxiedTaikoToken is Proxied, TaikoToken { } diff --git a/packages/protocol/contracts/L1/gov/TaikoGovernor.sol b/packages/protocol/contracts/L1/gov/TaikoGovernor.sol index 626ba9a6f38..2426aab59ed 100644 --- a/packages/protocol/contracts/L1/gov/TaikoGovernor.sol +++ b/packages/protocol/contracts/L1/gov/TaikoGovernor.sol @@ -1,29 +1,45 @@ // SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/governance/Governor.sol"; +import "lib/openzeppelin-contracts-upgradeable/contracts/governance/GovernorUpgradeable.sol"; +import + "lib/openzeppelin-contracts-upgradeable/contracts/governance/compatibility/GovernorCompatibilityBravoUpgradeable.sol"; +import + "lib/openzeppelin-contracts-upgradeable/contracts/governance/extensions/GovernorVotesUpgradeable.sol"; +import + "lib/openzeppelin-contracts-upgradeable/contracts/governance/extensions/GovernorVotesQuorumFractionUpgradeable.sol"; import - "lib/openzeppelin-contracts/contracts/governance/compatibility/GovernorCompatibilityBravo.sol"; -import "lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol"; -import "lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; -import "lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol"; + "lib/openzeppelin-contracts-upgradeable/contracts/governance/extensions/GovernorTimelockControlUpgradeable.sol"; +import "../../common/OwnerUUPSUpgradable.sol"; contract TaikoGovernor is - Governor, - GovernorCompatibilityBravo, - GovernorVotes, - GovernorVotesQuorumFraction, - GovernorTimelockControl + OwnerUUPSUpgradable, + GovernorUpgradeable, + GovernorCompatibilityBravoUpgradeable, + GovernorVotesUpgradeable, + GovernorVotesQuorumFractionUpgradeable, + GovernorTimelockControlUpgradeable { - constructor( - IVotes _token, - TimelockController _timelock + uint256[50] private __gap; + + function init( + IVotesUpgradeable _token, + TimelockControllerUpgradeable _timelock ) - Governor("TaikoGovernor") - GovernorVotes(_token) - GovernorVotesQuorumFraction(4) - GovernorTimelockControl(_timelock) - { } + external + initializer + { + _OwnerUUPSUpgradable_init(); + __Governor_init("TaikoGovernor"); + __GovernorVotes_init(_token); + __GovernorVotesQuorumFraction_init(4); + __GovernorTimelockControl_init(_timelock); + } function propose( address[] memory targets, @@ -32,7 +48,7 @@ contract TaikoGovernor is string memory description ) public - override(Governor, IGovernor, GovernorCompatibilityBravo) + override(IGovernorUpgradeable, GovernorUpgradeable, GovernorCompatibilityBravoUpgradeable) returns (uint256) { return super.propose(targets, values, calldatas, description); @@ -41,7 +57,7 @@ contract TaikoGovernor is function supportsInterface(bytes4 interfaceId) public view - override(Governor, IERC165, GovernorTimelockControl) + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable, IERC165Upgradeable) returns (bool) { return super.supportsInterface(interfaceId); @@ -50,7 +66,7 @@ contract TaikoGovernor is function state(uint256 proposalId) public view - override(Governor, IGovernor, GovernorTimelockControl) + override(IGovernorUpgradeable, GovernorUpgradeable, GovernorTimelockControlUpgradeable) returns (ProposalState) { return super.state(proposalId); @@ -80,7 +96,7 @@ contract TaikoGovernor is bytes32 descriptionHash ) internal - override(Governor, GovernorTimelockControl) + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable) { super._execute(proposalId, targets, values, calldatas, descriptionHash); } @@ -92,7 +108,7 @@ contract TaikoGovernor is bytes32 descriptionHash ) internal - override(Governor, GovernorTimelockControl) + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable) returns (uint256) { return super._cancel(targets, values, calldatas, descriptionHash); @@ -101,7 +117,7 @@ contract TaikoGovernor is function _executor() internal view - override(Governor, GovernorTimelockControl) + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable) returns (address) { return super._executor(); diff --git a/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol b/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol new file mode 100644 index 00000000000..7b48d8bbf4b --- /dev/null +++ b/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import + "lib/openzeppelin-contracts-upgradeable/contracts/governance/TimelockControllerUpgradeable.sol"; +import "../../common/OwnerUUPSUpgradable.sol"; + +contract TaikoTimelockController is OwnerUUPSUpgradable, TimelockControllerUpgradeable { + uint256[50] private __gap; + + function init(uint256 minDelay) external initializer { + _OwnerUUPSUpgradable_init(); + address[] memory nil = new address[](0); + __TimelockController_init(minDelay, nil, nil, owner()); + } + + /// @dev Allows the admin to get around of the min delay. + function getMinDelay() public view override returns (uint256) { + return hasRole(TIMELOCK_ADMIN_ROLE, msg.sender) ? 0 : super.getMinDelay(); + } +} diff --git a/packages/protocol/contracts/L1/hooks/AssignmentHook.sol b/packages/protocol/contracts/L1/hooks/AssignmentHook.sol index b3e312c158f..e9e5f53abbd 100644 --- a/packages/protocol/contracts/L1/hooks/AssignmentHook.sol +++ b/packages/protocol/contracts/L1/hooks/AssignmentHook.sol @@ -6,11 +6,10 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "../../common/EssentialContract.sol"; import "../../libs/LibAddress.sol"; import "../TaikoData.sol"; -import "../TaikoToken.sol"; import "./IHook.sol"; /// @title AssignmentHook @@ -48,7 +47,7 @@ contract AssignmentHook is EssentialContract, IHook { error HOOK_TIER_NOT_FOUND(); function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); } function onBlockProposed( @@ -83,7 +82,7 @@ contract AssignmentHook is EssentialContract, IHook { } // Send the liveness bond to the Taiko contract - TaikoToken tko = TaikoToken(resolve("taiko_token", false)); + IERC20 tko = IERC20(resolve("taiko_token", false)); tko.transferFrom(blk.assignedProver, msg.sender, blk.livenessBond); // Find the prover fee using the minimal tier @@ -111,9 +110,7 @@ contract AssignmentHook is EssentialContract, IHook { refund = msg.value - input.tip; } // Paying ERC20 tokens - ERC20Upgradeable(assignment.feeToken).transferFrom( - msg.sender, blk.assignedProver, proverFee - ); + IERC20(assignment.feeToken).transferFrom(msg.sender, blk.assignedProver, proverFee); } // block.coinbase can be address(0) in tests @@ -165,7 +162,3 @@ contract AssignmentHook is EssentialContract, IHook { revert HOOK_TIER_NOT_FOUND(); } } - -/// @title ProxiedAssignmentHook -/// @notice Proxied version of the parent contract. -contract ProxiedAssignmentHook is Proxied, AssignmentHook { } diff --git a/packages/protocol/contracts/L1/libs/LibDepositing.sol b/packages/protocol/contracts/L1/libs/LibDepositing.sol index 4eb8b4f4cef..17192139267 100644 --- a/packages/protocol/contracts/L1/libs/LibDepositing.sol +++ b/packages/protocol/contracts/L1/libs/LibDepositing.sol @@ -10,7 +10,6 @@ import "../../common/AddressResolver.sol"; import "../../libs/LibAddress.sol"; import "../../libs/LibMath.sol"; import "../TaikoData.sol"; -import "../TaikoToken.sol"; /// @title LibDepositing /// @notice A library for handling Ether deposits in the Taiko protocol. diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/L1/libs/LibProposing.sol index d187e7d8f0c..8d87a9f688b 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/L1/libs/LibProposing.sol @@ -6,7 +6,7 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "../../4844/IBlobHashReader.sol"; import "../../common/AddressResolver.sol"; import "../../libs/LibAddress.sol"; @@ -57,7 +57,7 @@ library LibProposing { bytes calldata data, bytes calldata txList ) - internal + external returns ( TaikoData.BlockMetadata memory meta, TaikoData.EthDeposit[] memory depositsProcessed @@ -232,7 +232,7 @@ library LibProposing { } { - TaikoToken tko = TaikoToken(resolver.resolve("taiko_token", false)); + IERC20 tko = IERC20(resolver.resolve("taiko_token", false)); uint256 tkoBalance = tko.balanceOf(address(this)); // Run all hooks. diff --git a/packages/protocol/contracts/L1/libs/LibProving.sol b/packages/protocol/contracts/L1/libs/LibProving.sol index 0326c8332b3..3bec955ae9f 100644 --- a/packages/protocol/contracts/L1/libs/LibProving.sol +++ b/packages/protocol/contracts/L1/libs/LibProving.sol @@ -6,11 +6,11 @@ pragma solidity ^0.8.20; +import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "../../common/AddressResolver.sol"; import "../tiers/ITierProvider.sol"; import "../verifiers/IVerifier.sol"; import "../TaikoData.sol"; -import "../TaikoToken.sol"; import "./LibUtils.sol"; /// @title LibProving @@ -51,6 +51,13 @@ library LibProving { error L1_PROVING_PAUSED(); error L1_UNEXPECTED_TRANSITION_TIER(); + function pauseProving(TaikoData.State storage state, bool pause) external { + if (state.slotB.provingPaused == pause) revert L1_INVALID_PAUSE_STATUS(); + + state.slotB.provingPaused = pause; + emit ProvingPaused(pause); + } + /// @dev Proves or contests a block transition. function proveBlock( TaikoData.State storage state, @@ -60,7 +67,7 @@ library LibProving { TaikoData.Transition memory tran, TaikoData.TierProof memory proof ) - internal + external returns (uint8 maxBlocksToVerify) { // Make sure parentHash is not zero @@ -206,7 +213,7 @@ library LibProving { } } - TaikoToken tko = TaikoToken(resolver.resolve("taiko_token", false)); + IERC20 tko = IERC20(resolver.resolve("taiko_token", false)); if (tier.contestBond == 0) { assert(tier.validityBond == 0); @@ -421,11 +428,4 @@ library LibProving { }); } } - - function pauseProving(TaikoData.State storage state, bool pause) internal { - if (state.slotB.provingPaused == pause) revert L1_INVALID_PAUSE_STATUS(); - - state.slotB.provingPaused = pause; - emit ProvingPaused(pause); - } } diff --git a/packages/protocol/contracts/L1/libs/LibUtils.sol b/packages/protocol/contracts/L1/libs/LibUtils.sol index 3a1c031c21f..5d7ad9c9343 100644 --- a/packages/protocol/contracts/L1/libs/LibUtils.sol +++ b/packages/protocol/contracts/L1/libs/LibUtils.sol @@ -79,7 +79,7 @@ library LibUtils { TaikoData.Config memory config, uint64 blockId ) - internal + external view returns (TaikoData.Block storage blk) { diff --git a/packages/protocol/contracts/L1/libs/LibVerifying.sol b/packages/protocol/contracts/L1/libs/LibVerifying.sol index 516b1047d30..3c1c78afe52 100644 --- a/packages/protocol/contracts/L1/libs/LibVerifying.sol +++ b/packages/protocol/contracts/L1/libs/LibVerifying.sol @@ -6,11 +6,11 @@ pragma solidity ^0.8.20; +import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "../../common/AddressResolver.sol"; import "../../signal/ISignalService.sol"; import "../tiers/ITierProvider.sol"; import "../TaikoData.sol"; -import "../TaikoToken.sol"; import "./LibUtils.sol"; /// @title LibVerifying @@ -193,7 +193,7 @@ library LibVerifying { bondToReturn -= blk.livenessBond / 2; } - TaikoToken tko = TaikoToken(resolver.resolve("taiko_token", false)); + IERC20 tko = IERC20(resolver.resolve("taiko_token", false)); tko.transfer(ts.prover, bondToReturn); // Note: We exclusively address the bonds linked to the diff --git a/packages/protocol/contracts/L1/provers/GuardianProver.sol b/packages/protocol/contracts/L1/provers/GuardianProver.sol index f0ed23b4d04..2b51be87c11 100644 --- a/packages/protocol/contracts/L1/provers/GuardianProver.sol +++ b/packages/protocol/contracts/L1/provers/GuardianProver.sol @@ -34,7 +34,7 @@ contract GuardianProver is EssentialContract { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); } /// @notice Set the set of guardians @@ -113,7 +113,3 @@ contract GuardianProver is EssentialContract { return false; } } - -/// @title ProxiedGuardianProver -/// @notice Proxied version of the parent contract. -contract ProxiedGuardianProver is Proxied, GuardianProver { } diff --git a/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol b/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol index 0a264bb3447..7b11fa52cd7 100644 --- a/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol +++ b/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol @@ -6,6 +6,7 @@ pragma solidity ^0.8.20; +import "../../common/EssentialContract.sol"; import "./ITierProvider.sol"; /// @title TaikoA6TierProvider @@ -16,9 +17,14 @@ import "./ITierProvider.sol"; // blocks. Assuming 10% tokens are used in bonds, then each block may use up to // these many tokens: 1,000,000,000 * 10% / 86400=1157 TOK per block, which is // about 722 USD. -contract TaikoA6TierProvider is ITierProvider { +contract TaikoA6TierProvider is EssentialContract, ITierProvider { error TIER_NOT_FOUND(); + /// @notice Initializes the contract with the provided address manager. + function init() external initializer { + _Essential_init(); + } + function getTier(uint16 tierId) public pure override returns (ITierProvider.Tier memory) { if (tierId == LibTiers.TIER_OPTIMISTIC) { return ITierProvider.Tier({ diff --git a/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol b/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol index 1ecdbf3d820..aef7df3b462 100644 --- a/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol @@ -19,7 +19,7 @@ contract GuardianVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); } /// @inheritdoc IVerifier @@ -36,7 +36,3 @@ contract GuardianVerifier is EssentialContract, IVerifier { } } } - -/// @title ProxiedGuardianVerifier -/// @notice Proxied version of the parent contract. -contract ProxiedGuardianVerifier is Proxied, GuardianVerifier { } diff --git a/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol b/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol index 10fb1a2bbd5..16d7f8347a4 100644 --- a/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol @@ -35,7 +35,7 @@ contract PseZkVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); } /// @inheritdoc IVerifier @@ -138,7 +138,3 @@ contract PseZkVerifier is EssentialContract, IVerifier { return bytes32(uint256(0x1000000) + id); } } - -/// @title ProxiedProofVerifier -/// @notice Proxied version of the parent contract. -contract ProxiedPseZkVerifier is Proxied, PseZkVerifier { } diff --git a/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol b/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol index 9972a3f5a29..0d0550beced 100644 --- a/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol @@ -20,7 +20,7 @@ contract SgxAndZkVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); } /// @inheritdoc IVerifier @@ -44,7 +44,3 @@ contract SgxAndZkVerifier is EssentialContract, IVerifier { IVerifier(resolve("tier_pse_zkevm", false)).verifyProof(ctx, tran, _proof); } } - -/// @title ProxiedProofVerifier -/// @notice Proxied version of the parent contract. -contract ProxiedSgxAndZkVerifier is Proxied, SgxAndZkVerifier { } diff --git a/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol b/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol index a21334d6b17..f88fdcea043 100644 --- a/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol @@ -6,7 +6,7 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/ECDSAUpgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol"; import "../../common/EssentialContract.sol"; import "../../thirdparty/LibBytesUtils.sol"; import "../TaikoData.sol"; @@ -54,7 +54,7 @@ contract SgxVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); } /// @notice Adds trusted SGX instances to the registry. @@ -85,7 +85,7 @@ contract SgxVerifier is EssentialContract, IVerifier { returns (uint256[] memory ids) { bytes32 signedHash = keccak256(abi.encode("ADD_INSTANCES", extraInstances)); - address oldInstance = ECDSAUpgradeable.recover(signedHash, signature); + address oldInstance = ECDSA.recover(signedHash, signature); if (!_isInstanceValid(id, oldInstance)) revert SGX_INVALID_INSTANCE(); _replaceInstance(id, oldInstance, newInstance); @@ -112,9 +112,8 @@ contract SgxVerifier is EssentialContract, IVerifier { address newInstance = address(bytes20(LibBytesUtils.slice(proof.data, 4, 20))); bytes memory signature = LibBytesUtils.slice(proof.data, 24); - address oldInstance = ECDSAUpgradeable.recover( - getSignedHash(tran, newInstance, ctx.prover, ctx.metaHash), signature - ); + address oldInstance = + ECDSA.recover(getSignedHash(tran, newInstance, ctx.prover, ctx.metaHash), signature); if (!_isInstanceValid(id, oldInstance)) revert SGX_INVALID_INSTANCE(); _replaceInstance(id, oldInstance, newInstance); @@ -159,7 +158,3 @@ contract SgxVerifier is EssentialContract, IVerifier { return instances[id].addedAt + INSTANCE_EXPIRY > block.timestamp; } } - -/// @title ProxiedSgxVerifier -/// @notice Proxied version of the parent contract. -contract ProxiedSgxVerifier is Proxied, SgxVerifier { } diff --git a/packages/protocol/contracts/L2/TaikoL2.sol b/packages/protocol/contracts/L2/TaikoL2.sol index f441a3f9138..ea67ca51afd 100644 --- a/packages/protocol/contracts/L2/TaikoL2.sol +++ b/packages/protocol/contracts/L2/TaikoL2.sol @@ -6,7 +6,6 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol"; import "../common/EssentialContract.sol"; import "../common/ICrossChainSync.sol"; import "../libs/LibMath.sol"; @@ -55,7 +54,7 @@ contract TaikoL2 is EssentialContract, TaikoL2Signer, ICrossChainSync { /// @param _signalService Address of the {ISignalService} contract. /// @param _gasExcess The initial gasExcess. function init(address _signalService, uint64 _gasExcess) external initializer { - EssentialContract._init(address(0)); + _Essential_init(); if (_signalService == address(0)) revert L2_INVALID_PARAM(); signalService = _signalService; @@ -263,11 +262,3 @@ contract TaikoL2 is EssentialContract, TaikoL2Signer, ICrossChainSync { if (_basefee == 0) _basefee = 1; } } - -/// @title ProxiedSingletonTaikoL2 -/// @notice Proxied version of the TaikoL2 contract. -/// @dev Deploy this contract as a singleton per chain for use by multiple L2s -/// or L3s. No singleton check is performed within the code; it's the deployer's -/// responsibility to ensure this. Singleton deployment is essential for -/// enabling multi-hop bridging across all Taiko L2/L3s. -contract ProxiedSingletonTaikoL2 is Proxied, TaikoL2 { } diff --git a/packages/protocol/contracts/L2/TaikoL2EIP1559Configurable.sol b/packages/protocol/contracts/L2/TaikoL2EIP1559Configurable.sol index 3eec0d12fcb..1d0b023af88 100644 --- a/packages/protocol/contracts/L2/TaikoL2EIP1559Configurable.sol +++ b/packages/protocol/contracts/L2/TaikoL2EIP1559Configurable.sol @@ -42,7 +42,3 @@ contract TaikoL2EIP1559Configurable is TaikoL2 { return _config; } } - -/// @title ProxiedTaikoL2EIP1559Configurable -/// @notice Proxied version of the TaikoL2EIP1559Configurable contract. -contract ProxiedTaikoL2EIP1559Configurable is Proxied, TaikoL2EIP1559Configurable { } diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 75c51bb85d1..3c75fe23b0f 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -62,7 +62,7 @@ contract Bridge is EssentialContract, IBridge { /// @notice Initializes the contract. /// @param _addressManager The address of the {AddressManager} contract. function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); _ctx.msgHash == bytes32(PLACEHOLDER); } @@ -409,11 +409,3 @@ contract Bridge is EssentialContract, IBridge { return msgHash ^ bytes32(uint256(Status.FAILED)); } } - -/// @title ProxiedSingletonBridge -/// @notice Proxied version of the parent contract. -/// @dev Deploy this contract as a singleton per chain for use by multiple L2s -/// or L3s. No singleton check is performed within the code; it's the deployer's -/// responsibility to ensure this. Singleton deployment is essential for -/// enabling multi-hop bridging across all Taiko L2/L3s. -contract ProxiedSingletonBridge is Proxied, Bridge { } diff --git a/packages/protocol/contracts/common/AddressManager.sol b/packages/protocol/contracts/common/AddressManager.sol index 647ca57e35b..334951e325f 100644 --- a/packages/protocol/contracts/common/AddressManager.sol +++ b/packages/protocol/contracts/common/AddressManager.sol @@ -6,11 +6,11 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol"; - +import "./OwnerUUPSUpgradable.sol"; /// @title IAddressManager /// @notice Specifies methods to manage address mappings for given chainId-name /// pairs. + interface IAddressManager { /// @notice Gets the address mapped to a specific chainId-name pair. /// @dev Note that in production, this method shall be a pure function @@ -23,7 +23,7 @@ interface IAddressManager { /// @title AddressManager /// @notice Manages a mapping of chainId-name pairs to Ethereum addresses. -contract AddressManager is Ownable2StepUpgradeable, IAddressManager { +contract AddressManager is OwnerUUPSUpgradable, IAddressManager { mapping(uint256 => mapping(bytes32 => address)) private addresses; uint256[49] private __gap; @@ -33,7 +33,7 @@ contract AddressManager is Ownable2StepUpgradeable, IAddressManager { /// @notice Initializes the owner for the upgradable contract. function init() external initializer { - Ownable2StepUpgradeable.__Ownable2Step_init(); + _OwnerUUPSUpgradable_init(); } /// @notice Sets the address for a specific chainId-name pair. @@ -59,11 +59,3 @@ contract AddressManager is Ownable2StepUpgradeable, IAddressManager { return addresses[chainId][name]; } } - -/// @title ProxiedAddressManager -/// @notice Proxied version of the parent contract. -contract ProxiedAddressManager is AddressManager { - constructor() { - _disableInitializers(); - } -} diff --git a/packages/protocol/contracts/common/AddressResolver.sol b/packages/protocol/contracts/common/AddressResolver.sol index 2fb319e9eda..311a43ecf9e 100644 --- a/packages/protocol/contracts/common/AddressResolver.sol +++ b/packages/protocol/contracts/common/AddressResolver.sol @@ -76,7 +76,8 @@ abstract contract AddressResolver { /// @dev Initialization method for setting up AddressManager reference. /// @param _addressManager Address of the AddressManager. - function _init(address _addressManager) internal virtual { + // solhint-disable-next-line func-name-mixedcase + function _AddressResolver_init(address _addressManager) internal virtual { if (block.chainid >= type(uint64).max) { revert RESOLVER_UNEXPECTED_CHAINID(); } diff --git a/packages/protocol/contracts/common/AuthorizableContract.sol b/packages/protocol/contracts/common/AuthorizableContract.sol index 4c83bbf0e8b..edccf08d776 100644 --- a/packages/protocol/contracts/common/AuthorizableContract.sol +++ b/packages/protocol/contracts/common/AuthorizableContract.sol @@ -41,12 +41,4 @@ abstract contract AuthorizableContract is EssentialContract { function isAuthorizedAs(address addr, bytes32 label) public view returns (bool) { return label != 0 && authorizedAddresses[addr] == label; } - - function _init(address _addressManager) internal virtual override { - EssentialContract._init(_addressManager); - } - - function _init() internal virtual { - EssentialContract._init(address(0)); - } } diff --git a/packages/protocol/contracts/common/EssentialContract.sol b/packages/protocol/contracts/common/EssentialContract.sol index 6f5f84d3223..87e594dd0e4 100644 --- a/packages/protocol/contracts/common/EssentialContract.sol +++ b/packages/protocol/contracts/common/EssentialContract.sol @@ -6,84 +6,23 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol"; import "./AddressResolver.sol"; +import "./OwnerUUPSUpgradable.sol"; -/// @title EssentialContract -/// @notice This contract serves as the base contract for many core components. -/// @dev We didn't use OpenZeppelin's PausableUpgradeable and -/// ReentrancyGuardUpgradeable contract to optimize storage reads. -abstract contract EssentialContract is Ownable2StepUpgradeable, AddressResolver { - uint8 private constant _FALSE = 1; - uint8 private constant _TRUE = 2; - - uint8 private _reentry; // slot 1 - uint8 private _paused; - uint256[49] private __gap; - - event Paused(address account); - event Unpaused(address account); - - error REENTRANT_CALL(); - error INVALID_PAUSE_STATUS(); - - modifier nonReentrant() { - if (_reentry == _TRUE) revert REENTRANT_CALL(); - _reentry = _TRUE; - _; - _reentry = _FALSE; - } - - modifier whenPaused() { - if (!paused()) revert INVALID_PAUSE_STATUS(); - _; - } - - modifier whenNotPaused() { - if (paused()) revert INVALID_PAUSE_STATUS(); - _; - } - - function pause() external whenNotPaused onlyOwner { - _paused = _TRUE; - emit Paused(msg.sender); - } - - function unpause() external whenPaused onlyOwner { - _paused = _FALSE; - emit Unpaused(msg.sender); - } - - function paused() public view returns (bool) { - return _paused == _TRUE; - } +abstract contract EssentialContract is OwnerUUPSUpgradable, AddressResolver { + uint256[50] private __gap; /// @notice Initializes the contract with an address manager. /// @param _addressManager The address of the address manager. - function _init(address _addressManager) internal virtual override { - Ownable2StepUpgradeable.__Ownable2Step_init(); - AddressResolver._init(_addressManager); - - _reentry = _FALSE; - _paused = _FALSE; + // solhint-disable-next-line func-name-mixedcase + function _Essential_init(address _addressManager) internal virtual { + _OwnerUUPSUpgradable_init(); + _AddressResolver_init(_addressManager); } - function _inNonReentrant() internal view returns (bool) { - return _reentry == _TRUE; - } -} - -/// @title Proxied -/// @dev Extends OpenZeppelin's Initializable for upgradeable contracts. -/// Intended as the base class for contracts used with -/// TransparentUpgradeableProxy. -/// -/// @dev For each chain, deploy Proxied contracts with unique deployers to -/// ensure distinct contract addresses. -abstract contract Proxied is Initializable { - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); + /// @notice Initializes the contract with an address manager. + // solhint-disable-next-line func-name-mixedcase + function _Essential_init() internal virtual { + _Essential_init(address(0)); } } diff --git a/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol b/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol new file mode 100644 index 00000000000..c6e84eb6955 --- /dev/null +++ b/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol"; +import "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; + +/// @title OwnerUUPSUpgradable +/// @notice This contract serves as the base contract for many core components. +/// @dev We didn't use OpenZeppelin's PausableUpgradeable and +/// ReentrancyGuardUpgradeable contract to optimize storage reads. +abstract contract OwnerUUPSUpgradable is UUPSUpgradeable, OwnableUpgradeable { + uint8 private constant _FALSE = 1; + uint8 private constant _TRUE = 2; + + uint8 private _reentry; // slot 1 + uint8 private _paused; + uint256[49] private __gap; + + event Paused(address account); + event Unpaused(address account); + + error REENTRANT_CALL(); + error INVALID_PAUSE_STATUS(); + + modifier nonReentrant() { + if (_reentry == _TRUE) revert REENTRANT_CALL(); + _reentry = _TRUE; + _; + _reentry = _FALSE; + } + + modifier whenPaused() { + if (!paused()) revert INVALID_PAUSE_STATUS(); + _; + } + + modifier whenNotPaused() { + if (paused()) revert INVALID_PAUSE_STATUS(); + _; + } + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + function pause() external whenNotPaused onlyOwner { + _paused = _TRUE; + emit Paused(msg.sender); + } + + function unpause() external whenPaused onlyOwner { + _paused = _FALSE; + emit Unpaused(msg.sender); + } + + function paused() public view returns (bool) { + return _paused == _TRUE; + } + + function _authorizeUpgrade(address) internal override onlyOwner { } + + /// @notice Initializes the contract with an address manager. + // solhint-disable-next-line func-name-mixedcase + function _OwnerUUPSUpgradable_init() internal virtual { + __Ownable_init(); + _reentry = _FALSE; + _paused = _FALSE; + } + + function _inNonReentrant() internal view returns (bool) { + return _reentry == _TRUE; + } +} diff --git a/packages/protocol/contracts/libs/LibAddress.sol b/packages/protocol/contracts/libs/LibAddress.sol index e89d9dd269a..a865732508e 100644 --- a/packages/protocol/contracts/libs/LibAddress.sol +++ b/packages/protocol/contracts/libs/LibAddress.sol @@ -7,9 +7,9 @@ pragma solidity ^0.8.20; import "lib/openzeppelin-contracts/contracts/utils/Address.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/ECDSAUpgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/interfaces/IERC1271Upgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol"; +import "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import "lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol"; /// @title LibAddress /// @dev Provides utilities for address-related operations. @@ -53,7 +53,7 @@ library LibAddress { { if (!Address.isContract(addr)) return false; - try IERC165Upgradeable(addr).supportsInterface(interfaceId) returns (bool _result) { + try IERC165(addr).supportsInterface(interfaceId) returns (bool _result) { result = _result; } catch { } } @@ -68,9 +68,9 @@ library LibAddress { returns (bool valid) { if (Address.isContract(addr)) { - return IERC1271Upgradeable(addr).isValidSignature(hash, sig) == EIP1271_MAGICVALUE; + return IERC1271(addr).isValidSignature(hash, sig) == EIP1271_MAGICVALUE; } else { - return ECDSAUpgradeable.recover(hash, sig) == addr; + return ECDSA.recover(hash, sig) == addr; } } diff --git a/packages/protocol/contracts/libs/LibDeploy.sol b/packages/protocol/contracts/libs/LibDeploy.sol new file mode 100644 index 00000000000..16fd3e66b8c --- /dev/null +++ b/packages/protocol/contracts/libs/LibDeploy.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; + +/// @title LibDeploy +/// @dev Provides utilities for deploying contracts +library LibDeploy { + error NULL_IMPL_ADDR(); + + function deployERC1967Proxy( + address impl, + address owner, + bytes memory data + ) + internal + returns (address proxy) + { + if (impl == address(0)) revert NULL_IMPL_ADDR(); + proxy = address(new ERC1967Proxy(impl, data)); + + if (owner != address(0) && owner != msg.sender) { + OwnableUpgradeable(proxy).transferOwnership(owner); + } + } +} diff --git a/packages/protocol/contracts/libs/LibDeployHelper.sol b/packages/protocol/contracts/libs/LibDeployHelper.sol new file mode 100644 index 00000000000..8f08a8d1313 --- /dev/null +++ b/packages/protocol/contracts/libs/LibDeployHelper.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; +import "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; + +import "forge-std/console2.sol"; + +import "../common/AddressManager.sol"; +import "./LibDeploy.sol"; + +/// @title LibDeployHelper +/// @dev Do not use this library in production code except deployment scripts and tests. +library LibDeployHelper { + error ADDRESS_NULL(); + + function deployProxy( + bytes32 name, + address impl, + bytes memory data, + address registerTo, + address owner + ) + internal + returns (address proxy) + { + proxy = LibDeploy.deployERC1967Proxy(impl, owner, data); + + if (registerTo != address(0)) { + AddressManager(registerTo).setAddress(uint64(block.chainid), name, proxy); + } + console2.log("> ", Strings.toString(uint256(name)), "@", registerTo); + console2.log("\t proxy : ", proxy); + console2.log("\t impl : ", impl); + console2.log("\t owner : ", OwnableUpgradeable(proxy).owner()); + } + + function deployProxy( + bytes32 name, + address impl, + bytes memory data + ) + internal + returns (address proxy) + { + return deployProxy(name, impl, data, address(0), address(0)); + } + + function register(address registerTo, bytes32 name, address addr) internal { + register(registerTo, name, addr, uint64(block.chainid)); + } + + function register(address registerTo, bytes32 name, address addr, uint64 chainId) internal { + if (registerTo == address(0)) revert ADDRESS_NULL(); + if (addr == address(0)) revert ADDRESS_NULL(); + AddressManager(registerTo).setAddress(chainId, name, addr); + console2.log("> ", Strings.toString(uint256(name)), "@", registerTo); + console2.log("\t addr : ", addr); + } + + function copyRegister(address registerTo, address readFrom, bytes32 name) internal { + if (registerTo == address(0)) revert ADDRESS_NULL(); + if (readFrom == address(0)) revert ADDRESS_NULL(); + + register({ + registerTo: registerTo, + name: name, + addr: AddressManager(readFrom).getAddress(uint64(block.chainid), name), + chainId: uint64(block.chainid) + }); + } +} diff --git a/packages/protocol/contracts/signal/SignalService.sol b/packages/protocol/contracts/signal/SignalService.sol index f812459d794..51694199662 100644 --- a/packages/protocol/contracts/signal/SignalService.sol +++ b/packages/protocol/contracts/signal/SignalService.sol @@ -45,7 +45,7 @@ contract SignalService is AuthorizableContract, ISignalService { /// @dev Initializer to be called after being deployed behind a proxy. function init() external initializer { - AuthorizableContract._init(); + _OwnerUUPSUpgradable_init(); } /// @inheritdoc ISignalService @@ -101,7 +101,6 @@ contract SignalService is AuthorizableContract, ISignalService { // verify that chainB's signalRoot has been sent as a signal by chainB's // "taiko" contract, then using chainB's signalRoot, we further check // the signal is sent by chainC's "bridge" contract. - if (!isAuthorizedAs(p.crossChainSync, bytes32(block.chainid))) { return false; } @@ -160,11 +159,3 @@ contract SignalService is AuthorizableContract, ISignalService { /// @return Returns true to skip checking inclusion proofs. function skipProofCheck() public pure virtual returns (bool) { } } - -/// @title ProxiedSingletonSignalService -/// @notice Proxied version of the parent contract. -/// @dev Deploy this contract as a singleton per chain for use by multiple L2s -/// or L3s. No singleton check is performed within the code; it's the deployer's -/// responsibility to ensure this. Singleton deployment is essential for -/// enabling multi-hop bridging across all Taiko L2/L3s. -contract ProxiedSingletonSignalService is Proxied, SignalService { } diff --git a/packages/protocol/contracts/team/TimeLockTokenPool.sol b/packages/protocol/contracts/team/TimeLockTokenPool.sol index 1bfdec7747d..6424a24d0c4 100644 --- a/packages/protocol/contracts/team/TimeLockTokenPool.sol +++ b/packages/protocol/contracts/team/TimeLockTokenPool.sol @@ -6,10 +6,9 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/ECDSAUpgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; import "../common/EssentialContract.sol"; /// @title TimeLockTokenPool @@ -28,7 +27,7 @@ import "../common/EssentialContract.sol"; /// - team members, advisors, etc. /// - grant program grantees contract TimeLockTokenPool is EssentialContract { - using SafeERC20Upgradeable for ERC20Upgradeable; + using SafeERC20 for IERC20; struct Grant { uint128 amount; @@ -78,7 +77,7 @@ contract TimeLockTokenPool is EssentialContract { error TOO_MANY(); function init(address _taikoToken, address _sharedVault) external initializer { - EssentialContract._init(address(0)); + _Essential_init(); if (_taikoToken == address(0)) revert INVALID_PARAM(); taikoToken = _taikoToken; @@ -129,7 +128,7 @@ contract TimeLockTokenPool is EssentialContract { function withdraw(address to, bytes memory sig) external { if (to == address(0)) revert INVALID_PARAM(); bytes32 hash = keccak256(abi.encodePacked("Withdraw unlocked Taiko token to: ", to)); - address recipient = ECDSAUpgradeable.recover(hash, sig); + address recipient = ECDSA.recover(hash, sig); _withdraw(recipient, to); } @@ -170,7 +169,7 @@ contract TimeLockTokenPool is EssentialContract { r.amountWithdrawn += amount; totalAmountWithdrawn += amount; - ERC20Upgradeable(taikoToken).transferFrom(sharedVault, to, amount); + IERC20(taikoToken).transferFrom(sharedVault, to, amount); emit Withdrawn(recipient, to, amount); } @@ -230,7 +229,3 @@ contract TimeLockTokenPool is EssentialContract { } } } - -/// @title ProxiedTimeLockTokenPool -/// @notice Proxied version of the parent contract. -contract ProxiedTimeLockTokenPool is Proxied, TimeLockTokenPool { } diff --git a/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol b/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol new file mode 100644 index 00000000000..5d602babb9e --- /dev/null +++ b/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; +import "./MerkleClaimable.sol"; + +/// @title ERC20Airdrop +/// Contract for managing Taiko token airdrop for eligible users +contract ERC20Airdrop is MerkleClaimable { + address public token; + address public vault; + uint256[48] private __gap; + + function init( + uint64 _claimStarts, + uint64 _claimEnds, + bytes32 _merkleRoot, + address _token, + address _vault + ) + external + initializer + { + _Essential_init(); + _setConfig(_claimStarts, _claimEnds, _merkleRoot); + + token = _token; + vault = _vault; + } + + function _claimWithData(bytes calldata data) internal override { + (address user, uint256 amount) = abi.decode(data, (address, uint256)); + IERC20Upgradeable(token).transferFrom(vault, user, amount); + } +} diff --git a/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol b/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol new file mode 100644 index 00000000000..a4d862c5414 --- /dev/null +++ b/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; +import "../../libs/LibMath.sol"; +import "./MerkleClaimable.sol"; + +/// @title ERC20Airdrop2 +/// Contract for managing Taiko token airdrop for eligible users but the +/// withdrawal is not immediate and is subject to a withdrawal window. +contract ERC20Airdrop2 is MerkleClaimable { + using LibMath for uint256; + + address public token; + address public vault; + // Represents the token amount for which the user is (by default) eligible + mapping(address => uint256) public claimedAmount; + // Represents the already withdrawn amount + mapping(address => uint256) public withdrawnAmount; + // Length of the withdrawal window + uint64 public withdrawalWindow; + + uint256[45] private __gap; + + event Withdrawn(address user, uint256 amount); + + error WITHDRAWALS_NOT_ONGOING(); + + modifier ongoingWithdrawals() { + if (claimEnd > block.timestamp || claimEnd + withdrawalWindow < block.timestamp) { + revert WITHDRAWALS_NOT_ONGOING(); + } + _; + } + + function init( + uint64 _claimStarts, + uint64 _claimEnds, + bytes32 _merkleRoot, + address _token, + address _vault, + uint64 _withdrawalWindow + ) + external + initializer + { + _Essential_init(); + // Unix timestamp=_claimEnds+1 marks the first timestamp the users are able to withdraw. + _setConfig(_claimStarts, _claimEnds, _merkleRoot); + + token = _token; + vault = _vault; + withdrawalWindow = _withdrawalWindow; + } + + /// @notice External withdraw function + /// @param user User address + function withdraw(address user) external ongoingWithdrawals { + (, uint256 amount) = getBalance(user); + withdrawnAmount[user] += amount; + IERC20Upgradeable(token).transferFrom(vault, user, amount); + + emit Withdrawn(user, amount); + } + + /// @notice Getter for the balance and withdrawal amount per given user + /// The 2nd airdrop is subject to an unlock period. User has to claim his + /// tokens (within claimStart and claimEnd), but not immediately + /// withdrawable. With a time of X (withdrawalWindow) it becomes fully + /// withdrawable - and unlocks linearly. + /// @param user User address + /// @return balance The balance the user successfully claimed + /// @return withdrawableAmount The amount available to withdraw + function getBalance(address user) + public + view + returns (uint256 balance, uint256 withdrawableAmount) + { + balance = claimedAmount[user]; + // If balance is 0 then there is no balance and withdrawable amount + if (balance == 0) return (0, 0); + // Balance might be positive before end of claiming (claimEnd - if claimed already) but + // withdrawable is 0. + if (block.timestamp < claimEnd) return (balance, 0); + + // Hard cap timestamp - so range cannot go over - to get more allocation over time. + uint256 timeBasedAllowance = balance + * (block.timestamp.min(claimEnd + withdrawalWindow) - claimEnd) / withdrawalWindow; + + withdrawableAmount = timeBasedAllowance - withdrawnAmount[user]; + } + + function _claimWithData(bytes calldata data) internal override { + (address user, uint256 amount) = abi.decode(data, (address, uint256)); + claimedAmount[user] += amount; + } +} diff --git a/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol b/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol new file mode 100644 index 00000000000..bb3526c4db3 --- /dev/null +++ b/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/ERC721Upgradeable.sol"; +import "./MerkleClaimable.sol"; + +/// @title ERC721Airdrop +contract ERC721Airdrop is MerkleClaimable { + address public token; + address public vault; + uint256[48] private __gap; + + function init( + uint64 _claimStarts, + uint64 _claimEnds, + bytes32 _merkleRoot, + address _token, + address _vault + ) + external + initializer + { + _Essential_init(); + _setConfig(_claimStarts, _claimEnds, _merkleRoot); + + token = _token; + vault = _vault; + } + + function _claimWithData(bytes calldata data) internal override { + (address user, uint256[] memory tokenIds) = abi.decode(data, (address, uint256[])); + + for (uint256 i; i < tokenIds.length; ++i) { + IERC721Upgradeable(token).safeTransferFrom(vault, user, tokenIds[i]); + } + } +} diff --git a/packages/protocol/contracts/team/airdrop/MerkleClaimable.sol b/packages/protocol/contracts/team/airdrop/MerkleClaimable.sol new file mode 100644 index 00000000000..02263b80ed4 --- /dev/null +++ b/packages/protocol/contracts/team/airdrop/MerkleClaimable.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import { MerkleProofUpgradeable } from + "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/MerkleProofUpgradeable.sol"; +import "../../common/EssentialContract.sol"; + +/// @title MerkleClaimable +/// Contract for managing Taiko token airdrop for eligible users +abstract contract MerkleClaimable is EssentialContract { + mapping(bytes32 => bool) public isClaimed; + bytes32 public merkleRoot; + uint64 public claimStart; + uint64 public claimEnd; + + uint256[47] private __gap; + + event Claimed(bytes32 hash); + + error CLAIM_NOT_ONGOING(); + error CLAIMED_ALREADY(); + error INVALID_PROOF(); + + modifier ongoingClaim() { + if ( + merkleRoot == 0x0 || claimStart == 0 || claimEnd == 0 || claimStart > block.timestamp + || claimEnd < block.timestamp + ) revert CLAIM_NOT_ONGOING(); + _; + } + + function claim( + bytes calldata data, + bytes32[] calldata proof + ) + external + nonReentrant + ongoingClaim + { + bytes32 hash = keccak256(abi.encode("CLAIM_TAIKO_AIRDROP", data)); + + if (isClaimed[hash]) revert CLAIMED_ALREADY(); + + if (!MerkleProofUpgradeable.verify(proof, merkleRoot, hash)) { + revert INVALID_PROOF(); + } + + isClaimed[hash] = true; + _claimWithData(data); + emit Claimed(hash); + } + + /// @notice Set config parameters + /// @param _claimStart Unix timestamp for claim start + /// @param _claimEnd Unix timestamp for claim end + /// @param _merkleRoot Merkle root of the tree + function setConfig( + uint64 _claimStart, + uint64 _claimEnd, + bytes32 _merkleRoot + ) + external + onlyOwner + { + _setConfig(_claimStart, _claimEnd, _merkleRoot); + } + + function _setConfig(uint64 _claimStart, uint64 _claimEnd, bytes32 _merkleRoot) internal { + claimStart = _claimStart; + claimEnd = _claimEnd; + merkleRoot = _merkleRoot; + } + + /// @dev Must revert in case of errors. + function _claimWithData(bytes calldata data) internal virtual; +} diff --git a/packages/protocol/contracts/tokenvault/BaseVault.sol b/packages/protocol/contracts/tokenvault/BaseVault.sol index 9f762a02766..e685037c4a8 100644 --- a/packages/protocol/contracts/tokenvault/BaseVault.sol +++ b/packages/protocol/contracts/tokenvault/BaseVault.sol @@ -9,6 +9,7 @@ import "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IER import "../bridge/IBridge.sol"; import "../common/EssentialContract.sol"; import "../libs/LibAddress.sol"; +import "../libs/LibDeploy.sol"; abstract contract BaseVault is EssentialContract, IRecallableSender, IERC165Upgradeable { error VAULT_PERMISSION_DENIED(); @@ -23,7 +24,7 @@ abstract contract BaseVault is EssentialContract, IRecallableSender, IERC165Upgr /// @param addressManager Address manager contract address. function init(address addressManager) external initializer { - EssentialContract._init(addressManager); + _Essential_init(addressManager); } /// @notice Checks if the contract supports the given interface. diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol index c972c9fb175..fa74f127fa1 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol @@ -54,7 +54,7 @@ contract BridgedERC1155 is if (_srcToken == address(0) || _srcChainId == 0 || _srcChainId == block.chainid) { revert BRIDGED_TOKEN_INVALID_PARAMS(); } - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); __ERC1155_init(""); srcToken = _srcToken; srcChainId = _srcChainId; @@ -128,7 +128,3 @@ contract BridgedERC1155 is return LibBridgedToken.buildSymbol(symbol_); } } - -/// @title ProxiedBridgedERC1155 -/// @notice Proxied version of the parent contract. -contract ProxiedBridgedERC1155 is Proxied, BridgedERC1155 { } diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20.sol b/packages/protocol/contracts/tokenvault/BridgedERC20.sol index 466e62ae082..0b508e3b68e 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20.sol @@ -60,9 +60,9 @@ contract BridgedERC20 is revert BRIDGED_TOKEN_INVALID_PARAMS(); } - // Initialize EssentialContract and ERC20Upgradeable - EssentialContract._init(_addressManager); - ERC20Upgradeable.__ERC20_init({ name_: _name, symbol_: _symbol }); + // Initialize OwnerUUPSUpgradable and ERC20Upgradeable + _Essential_init(_addressManager); + __ERC20_init({ name_: _name, symbol_: _symbol }); // Set contract properties srcToken = _srcToken; @@ -167,7 +167,3 @@ contract BridgedERC20 is return (srcToken, srcChainId); } } - -/// @title ProxiedBridgedERC20 -/// @notice Proxied version of the parent contract. -contract ProxiedBridgedERC20 is Proxied, BridgedERC20 { } diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/tokenvault/BridgedERC721.sol index 3cdf5f3ba31..4fcbdf64b79 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC721.sol @@ -45,7 +45,7 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { ) { revert BRIDGED_TOKEN_INVALID_PARAMS(); } - EssentialContract._init(_addressManager); + _Essential_init(_addressManager); __ERC721_init(_name, _symbol); srcToken = _srcToken; srcChainId = _srcChainId; @@ -113,7 +113,3 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { return ""; } } - -/// @title ProxiedBridgedERC721 -/// @notice Proxied version of the parent contract. -contract ProxiedBridgedERC721 is Proxied, BridgedERC721 { } diff --git a/packages/protocol/contracts/tokenvault/ERC1155Vault.sol b/packages/protocol/contracts/tokenvault/ERC1155Vault.sol index a2e3b996371..81bfc2fb1b9 100644 --- a/packages/protocol/contracts/tokenvault/ERC1155Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC1155Vault.sol @@ -6,12 +6,10 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol"; import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/utils/ERC1155ReceiverUpgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/ERC1155Upgradeable.sol"; import "../bridge/IBridge.sol"; -import "../libs/LibAddress.sol"; import "./BaseNFTVault.sol"; import "./BridgedERC1155.sol"; @@ -121,7 +119,7 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { // Token lives on this chain token = ctoken.addr; for (uint256 i; i < tokenIds.length; ++i) { - ERC1155Upgradeable(token).safeTransferFrom({ + ERC1155(token).safeTransferFrom({ from: address(this), to: _to, id: tokenIds[i], @@ -176,7 +174,7 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { } } else { for (uint256 i; i < tokenIds.length; ++i) { - ERC1155Upgradeable(nft.addr).safeTransferFrom({ + ERC1155(nft.addr).safeTransferFrom({ from: address(this), to: message.owner, id: tokenIds[i], @@ -279,7 +277,7 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { nft.symbol = _symbol; } catch { } for (uint256 i; i < op.tokenIds.length; ++i) { - ERC1155Upgradeable(op.token).safeTransferFrom({ + ERC1155(op.token).safeTransferFrom({ from: msg.sender, to: address(this), id: op.tokenIds[i], @@ -317,13 +315,8 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { BridgedERC1155.init.selector, abi.encode(addressManager, ctoken.addr, ctoken.chainId, ctoken.symbol, ctoken.name) ); - btoken = address( - new TransparentUpgradeableProxy( - resolve("proxied_bridged_erc1155", false), - owner(), - data - ) - ); + + btoken = LibDeploy.deployERC1967Proxy(resolve("bridged_erc1155", false), owner(), data); bridgedToCanonical[btoken] = ctoken; canonicalToBridged[ctoken.chainId][ctoken.addr] = btoken; @@ -337,11 +330,3 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { }); } } - -/// @title ProxiedSingletonERC1155Vault -/// @notice Proxied version of the parent contract. -/// @dev Deploy this contract as a singleton per chain for use by multiple L2s -/// or L3s. No singleton check is performed within the code; it's the deployer's -/// responsibility to ensure this. Singleton deployment is essential for -/// enabling multi-hop bridging across all Taiko L2/L3s. -contract ProxiedSingletonERC1155Vault is Proxied, ERC1155Vault { } diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/tokenvault/ERC20Vault.sol index 5d6a6e1cdef..d6a1b8eb468 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC20Vault.sol @@ -6,9 +6,8 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; import "../bridge/IBridge.sol"; import "./BridgedERC20.sol"; import "./IMintableERC20.sol"; @@ -21,7 +20,7 @@ import "./BaseVault.sol"; /// their bridged tokens. contract ERC20Vault is BaseVault { using LibAddress for address; - using SafeERC20Upgradeable for ERC20Upgradeable; + using SafeERC20 for ERC20; // Structs for canonical ERC20 tokens and transfer operations struct CanonicalERC20 { @@ -153,7 +152,7 @@ contract ERC20Vault is BaseVault { if (ctoken.chainId == block.chainid) { token = ctoken.addr; - ERC20Upgradeable(token).safeTransfer(_to, amount); + ERC20(token).safeTransfer(_to, amount); } else { token = _getOrDeployBridgedToken(ctoken); IMintableERC20(token).mint(_to, amount); @@ -192,7 +191,7 @@ contract ERC20Vault is BaseVault { if (bridgedToCanonical[token].addr != address(0)) { IMintableERC20(token).mint(message.owner, amount); } else { - ERC20Upgradeable(token).safeTransfer(message.owner, amount); + ERC20(token).safeTransfer(message.owner, amount); } } @@ -233,7 +232,7 @@ contract ERC20Vault is BaseVault { _balanceChange = amount; } else { // If it's a canonical token - ERC20Upgradeable t = ERC20Upgradeable(token); + ERC20 t = ERC20(token); ctoken = CanonicalERC20({ chainId: uint64(block.chainid), addr: token, @@ -286,13 +285,8 @@ contract ERC20Vault is BaseVault { ctoken.name ) ); - btoken = address( - new TransparentUpgradeableProxy( - resolve("proxied_bridged_erc20", false), - owner(), - data - ) - ); + + btoken = LibDeploy.deployERC1967Proxy(resolve("bridged_erc20", false), owner(), data); bridgedToCanonical[btoken] = ctoken; canonicalToBridged[ctoken.chainId][ctoken.addr] = btoken; @@ -307,11 +301,3 @@ contract ERC20Vault is BaseVault { }); } } - -/// @title ProxiedSingletonERC20Vault -/// @notice Proxied version of the parent contract. -/// @dev Deploy this contract as a singleton per chain for use by multiple L2s -/// or L3s. No singleton check is performed within the code; it's the deployer's -/// responsibility to ensure this. Singleton deployment is essential for -/// enabling multi-hop bridging across all Taiko L2/L3s. -contract ProxiedSingletonERC20Vault is Proxied, ERC20Vault { } diff --git a/packages/protocol/contracts/tokenvault/ERC721Vault.sol b/packages/protocol/contracts/tokenvault/ERC721Vault.sol index 8eefa3e9f79..2b952e7903c 100644 --- a/packages/protocol/contracts/tokenvault/ERC721Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC721Vault.sol @@ -6,8 +6,7 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/ERC721Upgradeable.sol"; +import "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol"; import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/IERC721ReceiverUpgradeable.sol"; import "../bridge/IBridge.sol"; @@ -259,13 +258,8 @@ contract ERC721Vault is BaseNFTVault, IERC721ReceiverUpgradeable { BridgedERC721.init.selector, abi.encode(addressManager, ctoken.addr, ctoken.chainId, ctoken.symbol, ctoken.name) ); - btoken = address( - new TransparentUpgradeableProxy( - resolve("proxied_bridged_erc721", false), - owner(), - data - ) - ); + + btoken = LibDeploy.deployERC1967Proxy(resolve("bridged_erc721", false), owner(), data); bridgedToCanonical[btoken] = ctoken; canonicalToBridged[ctoken.chainId][ctoken.addr] = btoken; @@ -279,11 +273,3 @@ contract ERC721Vault is BaseNFTVault, IERC721ReceiverUpgradeable { }); } } - -/// @title ProxiedSingletonERC721Vault -/// @notice Proxied version of the parent contract. -/// @dev Deploy this contract as a singleton per chain for use by multiple L2s -/// or L3s. No singleton check is performed within the code; it's the deployer's -/// responsibility to ensure this. Singleton deployment is essential for -/// enabling multi-hop bridging across all Taiko L2/L3s. -contract ProxiedSingletonERC721Vault is Proxied, ERC721Vault { } diff --git a/packages/protocol/foundry.toml b/packages/protocol/foundry.toml index 38c1e4552d9..e168a2a152a 100644 --- a/packages/protocol/foundry.toml +++ b/packages/protocol/foundry.toml @@ -13,10 +13,9 @@ gas_limit = '18446744073709551615' memory_limit = 2073741824 # Do not change the block_gas_limit value, TaikoL2.t.sol depends on it. -block_gas_limit = 30000000 #30M +block_gas_limit = 80000000 #80M # For mainnet_mock tokenomics test we need a huge value to run lots of iterations. # Use the above 30M for TaikoL2.t.sol related tests, only use this number with mainnet simulation. -#block_gas_limit = 3000000000 #3000M fs_permissions = [ diff --git a/packages/protocol/genesis/GenerateGenesis.g.sol b/packages/protocol/genesis/GenerateGenesis.g.sol index ff503f41f3f..efb5740eb99 100644 --- a/packages/protocol/genesis/GenerateGenesis.g.sol +++ b/packages/protocol/genesis/GenerateGenesis.g.sol @@ -1,146 +1,129 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "forge-std/console2.sol"; -import "forge-std/StdJson.sol"; -import "forge-std/Test.sol"; -import "../contracts/common/AddressManager.sol"; -import "../contracts/common/AddressResolver.sol"; -import "../contracts/common/EssentialContract.sol"; -import "../contracts/bridge/Bridge.sol"; -import "../contracts/tokenvault/ERC1155Vault.sol"; -import "../contracts/tokenvault/ERC20Vault.sol"; -import "../contracts/tokenvault/ERC721Vault.sol"; -import "../contracts/bridge/IBridge.sol"; -import "../contracts/test/erc20/RegularERC20.sol"; -import "../contracts/signal/SignalService.sol"; -import "../contracts/L2/TaikoL2.sol"; +import "forge-std/console2.sol"; +import "forge-std/StdJson.sol"; +import "forge-std/Test.sol"; +import "../contracts/common/EssentialContract.sol"; +import "../contracts/bridge/Bridge.sol"; +import "../contracts/tokenvault/ERC1155Vault.sol"; +import "../contracts/tokenvault/ERC20Vault.sol"; +import "../contracts/tokenvault/ERC721Vault.sol"; +import "../contracts/test/erc20/RegularERC20.sol"; +import "../contracts/signal/SignalService.sol"; +import "../contracts/L2/TaikoL2.sol"; contract TestGenerateGenesis is Test, AddressResolver { using stdJson for string; - string private configJSON = vm.readFile( - string.concat(vm.projectRoot(), "/deployments/genesis_config.json") - ); - string private genesisAllocJSON = vm.readFile( - string.concat(vm.projectRoot(), "/deployments/genesis_alloc.json") - ); + string private configJSON = + vm.readFile(string.concat(vm.projectRoot(), "/deployments/genesis_config.json")); + string private genesisAllocJSON = + vm.readFile(string.concat(vm.projectRoot(), "/deployments/genesis_alloc.json")); address private owner = configJSON.readAddress(".contractOwner"); - address private admin = configJSON.readAddress(".contractAdmin"); - function testSingletonContractDeployment() public { + function testSharedContractsDeployment() public { assertEq(block.chainid, 167); // check bytecode - checkDeployedCode("ProxiedSingletonERC20Vault"); - checkDeployedCode("ProxiedSingletonERC721Vault"); - checkDeployedCode("ProxiedSingletonERC1155Vault"); - checkDeployedCode("ProxiedSingletonBridge"); - checkDeployedCode("ProxiedSingletonSignalService"); - checkDeployedCode("ProxiedSingletonAddressManagerForSingletons"); - checkDeployedCode("ProxiedBridgedERC20"); - checkDeployedCode("ProxiedBridgedERC721"); - checkDeployedCode("ProxiedBridgedERC1155"); + checkDeployedCode("ERC20Vault"); + checkDeployedCode("ERC721Vault"); + checkDeployedCode("ERC1155Vault"); + checkDeployedCode("Bridge"); + checkDeployedCode("SignalService"); + checkDeployedCode("SharedAddressManager"); + checkDeployedCode("BridgedERC20Impl"); + checkDeployedCode("BridgedERC721Impl"); + checkDeployedCode("BridgedERC1155Impl"); // check proxy implementations - checkProxyImplementation("SingletonERC20VaultProxy", "ProxiedSingletonERC20Vault"); - checkProxyImplementation("SingletonERC721VaultProxy", "ProxiedSingletonERC721Vault"); - checkProxyImplementation("SingletonERC1155VaultProxy", "ProxiedSingletonERC1155Vault"); - checkProxyImplementation("SingletonBridgeProxy", "ProxiedSingletonBridge"); - checkProxyImplementation("SingletonSignalServiceProxy", "ProxiedSingletonSignalService"); - checkProxyImplementation( - "SingletonAddressManagerForSingletonsProxy", "ProxiedSingletonAddressManagerForSingletons" - ); - - // check proxies - checkDeployedCode("SingletonERC20VaultProxy"); - checkDeployedCode("SingletonERC721VaultProxy"); - checkDeployedCode("SingletonERC1155VaultProxy"); - checkDeployedCode("SingletonBridgeProxy"); - checkDeployedCode("SingletonSignalServiceProxy"); - checkDeployedCode("SingletonAddressManagerForSingletonsProxy"); + checkProxyImplementation("ERC20Vault", "ERC20VaultImpl"); + checkProxyImplementation("ERC721Vault", "ERC721VaultImpl"); + checkProxyImplementation("ERC1155Vault", "ERC1155VaultImpl"); + checkProxyImplementation("Bridge", "BridgeImpl"); + checkProxyImplementation("SignalService", "SignalServiceImpl"); + checkProxyImplementation("SharedAddressManager", "SharedAddressManagerImpl"); + + // // check proxies + checkDeployedCode("ERC20Vault"); + checkDeployedCode("ERC721Vault"); + checkDeployedCode("ERC1155Vault"); + checkDeployedCode("Bridge"); + checkDeployedCode("SignalService"); + checkDeployedCode("SharedAddressManager"); } - function testNonSingletonContractDeployment() public { + function testRollupContractsDeployment() public { // check bytecode - checkDeployedCode("ProxiedSingletonTaikoL2"); - checkDeployedCode("ProxiedAddressManager"); + checkDeployedCode("TaikoL2"); + checkDeployedCode("RollupAddressManager"); // check proxy implementations - checkProxyImplementation("SingletonTaikoL2Proxy", "ProxiedSingletonTaikoL2"); - checkProxyImplementation("AddressManagerProxy", "ProxiedAddressManager"); + checkProxyImplementation("TaikoL2", "TaikoL2Impl"); + checkProxyImplementation("RollupAddressManager", "RollupAddressManagerImpl"); // check proxies - checkDeployedCode("SingletonTaikoL2Proxy"); - checkDeployedCode("AddressManagerProxy"); + checkDeployedCode("TaikoL2"); + checkDeployedCode("RollupAddressManager"); } - function testAddressManager() public { - AddressManager addressManager = - AddressManager(getPredeployedContractAddress("AddressManagerProxy")); - - assertEq(owner, addressManager.owner()); + function testSharedAddressManager() public { + AddressManager addressManagerProxy = + AddressManager(getPredeployedContractAddress("SharedAddressManager")); - checkSavedAddress(addressManager, "SingletonTaikoL2Proxy", "taiko"); - checkSavedAddress( - addressManager, "SingletonSignalServiceProxy", "signal_service" - ); + assertEq(owner, addressManagerProxy.owner()); - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("AddressManagerProxy")) - ); + checkSavedAddress(addressManagerProxy, "Bridge", "bridge"); + checkSavedAddress(addressManagerProxy, "ERC20Vault", "erc20_vault"); + checkSavedAddress(addressManagerProxy, "ERC721Vault", "erc721_vault"); + checkSavedAddress(addressManagerProxy, "ERC1155Vault", "erc1155_vault"); + checkSavedAddress(addressManagerProxy, "SignalService", "signal_service"); AddressManager newAddressManager = new AddressManager(); - vm.startPrank(admin); + AddressManager addressManager = + AddressManager(getPredeployedContractAddress("SharedAddressManagerImpl")); + + vm.startPrank(addressManager.owner()); - proxy.upgradeTo(address(newAddressManager)); + addressManager.upgradeTo(address(newAddressManager)); - assertEq(proxy.implementation(), address(newAddressManager)); vm.stopPrank(); } - function testSingletonAddressManagerForSingletons() public { - AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SingletonAddressManagerForSingletonsProxy")); + function testRollupAddressManager() public { + AddressManager addressManagerProxy = + AddressManager(getPredeployedContractAddress("RollupAddressManager")); - assertEq(owner, addressManager.owner()); + assertEq(owner, addressManagerProxy.owner()); - checkSavedAddress(addressManager, "SingletonBridgeProxy", "bridge"); - checkSavedAddress(addressManager, "SingletonERC20VaultProxy", "erc20_vault"); - checkSavedAddress(addressManager, "SingletonERC721VaultProxy", "erc721_vault"); - checkSavedAddress(addressManager, "SingletonERC1155VaultProxy", "erc1155_vault"); - checkSavedAddress( - addressManager, "SingletonSignalServiceProxy", "signal_service" - ); + checkSavedAddress(addressManagerProxy, "TaikoL2", "taiko"); + checkSavedAddress(addressManagerProxy, "SignalService", "signal_service"); - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonAddressManagerForSingletonsProxy")) - ); + AddressManager addressManager = + AddressManager(getPredeployedContractAddress("RollupAddressManagerImpl")); AddressManager newAddressManager = new AddressManager(); - vm.startPrank(admin); + vm.startPrank(addressManager.owner()); - proxy.upgradeTo(address(newAddressManager)); + addressManager.upgradeTo(address(newAddressManager)); - assertEq(proxy.implementation(), address(newAddressManager)); vm.stopPrank(); } function testTaikoL2() public { - TaikoL2 taikoL2 = TaikoL2(getPredeployedContractAddress("SingletonTaikoL2Proxy")); + TaikoL2 taikoL2Proxy = TaikoL2(getPredeployedContractAddress("TaikoL2")); - vm.startPrank(taikoL2.GOLDEN_TOUCH_ADDRESS()); + vm.startPrank(taikoL2Proxy.GOLDEN_TOUCH_ADDRESS()); for (uint32 i = 0; i < 300; ++i) { vm.roll(block.number + 1); vm.warp(block.number + 12); - vm.fee(taikoL2.getBasefee(12, i)); + vm.fee(taikoL2Proxy.getBasefee(12, i)); uint256 gasLeftBefore = gasleft(); - taikoL2.anchor( + taikoL2Proxy.anchor( keccak256(abi.encodePacked(block.timestamp, i)), keccak256(abi.encodePacked(block.timestamp, i)), i + 1, @@ -149,36 +132,30 @@ contract TestGenerateGenesis is Test, AddressResolver { if (i == 299) { console2.log( - "TaikoL2.anchor gas cost after 256 L2 blocks:", - gasLeftBefore - gasleft() + "TaikoL2.anchor gas cost after 256 L2 blocks:", gasLeftBefore - gasleft() ); } } vm.stopPrank(); - vm.startPrank(admin); + TaikoL2 taikoL2 = TaikoL2(getPredeployedContractAddress("TaikoL2Impl")); - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonTaikoL2Proxy")) - ); + vm.startPrank(taikoL2.owner()); TaikoL2 newTaikoL2 = new TaikoL2(); - proxy.upgradeTo(address(newTaikoL2)); + taikoL2.upgradeTo(address(newTaikoL2)); - assertEq(proxy.implementation(), address(newTaikoL2)); vm.stopPrank(); } function testSingletonBridge() public { - address payable bridgeAddress = - payable(getPredeployedContractAddress("SingletonBridgeProxy")); - Bridge bridge = Bridge(bridgeAddress); + Bridge bridgeProxy = Bridge(payable(getPredeployedContractAddress("Bridge"))); - assertEq(owner, bridge.owner()); + assertEq(owner, bridgeProxy.owner()); vm.expectRevert(Bridge.B_PERMISSION_DENIED.selector); - bridge.processMessage( + bridgeProxy.processMessage( IBridge.Message({ id: 0, from: address(0), @@ -196,14 +173,14 @@ contract TestGenerateGenesis is Test, AddressResolver { "" ); - assertEq(bridge.paused(), false); + assertEq(bridgeProxy.paused(), false); vm.startPrank(owner); - bridge.pause(); - assertEq(bridge.paused(), true); + bridgeProxy.pause(); + assertEq(bridgeProxy.paused(), true); - vm.expectRevert(EssentialContract.INVALID_PAUSE_STATUS.selector); - bridge.processMessage( + vm.expectRevert(OwnerUUPSUpgradable.INVALID_PAUSE_STATUS.selector); + bridgeProxy.processMessage( IBridge.Message({ id: 0, from: address(0), @@ -221,161 +198,139 @@ contract TestGenerateGenesis is Test, AddressResolver { "" ); - bridge.unpause(); - assertEq(bridge.paused(), false); - vm.stopPrank(); + bridgeProxy.unpause(); + assertEq(bridgeProxy.paused(), false); - vm.startPrank(admin); - - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonBridgeProxy")) - ); + Bridge bridge = Bridge(payable(getPredeployedContractAddress("BridgeImpl"))); Bridge newBridge = new Bridge(); - proxy.upgradeTo(address(newBridge)); + bridge.upgradeTo(address(newBridge)); - assertEq(proxy.implementation(), address(newBridge)); vm.stopPrank(); } - function testSingletonERC20Vault() public { - address erc20VaultAddress = - getPredeployedContractAddress("SingletonERC20VaultProxy"); - address bridgeAddress = getPredeployedContractAddress("SingletonBridgeProxy"); + address erc20VaultAddress = getPredeployedContractAddress("ERC20Vault"); + address bridgeAddress = getPredeployedContractAddress("Bridge"); - ERC20Vault erc20Vault = ERC20Vault(erc20VaultAddress); + ERC20Vault erc20VaultProxy = ERC20Vault(erc20VaultAddress); AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SingletonAddressManagerForSingletonsProxy")); + AddressManager(getPredeployedContractAddress("SharedAddressManager")); - assertEq(owner, erc20Vault.owner()); + assertEq(owner, erc20VaultProxy.owner()); vm.startPrank(addressManager.owner()); addressManager.setAddress(1, "bridge", bridgeAddress); addressManager.setAddress(1, "erc20_vault", erc20VaultAddress); vm.stopPrank(); - vm.startPrank(admin); + ERC20Vault erc20Vault = ERC20Vault(getPredeployedContractAddress("ERC20VaultImpl")); - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonERC20VaultProxy")) - ); + vm.startPrank(erc20Vault.owner()); ERC20Vault newERC20Vault = new ERC20Vault(); - proxy.upgradeTo(address(newERC20Vault)); + erc20Vault.upgradeTo(address(newERC20Vault)); - assertEq(proxy.implementation(), address(newERC20Vault)); vm.stopPrank(); } function testSingletonERC721Vault() public { - address erc721VaultAddress = - getPredeployedContractAddress("SingletonERC721VaultProxy"); - address bridgeAddress = getPredeployedContractAddress("SingletonBridgeProxy"); + address erc721VaultAddress = getPredeployedContractAddress("ERC721Vault"); + address bridgeAddress = getPredeployedContractAddress("Bridge"); - ERC721Vault erc721Vault = ERC721Vault(erc721VaultAddress); + OwnerUUPSUpgradable erc721VaultProxy = OwnerUUPSUpgradable(erc721VaultAddress); AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SingletonAddressManagerForSingletonsProxy")); + AddressManager(getPredeployedContractAddress("SharedAddressManager")); - assertEq(owner, erc721Vault.owner()); + assertEq(owner, erc721VaultProxy.owner()); vm.startPrank(addressManager.owner()); addressManager.setAddress(1, "bridge", bridgeAddress); addressManager.setAddress(1, "erc721_vault", erc721VaultAddress); vm.stopPrank(); - vm.startPrank(admin); - - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonERC721VaultProxy")) - ); + ERC721Vault erc721Vault = ERC721Vault(getPredeployedContractAddress("ERC721VaultImpl")); + vm.startPrank(erc721Vault.owner()); ERC721Vault newERC721Vault = new ERC721Vault(); - proxy.upgradeTo(address(newERC721Vault)); + erc721Vault.upgradeTo(address(newERC721Vault)); - assertEq(proxy.implementation(), address(newERC721Vault)); vm.stopPrank(); } function testSingletonERC1155Vault() public { - address erc1155VaultAddress = - getPredeployedContractAddress("SingletonERC1155VaultProxy"); - address bridgeAddress = getPredeployedContractAddress("SingletonBridgeProxy"); + address erc1155VaultProxyAddress = getPredeployedContractAddress("ERC1155Vault"); + address bridgeProxyAddress = getPredeployedContractAddress("Bridge"); - ERC1155Vault erc1155Vault = ERC1155Vault(erc1155VaultAddress); + OwnerUUPSUpgradable erc1155VaultProxy = OwnerUUPSUpgradable(erc1155VaultProxyAddress); AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SingletonAddressManagerForSingletonsProxy")); + AddressManager(getPredeployedContractAddress("SharedAddressManager")); - assertEq(owner, erc1155Vault.owner()); + assertEq(owner, erc1155VaultProxy.owner()); vm.startPrank(addressManager.owner()); - addressManager.setAddress(1, "bridge", bridgeAddress); - addressManager.setAddress(1, "erc1155_vault", erc1155VaultAddress); + addressManager.setAddress(1, "bridge", bridgeProxyAddress); + addressManager.setAddress(1, "erc1155_vault", erc1155VaultProxyAddress); vm.stopPrank(); - vm.startPrank(admin); + address erc1155VaultAddress = getPredeployedContractAddress("ERC1155VaultImpl"); - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonERC1155VaultProxy")) - ); + ERC1155Vault erc1155Vault = ERC1155Vault(erc1155VaultAddress); + + vm.startPrank(erc1155Vault.owner()); ERC1155Vault newERC1155Vault = new ERC1155Vault(); - proxy.upgradeTo(address(newERC1155Vault)); + erc1155Vault.upgradeTo(address(newERC1155Vault)); - assertEq(proxy.implementation(), address(newERC1155Vault)); vm.stopPrank(); } function testSingletonSignalService() public { - SignalService signalService = - SignalService(getPredeployedContractAddress("SingletonSignalServiceProxy")); + SignalService signalServiceProxy = + SignalService(getPredeployedContractAddress("SignalService")); - assertEq(owner, signalService.owner()); + assertEq(owner, signalServiceProxy.owner()); - signalService.sendSignal(keccak256(abi.encodePacked(block.prevrandao))); + signalServiceProxy.sendSignal(keccak256(abi.encodePacked(block.prevrandao))); - assertEq(true, signalService.isAuthorizedAs(getPredeployedContractAddress("SingletonTaikoL2Proxy"), bytes32((block.chainid)))); + assertEq( + true, + signalServiceProxy.isAuthorizedAs( + getPredeployedContractAddress("TaikoL2"), bytes32((block.chainid)) + ) + ); - vm.startPrank(admin); + vm.startPrank(owner); - TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy( - payable(getPredeployedContractAddress("SingletonSignalServiceProxy")) - ); + SignalService signalService = + SignalService(payable(getPredeployedContractAddress("SignalServiceImpl"))); SignalService newSignalService = new SignalService(); - proxy.upgradeTo(address(newSignalService)); + signalService.upgradeTo(address(newSignalService)); - assertEq(proxy.implementation(), address(newSignalService)); vm.stopPrank(); } function testERC20() public { - RegularERC20 regularERC20 = - RegularERC20(getPredeployedContractAddress("RegularERC20")); + RegularERC20 regularERC20 = RegularERC20(getPredeployedContractAddress("RegularERC20")); assertEq(regularERC20.name(), "RegularERC20"); assertEq(regularERC20.symbol(), "RGL"); } - function getPredeployedContractAddress(string memory contractName) - private - returns (address) - { - return configJSON.readAddress( - string.concat(".contractAddresses.", contractName) - ); + function getPredeployedContractAddress(string memory contractName) private returns (address) { + return configJSON.readAddress(string.concat(".contractAddresses.", contractName)); } function checkDeployedCode(string memory contractName) private { address contractAddress = getPredeployedContractAddress(contractName); - string memory deployedCode = genesisAllocJSON.readString( - string.concat(".", vm.toString(contractAddress), ".code") - ); + string memory deployedCode = + genesisAllocJSON.readString(string.concat(".", vm.toString(contractAddress), ".code")); assertEq(address(contractAddress).code, vm.parseBytes(deployedCode)); } @@ -386,16 +341,13 @@ contract TestGenerateGenesis is Test, AddressResolver { ) private { - vm.startPrank(admin); + vm.startPrank(owner); address contractAddress = getPredeployedContractAddress(contractName); address proxyAddress = getPredeployedContractAddress(proxyName); - TransparentUpgradeableProxy proxy = - TransparentUpgradeableProxy(payable(proxyAddress)); - - assertEq(proxy.implementation(), address(contractAddress)); + OwnerUUPSUpgradable proxy = OwnerUUPSUpgradable(payable(proxyAddress)); - assertEq(proxy.admin(), admin); + assertEq(proxy.owner(), owner); vm.stopPrank(); } diff --git a/packages/protocol/genesis/test_config.js b/packages/protocol/genesis/test_config.js index 3bce69b791b..abb25629703 100644 --- a/packages/protocol/genesis/test_config.js +++ b/packages/protocol/genesis/test_config.js @@ -3,7 +3,6 @@ const ADDRESS_LENGTH = 40; module.exports = { contractOwner: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - contractAdmin: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", chainId: 167, seedAccounts: [ { @@ -80,39 +79,33 @@ module.exports = { }, ], get contractAddresses() { - // ============ Implementations ============ - // Singletons return { - ProxiedSingletonBridge: getConstantAddress(`0${this.chainId}`, 1), - ProxiedSingletonERC20Vault: getConstantAddress(`0${this.chainId}`, 2), - ProxiedSingletonERC721Vault: getConstantAddress(`0${this.chainId}`, 3), - ProxiedSingletonERC1155Vault: getConstantAddress(`0${this.chainId}`, 4), - ProxiedSingletonSignalService: getConstantAddress(`0${this.chainId}`, 5), - ProxiedSingletonAddressManagerForSingletons: getConstantAddress( - `0${this.chainId}`, - 6, - ), - // Non-singletons - ProxiedSingletonTaikoL2: getConstantAddress(`0${this.chainId}`, 10001), - ProxiedAddressManager: getConstantAddress(`0${this.chainId}`, 10002), - ProxiedBridgedERC20: getConstantAddress(`0${this.chainId}`, 10096), - ProxiedBridgedERC721: getConstantAddress(`0${this.chainId}`, 10097), - ProxiedBridgedERC1155: getConstantAddress(`0${this.chainId}`, 10098), + // ============ Implementations ============ + // Shared Contracts + BridgeImpl: getConstantAddress(`0${this.chainId}`, 1), + ERC20VaultImpl: getConstantAddress(`0${this.chainId}`, 2), + ERC721VaultImpl: getConstantAddress(`0${this.chainId}`, 3), + ERC1155VaultImpl: getConstantAddress(`0${this.chainId}`, 4), + SignalServiceImpl: getConstantAddress(`0${this.chainId}`, 5), + SharedAddressManagerImpl: getConstantAddress(`0${this.chainId}`, 6), + BridgedERC20Impl: getConstantAddress(`0${this.chainId}`, 10096), + BridgedERC721Impl: getConstantAddress(`0${this.chainId}`, 10097), + BridgedERC1155Impl: getConstantAddress(`0${this.chainId}`, 10098), RegularERC20: getConstantAddress(`0${this.chainId}`, 10099), + // Rollup Contracts + TaikoL2Impl: getConstantAddress(`0${this.chainId}`, 10001), + RollupAddressManagerImpl: getConstantAddress(`0${this.chainId}`, 10002), // ============ Proxies ============ - // Singletons - SingletonBridgeProxy: getConstantAddress(this.chainId, 1), - SingletonERC20VaultProxy: getConstantAddress(this.chainId, 2), - SingletonERC721VaultProxy: getConstantAddress(this.chainId, 3), - SingletonERC1155VaultProxy: getConstantAddress(this.chainId, 4), - SingletonSignalServiceProxy: getConstantAddress(this.chainId, 5), - SingletonAddressManagerForSingletonsProxy: getConstantAddress( - this.chainId, - 6, - ), - // Non-singletons - SingletonTaikoL2Proxy: getConstantAddress(this.chainId, 10001), - AddressManagerProxy: getConstantAddress(this.chainId, 10002), + // Shared Contracts + Bridge: getConstantAddress(this.chainId, 1), + ERC20Vault: getConstantAddress(this.chainId, 2), + ERC721Vault: getConstantAddress(this.chainId, 3), + ERC1155Vault: getConstantAddress(this.chainId, 4), + SignalService: getConstantAddress(this.chainId, 5), + SharedAddressManager: getConstantAddress(this.chainId, 6), + // Rollup Contracts + TaikoL2: getConstantAddress(this.chainId, 10001), + RollupAddressManager: getConstantAddress(this.chainId, 10002), }; }, param1559: { diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 75a823420fb..3981df72202 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -3,6 +3,7 @@ "version": "0.15.2", "private": true, "scripts": { + "buildMerkle": "ts-node ./utils/airdrop/buildMerkleTree.ts ./utils/airdrop/airdrop_db/example_claimList.json", "clean": "rm -rf abis cache && forge clean", "compile": "forge build", "compile:hardhat": "pnpm hardhat compile", @@ -19,8 +20,7 @@ "test": "forge test -vvv --match-path test/*.t.sol", "test:coverage": "mkdir -p coverage && forge coverage --report lcov && lcov --remove ./lcov.info -o ./coverage/lcov.info 'test/' 'script/' 'contracts/thirdparty/' && genhtml coverage/lcov.info --branch-coverage --output-dir coverage --ignore-errors category && open coverage/index.html", "test:genesis": "pnpm compile && pnpm compile:hardhat && FOUNDRY_PROFILE=genesis ./genesis/generate_genesis.test.sh", - "export:simconf": "forge test --match-test 'test_simulation' -vv > simulation/out/simconf_$(date +%s).txt", - "upgrade": "./script/upgrade_to.sh" + "export:simconf": "forge test --match-test 'test_simulation' -vv > simulation/out/simconf_$(date +%s).txt" }, "keywords": [ "ZKP", @@ -79,5 +79,8 @@ "ts-node": "^10.9.1", "typechain": "^8.3.2", "typescript": "^5.2.2" + }, + "dependencies": { + "merkletreejs": "^0.3.11" } } diff --git a/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol b/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol index 1fa3b22f508..a0832a3fe55 100644 --- a/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol +++ b/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol @@ -6,7 +6,6 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "forge-std/Script.sol"; import "forge-std/console2.sol"; import "../contracts/signal/SignalService.sol"; @@ -25,8 +24,7 @@ contract AuthorizeRemoteTaikoProtocols is Script { vm.startBroadcast(privateKey); - ProxiedSingletonSignalService signalService = - ProxiedSingletonSignalService(payable(signalServiceAddress)); + SignalService signalService = SignalService(payable(signalServiceAddress)); for (uint256 i; i < remoteChainIDs.length; ++i) { console2.log(remoteTaikoProtocols[i], "--->", remoteChainIDs[i]); signalService.authorize(remoteTaikoProtocols[i], bytes32(remoteChainIDs[i])); diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index 99963ed0f34..30894a1e22c 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -7,7 +7,6 @@ pragma solidity ^0.8.20; import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "forge-std/Script.sol"; import "forge-std/console2.sol"; @@ -20,205 +19,375 @@ import "../contracts/L1/verifiers/PseZkVerifier.sol"; import "../contracts/L1/verifiers/SgxVerifier.sol"; import "../contracts/L1/verifiers/SgxAndZkVerifier.sol"; import "../contracts/L1/verifiers/GuardianVerifier.sol"; -import "../contracts/L1/tiers/ITierProvider.sol"; import "../contracts/L1/tiers/TaikoA6TierProvider.sol"; +import "../contracts/L1/hooks/AssignmentHook.sol"; +import "../contracts/L1/gov/TaikoTimelockController.sol"; +import "../contracts/L1/gov/TaikoGovernor.sol"; import "../contracts/bridge/Bridge.sol"; -import "../contracts/tokenvault/BridgedERC20.sol"; -import "../contracts/tokenvault/BridgedERC721.sol"; -import "../contracts/tokenvault/BridgedERC1155.sol"; import "../contracts/tokenvault/ERC20Vault.sol"; import "../contracts/tokenvault/ERC1155Vault.sol"; import "../contracts/tokenvault/ERC721Vault.sol"; import "../contracts/signal/SignalService.sol"; -import "../contracts/common/AddressManager.sol"; import "../contracts/test/erc20/FreeMintERC20.sol"; import "../contracts/test/erc20/MayFailFreeMintERC20.sol"; +import "../contracts/libs/LibDeployHelper.sol"; + /// @title DeployOnL1 /// @notice This script deploys the core Taiko protocol smart contract on L1, /// initializing the rollup. - contract DeployOnL1 is Script { - // NOTE: this value must match the constant defined in GuardianProver.sol uint256 public constant NUM_GUARDIANS = 5; - bytes32 public genesisHash = vm.envBytes32("L2_GENESIS_HASH"); - - uint256 public deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - address public taikoL2Address = vm.envAddress("TAIKO_L2_ADDRESS"); - - address public l2SignalService = vm.envAddress("L2_SIGNAL_SERVICE"); - - address public owner = vm.envAddress("OWNER"); + address public constant MAINNET_SECURITY_COUNCIL = 0x7C50d60743D3FCe5a39FdbF687AFbAe5acFF49Fd; - address[] public guardianProvers = vm.envAddress("GUARDIAN_PROVERS", ","); + address securityCouncil = + block.chainid == 1 ? MAINNET_SECURITY_COUNCIL : vm.envAddress("SECURITY_COUNCIL"); - address public proposer = vm.envAddress("PROPOSER"); - - address public proposerOne = vm.envAddress("PROPOSER_ONE"); - - address public singletonBridge = vm.envAddress("SINGLETON_BRIDGE"); - - address public singletonSignalService = vm.envAddress("SINGLETON_SIGNAL_SERVICE"); - - uint256 public tierProvider = vm.envUint("TIER_PROVIDER"); - - address public taikoTokenPremintRecipient = vm.envAddress("TAIKO_TOKEN_PREMINT_RECIPIENT"); - - TaikoL1 taikoL1; - address public addressManagerProxy; + modifier broadcast() { + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + require(privateKey != 0, "invalid priv key"); + vm.startBroadcast(); + _; + vm.stopBroadcast(); + } - enum TierProviders { TAIKO_ALPHA6 } + function run() external broadcast { + addressNotNull(vm.envAddress("TAIKO_L2_ADDRESS"), "TAIKO_L2_ADDRESS"); + addressNotNull(vm.envAddress("L2_SIGNAL_SERVICE"), "L2_SIGNAL_SERVICE"); + require(vm.envBytes32("L2_GENESIS_HASH") != 0, "L2_GENESIS_HASH"); + + // --------------------------------------------------------------- + // Deploy shared contracts + (address sharedAddressManager, address timelock) = deploySharedContracts(); + console2.log("sharedAddressManager: ", sharedAddressManager); + console2.log("timelock: ", timelock); + // --------------------------------------------------------------- + // Deploy rollup contracts + address rollupAddressManager = deployRollupContracts(sharedAddressManager, timelock); + + // --------------------------------------------------------------- + // Signal service need to authorize the new rollup + address signalServiceAddr = + AddressManager(sharedAddressManager).getAddress(uint64(block.chainid), "signal_service"); + addressNotNull(signalServiceAddr, "signalServiceAddr"); + SignalService signalService = SignalService(signalServiceAddr); + + address taikoL1Addr = + AddressManager(rollupAddressManager).getAddress(uint64(block.chainid), "taiko"); + addressNotNull(taikoL1Addr, "taikoL1Addr"); + TaikoL1 taikoL1 = TaikoL1(payable(taikoL1Addr)); - error FAILED_TO_DEPLOY_PLONK_VERIFIER(string contractPath); + uint64 l2ChainId = taikoL1.getConfig().chainId; + require(l2ChainId != block.chainid, "same chainid"); - function run() external { - require(owner != address(0), "owner is zero"); - require(taikoL2Address != address(0), "taikoL2Address is zero"); - require(l2SignalService != address(0), "l2SignalService is zero"); - require(guardianProvers.length == NUM_GUARDIANS, "invalid guardian provers number"); - if (singletonBridge == address(0)) { - require( - singletonSignalService == address(0), "non-empty singleton signal service address" - ); + if (signalService.owner() == msg.sender) { + signalService.authorize(taikoL1Addr, bytes32(block.chainid)); + signalService.authorize(vm.envAddress("TAIKO_L2_ADDRESS"), bytes32(uint256(l2ChainId))); + signalService.transferOwnership(timelock); } else { - require(singletonSignalService != address(0), "empty singleton signal service address"); + console2.log("------------------------------------------"); + console2.log("Warning - you need to transact manually:"); + console2.log("signalService.authorize(taikoL1Addr, bytes32(block.chainid))"); + console2.log("- signalService : ", signalServiceAddr); + console2.log("- taikoL1Addr : ", taikoL1Addr); + console2.log("- chainId : ", block.chainid); } - vm.startBroadcast(deployerPrivateKey); - // AddressManager - AddressManager addressManager = new ProxiedAddressManager(); - addressManagerProxy = deployProxy( - "address_manager", address(addressManager), bytes.concat(addressManager.init.selector) - ); - - // TaikoL1 - taikoL1 = new ProxiedTaikoL1(); - uint64 l2ChainId = taikoL1.getConfig().chainId; - require(l2ChainId != block.chainid, "same chainid"); + // --------------------------------------------------------------- + // Register shared contracts in the new rollup + LibDeployHelper.copyRegister(rollupAddressManager, sharedAddressManager, "taiko_token"); + LibDeployHelper.copyRegister(rollupAddressManager, sharedAddressManager, "signal_service"); + LibDeployHelper.copyRegister(rollupAddressManager, sharedAddressManager, "bridge"); - setAddress(l2ChainId, "taiko", taikoL2Address); - setAddress(l2ChainId, "signal_service", l2SignalService); + address proposer = vm.envAddress("PROPOSER"); if (proposer != address(0)) { - setAddress("proposer", proposer); + LibDeployHelper.register(rollupAddressManager, "proposer", proposer); } + + address proposerOne = vm.envAddress("PROPOSER_ONE"); if (proposerOne != address(0)) { - setAddress("proposer_one", proposer); + LibDeployHelper.register(rollupAddressManager, "proposer_one", proposerOne); } - // TaikoToken - TaikoToken taikoToken = new ProxiedTaikoToken(); - - deployProxy( - "taiko_token", - address(taikoToken), - bytes.concat( - taikoToken.init.selector, - abi.encode( - addressManagerProxy, "Taiko Token Katla", "TTKOk", taikoTokenPremintRecipient - ) - ) + // --------------------------------------------------------------- + // Register L2 addresses + LibDeployHelper.register( + rollupAddressManager, "taiko", vm.envAddress("TAIKO_L2_ADDRESS"), l2ChainId ); - - // HorseToken - address horseToken = address(new FreeMintERC20("Horse Token", "HORSE")); - console2.log("HorseToken", horseToken); - - address taikoL1Proxy = deployProxy( - "taiko", - address(taikoL1), - bytes.concat(taikoL1.init.selector, abi.encode(addressManagerProxy, genesisHash)) + LibDeployHelper.register( + rollupAddressManager, "signal_service", vm.envAddress("L2_SIGNAL_SERVICE"), l2ChainId ); - setAddress("taiko", taikoL1Proxy); - // All bridging related contracts should be deployed as a singleton on - // each chain. - if (singletonBridge == address(0)) { - deployBridgeSuiteSingletons(); + // --------------------------------------------------------------- + // Deploy other contracts + deployAuxContracts(); + + if (AddressManager(sharedAddressManager).owner() == msg.sender) { + AddressManager(sharedAddressManager).transferOwnership(timelock); + } + if (AddressManager(rollupAddressManager).owner() == msg.sender) { + AddressManager(rollupAddressManager).transferOwnership(timelock); } + } - // Bridge and SignalService addresses will be used by TaikoL1. - setAddress("bridge", singletonBridge); - setAddress("signal_service", singletonSignalService); + function deploySharedContracts() + internal + returns (address sharedAddressManager, address timelock) + { + sharedAddressManager = vm.envAddress("SHARED_ADDRESS_MANAGER"); + if (sharedAddressManager != address(0)) { + return (sharedAddressManager, vm.envAddress("TIMELOCK_CONTROLLER")); + } - // Authorize the new TaikoL1 contract for shared signal service. - ProxiedSingletonSignalService(singletonSignalService).authorize( - taikoL1Proxy, bytes32(block.chainid) + // Deploy the timelock + timelock = deployProxy({ + name: "timelock_controller", + impl: address(new TaikoTimelockController()), + data: bytes.concat(TaikoTimelockController.init.selector, abi.encode(7 days)), + registerTo: address(0), + owner: address(0) + }); + + sharedAddressManager = deployProxy({ + name: "address_manager_for_bridge", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector), + registerTo: address(0), + owner: msg.sender // set to sender, transfer ownership to timelock after + }); + + address taikoToken = deployProxy({ + name: "taiko_token", + impl: address(new TaikoToken()), + data: bytes.concat( + TaikoToken.init.selector, + abi.encode( + vm.envString("TAIKO_TOKEN_NAME"), + vm.envString("TAIKO_TOKEN_SYMBOL"), + vm.envAddress("TAIKO_TOKEN_PREMINT_RECIPIENT") + ) + ), + registerTo: sharedAddressManager, + owner: timelock + }); + + address governor = deployProxy({ + name: "taiko_governor", + impl: address(new TaikoGovernor()), + data: bytes.concat(TaikoGovernor.init.selector, abi.encode(taikoToken, timelock)), + registerTo: address(0), + owner: timelock + }); + + // Setup time lock roles + TaikoTimelockController _timelock = TaikoTimelockController(payable(timelock)); + _timelock.grantRole(_timelock.PROPOSER_ROLE(), governor); + _timelock.grantRole(_timelock.PROPOSER_ROLE(), securityCouncil); + + _timelock.grantRole(_timelock.EXECUTOR_ROLE(), governor); + _timelock.grantRole(_timelock.EXECUTOR_ROLE(), securityCouncil); + + _timelock.grantRole(_timelock.CANCELLER_ROLE(), governor); + _timelock.grantRole(_timelock.CANCELLER_ROLE(), securityCouncil); + + _timelock.grantRole(_timelock.TIMELOCK_ADMIN_ROLE(), governor); + _timelock.grantRole(_timelock.TIMELOCK_ADMIN_ROLE(), securityCouncil); + _timelock.renounceRole(_timelock.TIMELOCK_ADMIN_ROLE(), msg.sender); + + _timelock.transferOwnership(securityCouncil); + + // Deploy Bridging contracts + deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector), + registerTo: sharedAddressManager, + owner: msg.sender // We set msg.sender as the owner and will change it later. + }); + + deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(sharedAddressManager)), + registerTo: sharedAddressManager, + owner: timelock + }); + + console2.log("------------------------------------------"); + console2.log( + "Warning - you need to register *all* counterparty bridges to enable multi-hop bridging:" ); - - // Guardian prover - ProxiedGuardianProver guardianProver = new ProxiedGuardianProver(); - address guardianProverProxy = deployProxy( - "guardian_prover", - address(guardianProver), - bytes.concat(guardianProver.init.selector, abi.encode(addressManagerProxy)) + console2.log( + "sharedAddressManager.setAddress(remoteChainId, \"bridge\", address(remoteBridge))" ); - address[NUM_GUARDIANS] memory guardians; - for (uint256 i = 0; i < NUM_GUARDIANS; ++i) { - guardians[i] = guardianProvers[i]; - } - ProxiedGuardianProver(guardianProverProxy).setGuardians(guardians); - - // Config provider - deployProxy("tier_provider", deployTierProvider(uint256(TierProviders.TAIKO_ALPHA6)), ""); - - // GuardianVerifier - GuardianVerifier guardianVerifier = new ProxiedGuardianVerifier(); - deployProxy( - "tier_guardian", - address(guardianVerifier), - bytes.concat(guardianVerifier.init.selector, abi.encode(addressManagerProxy)) + console2.log("- sharedAddressManager : ", sharedAddressManager); + + // Deploy Vaults + deployProxy({ + name: "erc20_vault", + impl: address(new ERC20Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(sharedAddressManager)), + registerTo: sharedAddressManager, + owner: timelock + }); + + deployProxy({ + name: "erc721_vault", + impl: address(new ERC721Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(sharedAddressManager)), + registerTo: sharedAddressManager, + owner: timelock + }); + + deployProxy({ + name: "erc1155_vault", + impl: address(new ERC1155Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(sharedAddressManager)), + registerTo: sharedAddressManager, + owner: timelock + }); + + console2.log("------------------------------------------"); + console2.log( + "Warning - you need to register *all* counterparty vaults to enable multi-hop bridging:" ); - - // SgxVerifier - SgxVerifier sgxVerifier = new ProxiedSgxVerifier(); - deployProxy( - "tier_sgx", - address(sgxVerifier), - bytes.concat(sgxVerifier.init.selector, abi.encode(addressManagerProxy)) + console2.log( + "sharedAddressManager.setAddress(remoteChainId, \"erc20_vault\", address(remoteERC20Vault))" ); - - // SgxAndZkVerifier - SgxAndZkVerifier sgxAndZkVerifier = new ProxiedSgxAndZkVerifier(); - deployProxy( - "tier_sgx_and_pse_zkevm", - address(sgxAndZkVerifier), - bytes.concat(sgxVerifier.init.selector, abi.encode(addressManagerProxy)) + console2.log( + "sharedAddressManager.setAddress(remoteChainId, \"erc721_vault\", address(remoteERC721Vault))" ); - - // PseZkVerifier - PseZkVerifier pseZkVerifier = new ProxiedPseZkVerifier(); - deployProxy( - "tier_pse_zkevm", - address(pseZkVerifier), - bytes.concat(pseZkVerifier.init.selector, abi.encode(addressManagerProxy)) + console2.log( + "sharedAddressManager.setAddress(remoteChainId, \"erc1155_vault\", address(remoteERC1155Vault))" ); + console2.log("- sharedAddressManager : ", sharedAddressManager); - // PlonkVerifier - deployPlonkVerifiers(pseZkVerifier); - - // Assignment Hook - AssignmentHook assignmentHook = new ProxiedAssignmentHook(); - - deployProxy( - "assignment_hook", - address(assignmentHook), - bytes.concat(assignmentHook.init.selector, abi.encode(addressManagerProxy)) + // Deploy Bridged token implementations + LibDeployHelper.register(sharedAddressManager, "bridged_erc20", address(new BridgedERC20())); + LibDeployHelper.register( + sharedAddressManager, "bridged_erc721", address(new BridgedERC721()) + ); + LibDeployHelper.register( + sharedAddressManager, "bridged_erc1155", address(new BridgedERC1155()) ); - - vm.stopBroadcast(); } - function deployPlonkVerifiers(PseZkVerifier pseZkVerifier) private { + function deployRollupContracts( + address _sharedAddressManager, + address timelock + ) + internal + returns (address rollupAddressManager) + { + addressNotNull(_sharedAddressManager, "sharedAddressManager"); + addressNotNull(timelock, "timelock"); + + rollupAddressManager = deployProxy({ + name: "address_manager_for_rollup", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector), + registerTo: address(0), + owner: msg.sender // set to msg.sender, change to timelock after + }); + + deployProxy({ + name: "taiko", + impl: address(new TaikoL1()), + data: bytes.concat( + TaikoL1.init.selector, + abi.encode(rollupAddressManager, vm.envBytes32("L2_GENESIS_HASH")) + ), + registerTo: rollupAddressManager, + owner: timelock + }); + + deployProxy({ + name: "assignment_hook", + impl: address(new AssignmentHook()), + data: bytes.concat(AssignmentHook.init.selector, abi.encode(rollupAddressManager)), + registerTo: address(0), + owner: timelock + }); + + deployProxy({ + name: "tier_provider", + impl: address(new TaikoA6TierProvider()), + data: bytes.concat(TaikoA6TierProvider.init.selector), + registerTo: rollupAddressManager, + owner: timelock + }); + + deployProxy({ + name: "tier_guardian", + impl: address(new GuardianVerifier()), + data: bytes.concat(GuardianVerifier.init.selector, abi.encode(rollupAddressManager)), + registerTo: rollupAddressManager, + owner: timelock + }); + + deployProxy({ + name: "tier_sgx", + impl: address(new SgxVerifier()), + data: bytes.concat(SgxVerifier.init.selector, abi.encode(rollupAddressManager)), + registerTo: rollupAddressManager, + owner: timelock + }); + + deployProxy({ + name: "tier_sgx_and_pse_zkevm", + impl: address(new SgxAndZkVerifier()), + data: bytes.concat(SgxAndZkVerifier.init.selector, abi.encode(rollupAddressManager)), + registerTo: rollupAddressManager, + owner: timelock + }); + + address pseZkVerifier = deployProxy({ + name: "tier_pse_zkevm", + impl: address(new PseZkVerifier()), + data: bytes.concat(PseZkVerifier.init.selector, abi.encode(rollupAddressManager)), + registerTo: rollupAddressManager, + owner: timelock + }); + address[] memory plonkVerifiers = new address[](1); plonkVerifiers[0] = deployYulContract("contracts/L1/verifiers/PlonkVerifier.yulp"); for (uint16 i = 0; i < plonkVerifiers.length; ++i) { - setAddress(pseZkVerifier.getVerifierName(i), plonkVerifiers[i]); + LibDeployHelper.register( + rollupAddressManager, + PseZkVerifier(pseZkVerifier).getVerifierName(i), + plonkVerifiers[i] + ); + } + + address guardianProver = deployProxy({ + name: "guardian_prover", + impl: address(new GuardianProver()), + data: bytes.concat(GuardianProver.init.selector, abi.encode(rollupAddressManager)), + registerTo: rollupAddressManager, + owner: msg.sender + }); + + address[] memory guardianProvers = vm.envAddress("GUARDIAN_PROVERS", ","); + require(guardianProvers.length == NUM_GUARDIANS, "NUM_GUARDIANS"); + + address[NUM_GUARDIANS] memory guardians; + for (uint256 i = 0; i < NUM_GUARDIANS; ++i) { + guardians[i] = guardianProvers[i]; } + GuardianProver(guardianProver).setGuardians(guardians); + GuardianProver(guardianProver).transferOwnership(timelock); } - function deployYulContract(string memory contractPath) private returns (address) { + function deployAuxContracts() private { + address horseToken = address(new FreeMintERC20("Horse Token", "HORSE")); + console2.log("HorseToken", horseToken); + + address bullToken = address(new MayFailFreeMintERC20("Bull Token", "BULL")); + console2.log("BullToken", bullToken); + } + + function deployYulContract(string memory contractPath) private returns (address addr) { string[] memory cmds = new string[](3); cmds[0] = "bash"; cmds[1] = "-c"; @@ -230,157 +399,41 @@ contract DeployOnL1 is Script { ); bytes memory bytecode = vm.ffi(cmds); - - address deployedAddress; assembly { - deployedAddress := create(0, add(bytecode, 0x20), mload(bytecode)) + addr := create(0, add(bytecode, 0x20), mload(bytecode)) } - if (deployedAddress == address(0)) { - revert FAILED_TO_DEPLOY_PLONK_VERIFIER(contractPath); - } - - console2.log(contractPath, deployedAddress); - - return deployedAddress; - } - - function deployTierProvider(uint256 tier) private returns (address providerAddress) { - if (tier == uint256(TierProviders.TAIKO_ALPHA6)) { - return address(new TaikoA6TierProvider()); - } - - revert("invalid provider"); - } - - function deployBridgeSuiteSingletons() private { - // AddressManager - AddressManager addressManagerForSingletons = new ProxiedAddressManager(); - address addressManagerForSingletonsProxy = deployProxy( - address(0), - "address_manager_for_singletons", - address(addressManagerForSingletons), - bytes.concat(addressManagerForSingletons.init.selector) - ); - - // Bridge - Bridge bridge = new ProxiedSingletonBridge(); - singletonBridge = deployProxy( - addressManagerForSingletonsProxy, - "bridge", - address(bridge), - bytes.concat(bridge.init.selector, abi.encode(addressManagerForSingletonsProxy)) - ); - - // ERC20Vault - ERC20Vault erc20Vault = new ProxiedSingletonERC20Vault(); - deployProxy( - addressManagerForSingletonsProxy, - "erc20_vault", - address(erc20Vault), - bytes.concat(erc20Vault.init.selector, abi.encode(addressManagerForSingletonsProxy)) - ); - - // ERC721Vault - ERC721Vault erc721Vault = new ProxiedSingletonERC721Vault(); - deployProxy( - addressManagerForSingletonsProxy, - "erc721_vault", - address(erc721Vault), - bytes.concat(erc721Vault.init.selector, abi.encode(addressManagerForSingletonsProxy)) - ); - - // ERC1155Vault - ERC1155Vault erc1155Vault = new ProxiedSingletonERC1155Vault(); - deployProxy( - addressManagerForSingletonsProxy, - "erc1155_vault", - address(erc1155Vault), - bytes.concat(erc1155Vault.init.selector, abi.encode(addressManagerForSingletonsProxy)) - ); - - // SignalService - SignalService signalService = new ProxiedSingletonSignalService(); - singletonSignalService = deployProxy( - addressManagerForSingletonsProxy, - "signal_service", - address(signalService), - bytes.concat(signalService.init.selector, abi.encode(addressManagerForSingletonsProxy)) - ); - - // Deploy ProxiedBridged token contracts - setAddress( - addressManagerForSingletonsProxy, - uint64(block.chainid), - "proxied_bridged_erc20", - address(new ProxiedBridgedERC20()) - ); - setAddress( - addressManagerForSingletonsProxy, - uint64(block.chainid), - "proxied_bridged_erc721", - address(new ProxiedBridgedERC721()) - ); - setAddress( - addressManagerForSingletonsProxy, - uint64(block.chainid), - "proxied_bridged_erc1155", - address(new ProxiedBridgedERC1155()) - ); + addressNotNull(addr, "failed yul deployment"); + console2.log(contractPath, addr); } - function deployProxy( - string memory name, - address implementation, - bytes memory data - ) - private - returns (address proxy) - { - return deployProxy(addressManagerProxy, name, implementation, data); + function addressNotNull(address addr, string memory err) private pure { + require(addr != address(0), err); } function deployProxy( - address addressManager, string memory name, - address implementation, - bytes memory data + address impl, + bytes memory data, + address registerTo, + address owner ) private - returns (address proxy) + returns (address) { - proxy = address(new TransparentUpgradeableProxy(implementation, owner, data)); - - console2.log(name, "(impl) ->", implementation); - console2.log(name, "(proxy) ->", proxy); - - setAddress(addressManager, uint64(block.chainid), bytes32(bytes(name)), proxy); + address addr = LibDeployHelper.deployProxy({ + name: bytes32(bytes(name)), + impl: impl, + data: data, + registerTo: registerTo, + owner: owner + }); vm.writeJson( - vm.serializeAddress("deployment", name, proxy), + vm.serializeAddress("deployment", name, addr), string.concat(vm.projectRoot(), "/deployments/deploy_l1.json") ); - } - - function setAddress(bytes32 name, address addr) private { - setAddress(addressManagerProxy, uint64(block.chainid), name, addr); - } - function setAddress(uint256 chainId, bytes32 name, address addr) private { - setAddress(addressManagerProxy, uint64(chainId), name, addr); - } - - function setAddress( - address addressManager, - uint64 chainId, - bytes32 name, - address addr - ) - private - { - if (addressManager != address(0) && addr != address(0)) { - console2.log(chainId, uint256(name), "--->", addr); - AddressManager(addressManager).setAddress(chainId, name, addr); - } + return addr; } } diff --git a/packages/protocol/script/SetAddress.s.sol b/packages/protocol/script/SetAddress.s.sol index 781b7d7fc2c..d16a533461e 100644 --- a/packages/protocol/script/SetAddress.s.sol +++ b/packages/protocol/script/SetAddress.s.sol @@ -11,8 +11,6 @@ import "forge-std/console2.sol"; import "../contracts/common/AddressManager.sol"; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; - contract SetAddress is Script { uint256 public adminPrivateKey = vm.envUint("PRIVATE_KEY"); @@ -24,7 +22,7 @@ contract SetAddress is Script { address public addr = vm.envAddress("ADDRESS"); - ProxiedAddressManager proxy; + AddressManager proxy; function run() external { require(adminPrivateKey != 0, "PRIVATE_KEY not set"); @@ -35,7 +33,7 @@ contract SetAddress is Script { vm.startBroadcast(adminPrivateKey); - proxy = ProxiedAddressManager(payable(proxyAddress)); + proxy = AddressManager(payable(proxyAddress)); proxy.setAddress(domain, name, addr); diff --git a/packages/protocol/script/SetRemoteBridgeSuites.s.sol b/packages/protocol/script/SetRemoteBridgeSuites.s.sol index 540657e25d1..7651b68a637 100644 --- a/packages/protocol/script/SetRemoteBridgeSuites.s.sol +++ b/packages/protocol/script/SetRemoteBridgeSuites.s.sol @@ -6,12 +6,11 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; - import "forge-std/Script.sol"; import "forge-std/console2.sol"; import "../contracts/common/AddressManager.sol"; +import "../contracts/libs/LibDeployHelper.sol"; contract SetRemoteBridgeSuites is Script { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); @@ -42,39 +41,23 @@ contract SetRemoteBridgeSuites is Script { vm.startBroadcast(privateKey); for (uint256 i; i < remoteChainIDs.length; ++i) { - setAddress(addressManagerAddress, uint64(remoteChainIDs[i]), "bridge", remoteBridges[i]); - setAddress( - addressManagerAddress, - uint64(remoteChainIDs[i]), - "erc20_vault", - remoteERC20Vaults[i] + uint64 chainid = uint64(remoteChainIDs[i]); + + LibDeployHelper.register(addressManagerAddress, "bridge", remoteBridges[i], chainid); + + LibDeployHelper.register( + addressManagerAddress, "erc20_vault", remoteERC20Vaults[i], chainid ); - setAddress( - addressManagerAddress, - uint64(remoteChainIDs[i]), - "erc721_vault", - remoteERC721Vaults[i] + + LibDeployHelper.register( + addressManagerAddress, "erc721_vault", remoteERC721Vaults[i], chainid ); - setAddress( - addressManagerAddress, - uint64(remoteChainIDs[i]), - "erc1155_vault", - remoteERC1155Vaults[i] + + LibDeployHelper.register( + addressManagerAddress, "erc1155_vault", remoteERC1155Vaults[i], chainid ); } vm.stopBroadcast(); } - - function setAddress( - address addressManager, - uint64 chainId, - bytes32 name, - address addr - ) - private - { - console2.log(chainId, uint256(name), "--->", addr); - ProxiedAddressManager(addressManager).setAddress(chainId, name, addr); - } } diff --git a/packages/protocol/script/test_deploy_on_l1.sh b/packages/protocol/script/test_deploy_on_l1.sh index 8e12f2e7ae0..23bb91c3b7e 100755 --- a/packages/protocol/script/test_deploy_on_l1.sh +++ b/packages/protocol/script/test_deploy_on_l1.sh @@ -4,20 +4,21 @@ set -e PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ -SINGLETON_SIGNAL_SERVICE=0x0000000000000000000000000000000000000000 \ -SINGLETON_BRIDGE=0x0000000000000000000000000000000000000000 \ PROPOSER=0x0000000000000000000000000000000000000000 \ PROPOSER_ONE=0x0000000000000000000000000000000000000000 \ GUARDIAN_PROVERS="0x1000777700000000000000000000000000000001,0x1000777700000000000000000000000000000002,0x1000777700000000000000000000000000000003,0x1000777700000000000000000000000000000004,0x1000777700000000000000000000000000000005" \ -OWNER=0x70997970C51812dc3A010C7d01b50e0d17dc79C8 \ TAIKO_L2_ADDRESS=0x1000777700000000000000000000000000000001 \ L2_SIGNAL_SERVICE=0x1000777700000000000000000000000000000007 \ +SECURITY_COUNCIL=0x60997970C51812dc3A010C7d01b50e0d17dc79C8 \ TAIKO_TOKEN_PREMINT_RECIPIENT=0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 \ -TIER_PROVIDER=0x1 \ +TAIKO_TOKEN_NAME="Taiko Token Katla" \ +TAIKO_TOKEN_SYMBOL=TTKOk \ +SHARED_ADDRESS_MANAGER=0x0000000000000000000000000000000000000000 \ L2_GENESIS_HASH=0xee1950562d42f0da28bd4550d88886bc90894c77c9c9eaefef775d4c8223f259 \ forge script script/DeployOnL1.s.sol:DeployOnL1 \ --fork-url http://localhost:8545 \ --broadcast \ --ffi \ -vvvv \ + --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ --block-gas-limit 100000000 diff --git a/packages/protocol/script/upgrade/TransferOwnership.s.sol b/packages/protocol/script/upgrade/TransferOwnership.s.sol deleted file mode 100644 index 625d448355c..00000000000 --- a/packages/protocol/script/upgrade/TransferOwnership.s.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "./UpgradeScript.s.sol"; - -interface IOwnable { - function transferOwnership(address newOwner) external; -} -/// @notice As "single" owner is not desirable for protocols we need to -/// transfer ownership. BUT! Transferring ownership to a multisig also -/// does not help too much if the protocol wants to give some time for -/// the users to exit before an upgrade is effective. So implementing a -/// delay (L2Beat prefers 7 days) is essential. -/// So the usual approach is the following: -/// 1. Transfer ownership to TimeLockController contract which enforces the -/// delay -/// 2. The ownership of the TimeLockController contract shall be a multisig/DAO - -/// Invokaction example: -/// forge script TransferOwnership --sig "run(address,address)"
-///
-contract TransferOwnership is UpgradeScript { - function run(address contractAddr, address timeLockContract) external setUp { - IOwnable(contractAddr).transferOwnership(timeLockContract); - console2.log(contractAddr, " contract has a new owner:", address(timeLockContract)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol b/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol deleted file mode 100644 index 82d596e0093..00000000000 --- a/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeAddressManager is UpgradeScript { - function run() external setUp { - AddressManager newAddressManager = new ProxiedAddressManager(); - proxy.upgradeTo(address(newAddressManager)); - console2.log("proxy upgraded AddressManager implementation to", address(newAddressManager)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeBridge.s.sol b/packages/protocol/script/upgrade/UpgradeBridge.s.sol deleted file mode 100644 index 067bfd16c4d..00000000000 --- a/packages/protocol/script/upgrade/UpgradeBridge.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeBridge is UpgradeScript { - function run() external setUp { - Bridge newBridge = new ProxiedSingletonBridge(); - proxy.upgradeTo(address(newBridge)); - console2.log("proxy upgraded Bridge implementation to", address(newBridge)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol b/packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol deleted file mode 100644 index 3d4db5d9062..00000000000 --- a/packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/tokenvault/ERC1155Vault.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeERC1155Vault is UpgradeScript { - function run() external setUp { - ERC1155Vault newERC1155Vault = new ProxiedSingletonERC1155Vault(); - proxy.upgradeTo(address(newERC1155Vault)); - console2.log("proxy upgraded ERC1155Vault implementation to", address(newERC1155Vault)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol b/packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol deleted file mode 100644 index 819c8db5d07..00000000000 --- a/packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/tokenvault/ERC20Vault.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeERC20Vault is UpgradeScript { - function run() external setUp { - ERC20Vault newERC20Vault = new ProxiedSingletonERC20Vault(); - proxy.upgradeTo(address(newERC20Vault)); - console2.log("proxy upgraded ERC20Vault implementation to", address(newERC20Vault)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol b/packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol deleted file mode 100644 index 17bd0743ceb..00000000000 --- a/packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/tokenvault/ERC721Vault.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeERC721Vault is UpgradeScript { - function run() external setUp { - ERC721Vault newERC721Vault = new ProxiedSingletonERC721Vault(); - proxy.upgradeTo(address(newERC721Vault)); - console2.log("proxy upgraded ERC721Vault implementation to", address(newERC721Vault)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeScript.s.sol b/packages/protocol/script/upgrade/UpgradeScript.s.sol deleted file mode 100644 index 4683e995150..00000000000 --- a/packages/protocol/script/upgrade/UpgradeScript.s.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; - -contract UpgradeScript is Script { - uint256 public deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - address public proxyAddress = vm.envAddress("PROXY_ADDRESS"); - - TransparentUpgradeableProxy proxy; - - modifier setUp() { - require(deployerPrivateKey != 0, "PRIVATE_KEY not set"); - require(proxyAddress != address(0), "PROXY_ADDRESS not set"); - - vm.startBroadcast(deployerPrivateKey); - - proxy = TransparentUpgradeableProxy(payable(proxyAddress)); - _; - - vm.stopBroadcast(); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeSignalService.sol b/packages/protocol/script/upgrade/UpgradeSignalService.sol deleted file mode 100644 index e813cc1d7ed..00000000000 --- a/packages/protocol/script/upgrade/UpgradeSignalService.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/signal/SignalService.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeSignalService is UpgradeScript { - function run() external setUp { - SignalService newSignalService = new ProxiedSingletonSignalService(); - proxy.upgradeTo(address(newSignalService)); - console2.log("proxy upgraded SignalService implementation to", address(newSignalService)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol deleted file mode 100644 index 412cf8c4063..00000000000 --- a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/L1/TaikoL1.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeTaikoL1 is UpgradeScript { - function run() external setUp { - TaikoL1 newTaikoL1 = new ProxiedTaikoL1(); - proxy.upgradeTo(address(newTaikoL1)); - console2.log("proxy upgraded taiko L1 implementation to", address(newTaikoL1)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol deleted file mode 100644 index c7189b3700a..00000000000 --- a/packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/L2/TaikoL2.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeTaikoL2 is UpgradeScript { - function run() external setUp { - TaikoL2 newTaikoL2 = new ProxiedSingletonTaikoL2(); - proxy.upgradeTo(address(newTaikoL2)); - console2.log("proxy upgraded TaikoL2 implementation to", address(newTaikoL2)); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol deleted file mode 100644 index 8baa2a52e06..00000000000 --- a/packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; -import "../../contracts/L1/TaikoToken.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeTaikoToken is UpgradeScript { - function run() external setUp { - TaikoToken newTaikoToken = new ProxiedTaikoToken(); - proxy.upgradeTo(address(newTaikoToken)); - console2.log("proxy upgraded TaikoToken implementation to", address(newTaikoToken)); - } -} diff --git a/packages/protocol/test/HelperContracts.sol b/packages/protocol/test/HelperContracts.sol new file mode 100644 index 00000000000..abd7c7a7a87 --- /dev/null +++ b/packages/protocol/test/HelperContracts.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "../contracts/bridge/Bridge.sol"; +import "../contracts/signal/SignalService.sol"; +import "../contracts/common/ICrossChainSync.sol"; + +contract BadReceiver { + receive() external payable { + revert("can not send to this contract"); + } + + fallback() external payable { + revert("can not send to this contract"); + } + + function transfer() public pure { + revert("this fails"); + } +} + +contract GoodReceiver { + receive() external payable { } + + function forward(address addr) public payable { + payable(addr).transfer(address(this).balance / 2); + } +} + +// NonNftContract +contract NonNftContract { + uint256 dummyData; + + constructor(uint256 _dummyData) { + dummyData = _dummyData; + } +} + +contract SkipProofCheckSignal is SignalService { + function skipProofCheck() public pure override returns (bool) { + return true; + } +} + +contract DummyCrossChainSync is EssentialContract, ICrossChainSync { + Snippet private _snippet; + + function setSyncedData(bytes32 blockHash, bytes32 signalRoot) external { + _snippet.blockHash = blockHash; + _snippet.signalRoot = signalRoot; + } + + function getSyncedSnippet(uint64) external view returns (Snippet memory) { + return _snippet; + } +} diff --git a/packages/protocol/test/L1/SgxVerifier.t.sol b/packages/protocol/test/L1/SgxVerifier.t.sol index cc55090ea65..4a4c89a1331 100644 --- a/packages/protocol/test/L1/SgxVerifier.t.sol +++ b/packages/protocol/test/L1/SgxVerifier.t.sol @@ -1,19 +1,15 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "forge-std/Test.sol"; -import "forge-std/console2.sol"; -import "../../contracts/L1/TaikoL1.sol"; -import "../../contracts/L1/verifiers/SgxVerifier.sol"; import "./TaikoL1TestBase.sol"; contract TestSgxVerifier is TaikoL1TestBase { - function deployTaikoL1() internal override returns (TaikoL1 taikoL1) { - taikoL1 = new TaikoL1(); - } - - function setUp() public override { - TaikoL1TestBase.setUp(); + function deployTaikoL1() internal override returns (TaikoL1) { + return TaikoL1( + payable( + LibDeployHelper.deployProxy({ name: "taiko", impl: address(new TaikoL1()), data: "" }) + ) + ); } function test_addInstancesByOwner() external { diff --git a/packages/protocol/test/L1/TaikoL1.t.sol b/packages/protocol/test/L1/TaikoL1.t.sol index 5ed61840f6c..06660f70183 100644 --- a/packages/protocol/test/L1/TaikoL1.t.sol +++ b/packages/protocol/test/L1/TaikoL1.t.sol @@ -1,15 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "forge-std/Test.sol"; -import "forge-std/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/L1/libs/LibUtils.sol"; -import "../../contracts/L1/TaikoData.sol"; -import "../../contracts/L1/TaikoErrors.sol"; -import "../../contracts/L1/TaikoL1.sol"; -import "../../contracts/L1/TaikoToken.sol"; -import "../../contracts/signal/SignalService.sol"; import "./TaikoL1TestBase.sol"; contract TaikoL1_NoCooldown is TaikoL1 { @@ -30,12 +21,16 @@ contract Verifier { } contract TaikoL1Test is TaikoL1TestBase { - function deployTaikoL1() internal override returns (TaikoL1 taikoL1) { - taikoL1 = new TaikoL1_NoCooldown(); - } - - function setUp() public override { - TaikoL1TestBase.setUp(); + function deployTaikoL1() internal override returns (TaikoL1) { + return TaikoL1( + payable( + LibDeployHelper.deployProxy({ + name: "taiko", + impl: address(new TaikoL1_NoCooldown()), + data: "" + }) + ) + ); } /// @dev Test we can propose, prove, then verify more blocks than diff --git a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol b/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol index 901dfe7bbcd..c37bd8d4a2d 100644 --- a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol +++ b/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol @@ -1,18 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "forge-std/Test.sol"; -import "forge-std/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/L1/libs/LibUtils.sol"; -import "../../contracts/L1/libs/LibProposing.sol"; -import "../../contracts/L1/verifiers/GuardianVerifier.sol"; -import "../../contracts/L1/TaikoData.sol"; -import "../../contracts/L1/TaikoErrors.sol"; -import "../../contracts/L1/TaikoL1.sol"; -import "../../contracts/L1/TaikoToken.sol"; -import "../../contracts/L1/tiers/ITierProvider.sol"; -import "../../contracts/signal/SignalService.sol"; import "./TaikoL1TestBase.sol"; contract TaikoL1Tiers is TaikoL1 { @@ -34,11 +22,15 @@ contract Verifier { contract TaikoL1LibProvingWithTiers is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1 taikoL1) { - taikoL1 = new TaikoL1Tiers(); - } - - function setUp() public override { - TaikoL1TestBase.setUp(); + taikoL1 = TaikoL1( + payable( + LibDeployHelper.deployProxy({ + name: "taiko", + impl: address(new TaikoL1Tiers()), + data: "" + }) + ) + ); } function proveHigherTierProof( diff --git a/packages/protocol/test/L1/TaikoL1TestBase.sol b/packages/protocol/test/L1/TaikoL1TestBase.sol index a7d1ef19958..3d59ccd7ac2 100644 --- a/packages/protocol/test/L1/TaikoL1TestBase.sol +++ b/packages/protocol/test/L1/TaikoL1TestBase.sol @@ -1,27 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import "forge-std/console2.sol"; -import "../TestBase.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "../../contracts/L1/libs/LibProving.sol"; -import "../../contracts/L1/libs/LibProposing.sol"; -import "../../contracts/L1/libs/LibUtils.sol"; -import "../../contracts/L1/TaikoData.sol"; -import "../../contracts/L1/TaikoL1.sol"; -import "../../contracts/L1/TaikoToken.sol"; -import "../../contracts/L1/verifiers/GuardianVerifier.sol"; -import "../../contracts/L1/tiers/TaikoA6TierProvider.sol"; -import "../../contracts/L1/verifiers/PseZkVerifier.sol"; -import "../../contracts/L1/verifiers/SgxVerifier.sol"; -import "../../contracts/L1/verifiers/SgxAndZkVerifier.sol"; -import "../../contracts/L1/provers/GuardianProver.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../../contracts/common/AddressResolver.sol"; -import "../../contracts/L1/tiers/ITierProvider.sol"; -import "../../contracts/L1/hooks/AssignmentHook.sol"; +import "../TaikoTest.sol"; contract MockVerifier { fallback(bytes calldata) external returns (bytes memory) { @@ -47,10 +27,10 @@ abstract contract TaikoL1TestBase is TaikoTest { TaikoA6TierProvider public cp; Bridge public bridge; - bytes32 public constant GENESIS_BLOCK_HASH = keccak256("GENESIS_BLOCK_HASH"); + bytes32 public GENESIS_BLOCK_HASH = keccak256("GENESIS_BLOCK_HASH"); - address public constant L2SS = 0xa008AE5Ba00656a3Cc384de589579e3E52aC030C; - address public constant TaikoL2 = 0x0082D90249342980d011C58105a03b35cCb4A315; + address public L2SS = randAddress(); + address public L2 = randAddress(); function deployTaikoL1() internal virtual returns (TaikoL1 taikoL1); @@ -58,38 +38,95 @@ abstract contract TaikoL1TestBase is TaikoTest { L1 = deployTaikoL1(); conf = L1.getConfig(); - addressManager = new AddressManager(); - addressManager.init(); + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }) + ); - ss = new SignalService(); - ss.init(); + ss = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector) + }) + ); - pv = new PseZkVerifier(); - pv.init(address(addressManager)); + pv = PseZkVerifier( + LibDeployHelper.deployProxy({ + name: "tier_pse_zkevm", + impl: address(new PseZkVerifier()), + data: bytes.concat(PseZkVerifier.init.selector, abi.encode(address(addressManager))) + }) + ); + + sv = SgxVerifier( + LibDeployHelper.deployProxy({ + name: "tier_sgx", + impl: address(new SgxVerifier()), + data: bytes.concat(SgxVerifier.init.selector, abi.encode(address(addressManager))) + }) + ); - sv = new SgxVerifier(); - sv.init(address(addressManager)); address[] memory initSgxInstances = new address[](1); initSgxInstances[0] = SGX_X_0; sv.addInstances(initSgxInstances); - sgxZkVerifier = new SgxAndZkVerifier(); - sgxZkVerifier.init(address(addressManager)); + sgxZkVerifier = SgxAndZkVerifier( + LibDeployHelper.deployProxy({ + name: "tier_sgx_and_pse_zkevm", + impl: address(new SgxAndZkVerifier()), + data: bytes.concat(SgxAndZkVerifier.init.selector, abi.encode(address(addressManager))) + }) + ); + + gv = GuardianVerifier( + LibDeployHelper.deployProxy({ + name: "guardian_verifier", + impl: address(new GuardianVerifier()), + data: bytes.concat(GuardianVerifier.init.selector, abi.encode(address(addressManager))) + }) + ); - gv = new GuardianVerifier(); - gv.init(address(addressManager)); + gp = GuardianProver( + LibDeployHelper.deployProxy({ + name: "guardian_prover", + impl: address(new GuardianProver()), + data: bytes.concat(GuardianProver.init.selector, abi.encode(address(addressManager))) + }) + ); - gp = new GuardianProver(); - gp.init(address(addressManager)); setupGuardianProverMultisig(); - cp = new TaikoA6TierProvider(); + cp = TaikoA6TierProvider( + LibDeployHelper.deployProxy({ + name: "tier_provider", + impl: address(new TaikoA6TierProvider()), + data: bytes.concat(TaikoA6TierProvider.init.selector) + }) + ); - bridge = new Bridge(); - bridge.init(address(addressManager)); + bridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); - assignmentHook = new AssignmentHook(); - assignmentHook.init(address(addressManager)); + assignmentHook = AssignmentHook( + LibDeployHelper.deployProxy({ + name: "assignment_hook", + impl: address(new AssignmentHook()), + data: bytes.concat(AssignmentHook.init.selector, abi.encode(address(addressManager))) + }) + ); registerAddress("taiko", address(L1)); registerAddress("tier_pse_zkevm", address(pv)); @@ -100,16 +137,28 @@ abstract contract TaikoL1TestBase is TaikoTest { registerAddress("signal_service", address(ss)); registerAddress("guardian_prover", address(gp)); registerAddress("bridge", address(bridge)); - registerL2Address("taiko", address(TaikoL2)); + registerL2Address("taiko", address(L2)); registerL2Address("signal_service", address(L2SS)); - registerL2Address("taiko_l2", address(TaikoL2)); + registerL2Address("taiko_l2", address(L2)); registerAddress(pv.getVerifierName(300), address(new MockVerifier())); - tko = new TaikoToken(); - registerAddress("taiko_token", address(tko)); - - tko.init(address(addressManager), "TaikoToken", "TKO", address(this)); + tko = TaikoToken( + LibDeployHelper.deployProxy({ + name: "taiko_token", + impl: address(new TaikoToken()), + data: bytes.concat( + TaikoToken.init.selector, + abi.encode( + "Taiko Token", // + "TTKOk", + address(this) + ) + ), + registerTo: address(addressManager), + owner: address(0) + }) + ); L1.init(address(addressManager), GENESIS_BLOCK_HASH); printVariables("init "); diff --git a/packages/protocol/test/L1/TaikoToken.t.sol b/packages/protocol/test/L1/TaikoToken.t.sol deleted file mode 100644 index c76f83d270c..00000000000 --- a/packages/protocol/test/L1/TaikoToken.t.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; - -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "../TestBase.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/common/AddressResolver.sol"; -import "../../contracts/L1/TaikoToken.sol"; - -contract TaikoTokenTest is TaikoTest { - bytes32 GENESIS_BLOCK_HASH; - - address public tokenOwner; - - AddressManager public addressManager; - TransparentUpgradeableProxy public tokenProxy; - TaikoToken public tko; - TaikoToken public tkoUpgradedImpl; - - function setUp() public { - GENESIS_BLOCK_HASH = getRandomBytes32(); - - tokenOwner = getRandomAddress(); - - addressManager = new AddressManager(); - addressManager.init(); - tko = new TaikoToken(); - - tokenProxy = _deployViaProxy( - address(tko), - bytes.concat( - tko.init.selector, - abi.encode(address(addressManager), "Taiko Token", "TKO", address(this)) - ) - ); - - tko = TaikoToken(address(tokenProxy)); - tko.transfer(Yasmine, 5 ether); - tko.transfer(Zachary, 5 ether); - } - - function test_TaikoToken_upgrade() public { - tkoUpgradedImpl = new TaikoToken(); - - vm.prank(tokenOwner); - tokenProxy.upgradeTo(address(tkoUpgradedImpl)); - - // Check if balance is still same - assertEq(tko.balanceOf(Yasmine), 5 ether); - assertEq(tko.balanceOf(Zachary), 5 ether); - } - - function test_TaikoToken_upgrade_without_admin_rights() public { - tkoUpgradedImpl = new TaikoToken(); - - vm.expectRevert(); - tokenProxy.upgradeTo(address(tkoUpgradedImpl)); - } - - function _registerAddress(bytes32 nameHash, address addr) private { - addressManager.setAddress(uint64(block.chainid), nameHash, addr); - } - - function _deployViaProxy( - address implementation, - bytes memory data - ) - private - returns (TransparentUpgradeableProxy) - { - return new TransparentUpgradeableProxy( - implementation, - tokenOwner, - data - ); - } -} diff --git a/packages/protocol/test/L2/Lib1559Math.t.sol b/packages/protocol/test/L2/Lib1559Math.t.sol index 1f9bef46627..474af869c00 100644 --- a/packages/protocol/test/L2/Lib1559Math.t.sol +++ b/packages/protocol/test/L2/Lib1559Math.t.sol @@ -1,11 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "forge-std/console2.sol"; -import "../../contracts/L2/Lib1559Math.sol"; -import "../../contracts/thirdparty/LibFixedPointMath.sol"; -import "../../contracts/libs/LibMath.sol"; -import "../TestBase.sol"; +import "../TaikoTest.sol"; contract TestLib1559Math is TaikoTest { using LibMath for uint256; diff --git a/packages/protocol/test/L2/TaikoL2.t.sol b/packages/protocol/test/L2/TaikoL2.t.sol index 3a27c7d580c..8a33a196ae9 100644 --- a/packages/protocol/test/L2/TaikoL2.t.sol +++ b/packages/protocol/test/L2/TaikoL2.t.sol @@ -1,14 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol"; -import "forge-std/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../../contracts/L2/TaikoL2EIP1559Configurable.sol"; -import "../../contracts/L2/TaikoL2.sol"; -import "../TestBase.sol"; +import "../TaikoTest.sol"; contract SkipBasefeeCheckL2 is TaikoL2EIP1559Configurable { function skipFeeCheck() public pure override returns (bool) { @@ -27,29 +20,51 @@ contract TestTaikoL2 is TaikoTest { AddressManager public addressManager; SignalService public ss; TaikoL2EIP1559Configurable public L2; - SkipBasefeeCheckL2 public L2FeeSimulation; - uint256 private logIndex; + SkipBasefeeCheckL2 public L2skip; function setUp() public { - addressManager = new AddressManager(); - addressManager.init(); + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }) + ); + + ss = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector), + registerTo: address(addressManager), + owner: address(0) + }) + ); - ss = new SignalService(); - ss.init(); - registerAddress("signal_service", address(ss)); - - L2 = new TaikoL2EIP1559Configurable(); uint64 gasExcess = 0; uint8 quotient = 8; uint32 gasTarget = 60_000_000; - L2.init(address(ss), gasExcess); + + L2 = TaikoL2EIP1559Configurable( + LibDeployHelper.deployProxy({ + name: "taiko_l2", + impl: address(new TaikoL2EIP1559Configurable()), + data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess)) + }) + ); + L2.setConfigAndExcess(TaikoL2.Config(gasTarget, quotient), gasExcess); - L2FeeSimulation = new SkipBasefeeCheckL2(); gasExcess = 195_420_300_100; + L2skip = SkipBasefeeCheckL2( + LibDeployHelper.deployProxy({ + name: "taiko_l2", + impl: address(new SkipBasefeeCheckL2()), + data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess)) + }) + ); - L2FeeSimulation.init(address(ss), gasExcess); - L2FeeSimulation.setConfigAndExcess(TaikoL2.Config(gasTarget, quotient), gasExcess); + L2skip.setConfigAndExcess(TaikoL2.Config(gasTarget, quotient), gasExcess); vm.roll(block.number + 1); vm.warp(block.timestamp + 30); @@ -179,7 +194,7 @@ contract TestTaikoL2 is TaikoTest { vm.prank(L2.GOLDEN_TOUCH_ADDRESS()); _anchorSimulation(currentGasUsed, l1Height); - uint256 currentBaseFee = L2FeeSimulation.getBasefee(l1Height, currentGasUsed); + uint256 currentBaseFee = L2skip.getBasefee(l1Height, currentGasUsed); allBaseFee += currentBaseFee; console2.log("Actual gas in L2 block is:", currentGasUsed); console2.log("L2block to baseFee is:", i, ":", currentBaseFee); @@ -228,15 +243,15 @@ contract TestTaikoL2 is TaikoTest { } function _anchor(uint32 parentGasLimit) private { - bytes32 l1Hash = getRandomBytes32(); - bytes32 l1SignalRoot = getRandomBytes32(); + bytes32 l1Hash = randBytes32(); + bytes32 l1SignalRoot = randBytes32(); L2.anchor(l1Hash, l1SignalRoot, 12_345, parentGasLimit); } function _anchorSimulation(uint32 parentGasLimit, uint64 l1Height) private { - bytes32 l1Hash = getRandomBytes32(); - bytes32 l1SignalRoot = getRandomBytes32(); - L2FeeSimulation.anchor(l1Hash, l1SignalRoot, l1Height, parentGasLimit); + bytes32 l1Hash = randBytes32(); + bytes32 l1SignalRoot = randBytes32(); + L2skip.anchor(l1Hash, l1SignalRoot, l1Height, parentGasLimit); } function registerAddress(bytes32 nameHash, address addr) internal { diff --git a/packages/protocol/test/TaikoTest.sol b/packages/protocol/test/TaikoTest.sol new file mode 100644 index 00000000000..66cd862aff6 --- /dev/null +++ b/packages/protocol/test/TaikoTest.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "forge-std/Test.sol"; +import "forge-std/console2.sol"; + +import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import "../contracts/thirdparty/LibFixedPointMath.sol"; +import "../contracts/bridge/Bridge.sol"; +import "../contracts/signal/SignalService.sol"; +import "../contracts/common/ICrossChainSync.sol"; +import "../contracts/common/EssentialContract.sol"; +import "../contracts/tokenvault/BridgedERC20.sol"; +import "../contracts/tokenvault/BridgedERC721.sol"; +import "../contracts/tokenvault/BridgedERC1155.sol"; +import "../contracts/tokenvault/ERC20Vault.sol"; +import "../contracts/tokenvault/ERC721Vault.sol"; +import "../contracts/tokenvault/ERC1155Vault.sol"; +import "../contracts/team/TimeLockTokenPool.sol"; +import "../contracts/L1/TaikoToken.sol"; +import "../contracts/L1/TaikoL1.sol"; +import "../contracts/L1/verifiers/SgxVerifier.sol"; +import "../contracts/L1/verifiers/GuardianVerifier.sol"; +import "../contracts/L1/verifiers/PseZkVerifier.sol"; +import "../contracts/L1/verifiers/SgxAndZkVerifier.sol"; +import "../contracts/L1/tiers/TaikoA6TierProvider.sol"; +import "../contracts/L1/tiers/ITierProvider.sol"; +import "../contracts/L1/tiers/ITierProvider.sol"; +import "../contracts/L1/hooks/AssignmentHook.sol"; +import "../contracts/L1/provers/GuardianProver.sol"; + +import "../contracts/team/airdrop/ERC20Airdrop.sol"; +import "../contracts/team/airdrop/ERC20Airdrop2.sol"; + +import "../contracts/L2/Lib1559Math.sol"; +import "../contracts/L2/TaikoL2EIP1559Configurable.sol"; +import "../contracts/L2/TaikoL2.sol"; + +import "../contracts/test/erc20/FreeMintERC20.sol"; +import "../contracts/libs/LibDeployHelper.sol"; +import "./HelperContracts.sol"; + +abstract contract TaikoTest is Test { + uint256 private _seed = 0x12345678; + address internal Alice = vm.addr(0x1); + address internal Bob = vm.addr(0x2); + address internal Carol = vm.addr(0x3); + address internal David = randAddress(); + address internal Emma = randAddress(); + address internal Frank = randAddress(); + address internal Grace = randAddress(); + address internal Henry = randAddress(); + address internal Isabella = randAddress(); + address internal James = randAddress(); + address internal Katherine = randAddress(); + address internal Liam = randAddress(); + address internal Mia = randAddress(); + address internal Noah = randAddress(); + address internal Olivia = randAddress(); + address internal Patrick = randAddress(); + address internal Quinn = randAddress(); + address internal Rachel = randAddress(); + address internal Samuel = randAddress(); + address internal Taylor = randAddress(); + address internal Ulysses = randAddress(); + address internal Victoria = randAddress(); + address internal William = randAddress(); + address internal Xavier = randAddress(); + address internal Yasmine = randAddress(); + address internal Zachary = randAddress(); + address internal SGX_X_0 = vm.addr(0x4); + address internal SGX_X_1 = vm.addr(0x5); + address internal SGX_Y = randAddress(); + address internal SGX_Z = randAddress(); + + function randAddress() internal returns (address) { + bytes32 randomHash = keccak256(abi.encodePacked("address", _seed++)); + return address(bytes20(randomHash)); + } + + function randBytes32() internal returns (bytes32) { + return keccak256(abi.encodePacked("bytes32", _seed++)); + } +} diff --git a/packages/protocol/test/TestBase.sol b/packages/protocol/test/TestBase.sol deleted file mode 100644 index 88c9edd0627..00000000000 --- a/packages/protocol/test/TestBase.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; - -import "forge-std/Test.sol"; -import "../contracts/bridge/Bridge.sol"; -import "../contracts/signal/SignalService.sol"; -import "../contracts/common/ICrossChainSync.sol"; -import "../contracts/common/EssentialContract.sol"; - -abstract contract TaikoTest is Test { - uint256 private _seed = 0x12345678; - - function getRandomAddress() internal returns (address) { - bytes32 randomHash = keccak256(abi.encodePacked("address", _seed++)); - return address(bytes20(randomHash)); - } - - function getRandomBytes32() internal returns (bytes32) { - return keccak256(abi.encodePacked("bytes32", _seed++)); - } - - address internal Alice = vm.addr(0x1); - address internal Bob = vm.addr(0x2); - address internal Carol = vm.addr(0x3); - address internal David = getRandomAddress(); - address internal Emma = getRandomAddress(); - address internal Frank = getRandomAddress(); - address internal Grace = getRandomAddress(); - address internal Henry = getRandomAddress(); - address internal Isabella = getRandomAddress(); - address internal James = getRandomAddress(); - address internal Katherine = getRandomAddress(); - address internal Liam = getRandomAddress(); - address internal Mia = getRandomAddress(); - address internal Noah = getRandomAddress(); - address internal Olivia = getRandomAddress(); - address internal Patrick = getRandomAddress(); - address internal Quinn = getRandomAddress(); - address internal Rachel = getRandomAddress(); - address internal Samuel = getRandomAddress(); - address internal Taylor = getRandomAddress(); - address internal Ulysses = getRandomAddress(); - address internal Victoria = getRandomAddress(); - address internal William = getRandomAddress(); - address internal Xavier = getRandomAddress(); - address internal Yasmine = getRandomAddress(); - address internal Zachary = getRandomAddress(); - address internal SGX_X_0 = vm.addr(0x4); - address internal SGX_X_1 = vm.addr(0x5); - address internal SGX_Y = getRandomAddress(); - address internal SGX_Z = getRandomAddress(); -} - -contract BadReceiver { - receive() external payable { - revert("can not send to this contract"); - } - - fallback() external payable { - revert("can not send to this contract"); - } - - function transfer() public pure { - revert("this fails"); - } -} - -contract GoodReceiver { - receive() external payable { } - - function forward(address addr) public payable { - payable(addr).transfer(address(this).balance / 2); - } -} - -// NonNftContract -contract NonNftContract { - uint256 dummyData; - - constructor(uint256 _dummyData) { - dummyData = _dummyData; - } -} - -contract SkipProofCheckSignal is SignalService { - function skipProofCheck() public pure override returns (bool) { - return true; - } -} - -contract DummyCrossChainSync is ICrossChainSync, EssentialContract { - Snippet private _snippet; - - function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); - } - - function setSyncedData(bytes32 blockHash, bytes32 signalRoot) external { - _snippet.blockHash = blockHash; - _snippet.signalRoot = signalRoot; - } - - function getSyncedSnippet(uint64) external view returns (Snippet memory) { - return _snippet; - } -} diff --git a/packages/protocol/test/bridge/Bridge.t.sol b/packages/protocol/test/bridge/Bridge.t.sol index 2f6e6d676dd..73375c55661 100644 --- a/packages/protocol/test/bridge/Bridge.t.sol +++ b/packages/protocol/test/bridge/Bridge.t.sol @@ -1,11 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "forge-std/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../TestBase.sol"; +import "../TaikoTest.sol"; // A contract which is not our ErcXXXTokenVault // Which in such case, the sent funds are still recoverable, but not via the @@ -37,20 +33,54 @@ contract BridgeTest is TaikoTest { function setUp() public { vm.startPrank(Alice); vm.deal(Alice, 100 ether); - addressManager = new AddressManager(); - addressManager.init(); - bridge = new Bridge(); - bridge.init(address(addressManager)); + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }) + ); + + bridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); - destChainBridge = new Bridge(); - destChainBridge.init(address(addressManager)); + destChainBridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)) + }) + ) + ); - mockProofSignalService = new SkipProofCheckSignal(); - mockProofSignalService.init(); + mockProofSignalService = SkipProofCheckSignal( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SkipProofCheckSignal()), + data: bytes.concat(SignalService.init.selector), + registerTo: address(addressManager), + owner: address(0) + }) + ); - signalService = new SignalService(); - signalService.init(); + signalService = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector) + }) + ); vm.deal(address(destChainBridge), 100 ether); @@ -59,18 +89,17 @@ contract BridgeTest is TaikoTest { untrustedSenderContract = new UntrustedSendMessageRelayer(); vm.deal(address(untrustedSenderContract), 10 ether); - addressManager.setAddress( - uint64(block.chainid), "signal_service", address(mockProofSignalService) + LibDeployHelper.register( + address(addressManager), "signal_service", address(mockProofSignalService), destChainId ); - addressManager.setAddress(destChainId, "signal_service", address(mockProofSignalService)); - - addressManager.setAddress(destChainId, "bridge", address(destChainBridge)); - - addressManager.setAddress(destChainId, "taiko", address(uint160(123))); - - addressManager.setAddress(uint64(block.chainid), "bridge", address(bridge)); + LibDeployHelper.register( + address(addressManager), "bridge", address(destChainBridge), destChainId + ); + LibDeployHelper.register( + address(addressManager), "taiko", address(uint160(123)), destChainId + ); vm.stopPrank(); } diff --git a/packages/protocol/test/common/EssentialContract.t.sol b/packages/protocol/test/common/EssentialContract.t.sol new file mode 100644 index 00000000000..a0a83c7bd49 --- /dev/null +++ b/packages/protocol/test/common/EssentialContract.t.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "../TaikoTest.sol"; + +contract Target1 is EssentialContract { + uint256 public count; + + function init() external initializer { + _Essential_init(); + count = 100; + } + + function adjust() external virtual onlyOwner { + count += 1; + } +} + +contract Target2 is Target1 { + function update() external onlyOwner { + count += 10; + } + + function adjust() external override onlyOwner { + count -= 1; + } +} + +contract TestOwnerUUPSUpgradable is TaikoTest { + function test_essential_behind_1967_proxy() external { + bytes memory data = bytes.concat(Target1.init.selector); + vm.startPrank(Alice); + ERC1967Proxy proxy = new ERC1967Proxy(address(new Target1()), data); + Target1 target = Target1(address(proxy)); + vm.stopPrank(); + + // Owner is Alice + vm.prank(Carol); + assertEq(target.owner(), Alice); + + // Alice can adjust(); + vm.prank(Alice); + target.adjust(); + assertEq(target.count(), 101); + + // Bob cannot adjust() + vm.prank(Bob); + vm.expectRevert(); + target.adjust(); + + address v2 = address(new Target2()); + data = bytes.concat(Target2.update.selector); + + vm.prank(Bob); + vm.expectRevert(); + target.upgradeToAndCall(v2, data); + + vm.prank(Alice); + target.upgradeToAndCall(v2, data); + assertEq(target.count(), 111); + + vm.prank(Alice); + target.adjust(); + assertEq(target.count(), 110); + } + + // This tests shows that the admin() and owner() cannot be the same, otherwise, + // the owner cannot transact delegated functions on implementation. + function test_essential_behind_transparent_proxy() external { + bytes memory data = bytes.concat(Target1.init.selector); + vm.startPrank(Alice); + TransparentUpgradeableProxy proxy = + new TransparentUpgradeableProxy(address(new Target1()), Bob, data); + Target1 target = Target1(address(proxy)); + vm.stopPrank(); + + // Owner is Alice + // Admin is Bob + + vm.prank(Carol); + assertEq(target.owner(), Alice); + + // Only Bob can call admin() + vm.prank(Bob); + assertEq(proxy.admin(), Bob); + + // Other people, including Alice, cannot call admin() + vm.prank(Alice); + vm.expectRevert(); + proxy.admin(); + + vm.prank(Carol); + vm.expectRevert(); + proxy.admin(); + + // Alice can adjust(); + vm.prank(Alice); + target.adjust(); + assertEq(target.count(), 101); + + // Bob cannot adjust() + vm.prank(Bob); + vm.expectRevert(); + target.adjust(); + + // Transfer Owner to Bob, so Bob is both admin and owner + vm.prank(Alice); + target.transferOwnership(Bob); + + vm.prank(Carol); + assertEq(target.owner(), Bob); + + // Now Bob cannot call adjust() + vm.prank(Bob); + vm.expectRevert(); + target.adjust(); + } +} diff --git a/packages/protocol/test/libs/LibFixedPointMath.t.sol b/packages/protocol/test/libs/LibFixedPointMath.t.sol index 1aef9ae8e9b..aecedeb027a 100644 --- a/packages/protocol/test/libs/LibFixedPointMath.t.sol +++ b/packages/protocol/test/libs/LibFixedPointMath.t.sol @@ -3,11 +3,9 @@ // https://github.com/recmo/experiment-solexp/blob/main/src/test/FixedPointMathLib.t.sol pragma solidity 0.8.20; -import "forge-std/Test.sol"; -import "forge-std/console2.sol"; -import "../../contracts/thirdparty/LibFixedPointMath.sol"; +import "../TaikoTest.sol"; -contract LibFixedPointMathTest is Test { +contract LibFixedPointMathTest is TaikoTest { function testExp1() public { assertEq(LibFixedPointMath.exp(-1e18), 367_879_441_171_442_321); } diff --git a/packages/protocol/test/signal/SignalService.t.sol b/packages/protocol/test/signal/SignalService.t.sol index 721b1e5f26e..679a94bd664 100644 --- a/packages/protocol/test/signal/SignalService.t.sol +++ b/packages/protocol/test/signal/SignalService.t.sol @@ -1,46 +1,61 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "forge-std/console.sol"; -import "forge-std/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/common/AddressResolver.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "../../contracts/tokenvault/BridgedERC20.sol"; -import "../../contracts/test/erc20/FreeMintERC20.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../TestBase.sol"; +import "../TaikoTest.sol"; contract TestSignalService is TaikoTest { AddressManager addressManager; - SignalService signalService; SignalService destSignalService; DummyCrossChainSync crossChainSync; - uint64 destChainId = 7; + uint64 public destChainId = 7; function setUp() public { vm.startPrank(Alice); vm.deal(Alice, 1 ether); vm.deal(Bob, 1 ether); - addressManager = new AddressManager(); - addressManager.init(); - - signalService = new SignalService(); - signalService.init(); - - destSignalService = new SignalService(); - destSignalService.init(); - - crossChainSync = new DummyCrossChainSync(); - crossChainSync.init(address(addressManager)); - - addressManager.setAddress(uint64(block.chainid), "signal_service", address(signalService)); - - addressManager.setAddress(destChainId, "signal_service", address(destSignalService)); - - addressManager.setAddress(destChainId, "taiko", address(crossChainSync)); + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector), + registerTo: address(addressManager), + owner: address(0) + }) + ); + + signalService = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector) + }) + ); + + destSignalService = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector) + }) + ); + + crossChainSync = DummyCrossChainSync( + LibDeployHelper.deployProxy({ + name: "dummy_cross_chain_sync", + impl: address(new DummyCrossChainSync()), + data: "" + }) + ); + + LibDeployHelper.register( + address(addressManager), "signal_service", address(destSignalService), destChainId + ); + + LibDeployHelper.register( + address(addressManager), "taiko", address(crossChainSync), destChainId + ); vm.stopPrank(); } diff --git a/packages/protocol/test/team/TimeLockTokenPool.t.sol b/packages/protocol/test/team/TimeLockTokenPool.t.sol index bbd52ce1aaa..83764950424 100644 --- a/packages/protocol/test/team/TimeLockTokenPool.t.sol +++ b/packages/protocol/test/team/TimeLockTokenPool.t.sol @@ -1,10 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; -import "forge-std/Test.sol"; -import "forge-std/console2.sol"; -import "../../contracts/team/TimeLockTokenPool.sol"; +import "../TaikoTest.sol"; contract MyERC20 is ERC20 { constructor(address owner) ERC20("Taiko Token", "TKO") { @@ -12,16 +9,20 @@ contract MyERC20 is ERC20 { } } -contract TestTimeLockTokenTimeLockTokenPool is Test { - address internal Vault = vm.addr(0x1); - address internal Alice = vm.addr(0x2); - address internal Bob = vm.addr(0x3); +contract TestTimeLockTokenPool is TaikoTest { + address internal Vault = randAddress(); ERC20 tko = new MyERC20(Vault); - TimeLockTokenPool pool = new TimeLockTokenPool(); + TimeLockTokenPool pool; function setUp() public { - pool.init(address(tko), Vault); + pool = TimeLockTokenPool( + LibDeployHelper.deployProxy({ + name: "time_lock_token_pool", + impl: address(new TimeLockTokenPool()), + data: bytes.concat(TimeLockTokenPool.init.selector, abi.encode(address(tko), Vault)) + }) + ); } function test_invalid_granting() public { diff --git a/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol b/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol new file mode 100644 index 00000000000..7276c006e2c --- /dev/null +++ b/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol @@ -0,0 +1,248 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "../../TaikoTest.sol"; + +contract MyERC20 is ERC20 { + constructor(address owner) ERC20("Taiko Token", "TKO") { + _mint(owner, 1_000_000_000e18); + } +} + +contract TestERC20Airdrop is TaikoTest { + uint64 claimStart; + uint64 claimEnd; + address internal owner = randAddress(); + + bytes32 merkleRoot = 0x73a7330a8657ad864b954215a8f636bb3709d2edea60bcd4fcb8a448dbc6d70f; + + ERC20Airdrop airdrop; + ERC20Airdrop2 airdrop2; + ERC20 token; + + function setUp() public { + token = new MyERC20(address(owner)); + // 1st 'genesis' airdrop + airdrop = ERC20Airdrop( + LibDeployHelper.deployProxy({ + name: "airdrop", + impl: address(new ERC20Airdrop()), + data: bytes.concat( + ERC20Airdrop.init.selector, abi.encode(0, 0, merkleRoot, address(token), owner) + ) + }) + ); + + // 2nd airdrop subject to unlocking (e.g. 10 days after starting after + // claim window) + airdrop2 = ERC20Airdrop2( + LibDeployHelper.deployProxy({ + name: "airdrop", + impl: address(new ERC20Airdrop2()), + data: bytes.concat( + ERC20Airdrop2.init.selector, + abi.encode(0, 0, merkleRoot, address(token), owner, 10 days) + ) + }) + ); + + claimStart = uint64(block.timestamp + 10); + claimEnd = uint64(block.timestamp + 10_000); + + airdrop.setConfig(claimStart, claimEnd, merkleRoot); + + airdrop2.setConfig(claimStart, claimEnd, merkleRoot); + + vm.roll(block.number + 1); + vm.warp(block.timestamp + 12); + + vm.prank(owner, owner); + MyERC20(address(token)).approve(address(airdrop), 1_000_000_000e18); + + vm.prank(owner, owner); + MyERC20(address(token)).approve(address(airdrop2), 1_000_000_000e18); + } + + function test_claim_but_claim_not_ongoing_yet() public { + vm.warp(1); + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.expectRevert(MerkleClaimable.CLAIM_NOT_ONGOING.selector); + vm.prank(Alice, Alice); + airdrop.claim(abi.encode(Alice, 100), merkleProof); + } + + function test_claim_but_claim_not_ongoing_anymore() public { + vm.warp(uint64(block.timestamp + 11_000)); + + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.expectRevert(MerkleClaimable.CLAIM_NOT_ONGOING.selector); + vm.prank(Alice, Alice); + airdrop.claim(abi.encode(Alice, 100), merkleProof); + } + + function test_claim_but_with_invalid_allowance() public { + vm.warp(uint64(block.timestamp + 11)); + // These proofs are coming from 'pnpm run buildMerkle' + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.expectRevert(MerkleClaimable.INVALID_PROOF.selector); + vm.prank(Alice, Alice); + airdrop.claim(abi.encode(Alice, 200), merkleProof); + } + + function test_claim() public { + vm.warp(uint64(block.timestamp + 11)); + // These proofs are coming from 'pnpm run buildMerkle' + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.prank(Alice, Alice); + airdrop.claim(abi.encode(Alice, 100), merkleProof); + + // Check Alice balance + assertEq(token.balanceOf(Alice), 100); + } + + function test_claim_with_same_proofs_twice() public { + vm.warp(uint64(block.timestamp + 11)); + // These proofs are coming from 'pnpm run buildMerkle' + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.prank(Alice, Alice); + airdrop.claim(abi.encode(Alice, 100), merkleProof); + + // Check Alice balance + assertEq(token.balanceOf(Alice), 100); + + vm.expectRevert(MerkleClaimable.CLAIMED_ALREADY.selector); + vm.prank(Alice, Alice); + airdrop.claim(abi.encode(Alice, 100), merkleProof); + } + + function test_withdraw_for_airdrop2_withdraw_daily() public { + vm.warp(uint64(block.timestamp + 11)); + // These proofs are coming from 'pnpm run buildMerkle' + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.prank(Alice, Alice); + airdrop2.claim(abi.encode(Alice, 100), merkleProof); + + // Try withdraw but not started yet + vm.expectRevert(ERC20Airdrop2.WITHDRAWALS_NOT_ONGOING.selector); + airdrop2.withdraw(Alice); + + // Roll one day after another, for 10 days and see the 100 allowance be withdrawn all and no + // more left for the 11th day + uint256 i = 1; + uint256 balance; + uint256 withdrawable; + for (i = 1; i < 11; i++) { + vm.roll(block.number + 200); + vm.warp(claimEnd + (i * 1 days)); + + (balance, withdrawable) = airdrop2.getBalance(Alice); + + assertEq(balance, 100); + assertEq(withdrawable, 10); + + airdrop2.withdraw(Alice); + // Check Alice balance + assertEq(token.balanceOf(Alice), (i * 10)); + } + + // On the 10th day (midnight), Alice has no claims left + vm.roll(block.number + 200); + vm.warp(claimEnd + (10 days)); + + (balance, withdrawable) = airdrop2.getBalance(Alice); + + assertEq(balance, 100); + assertEq(withdrawable, 0); + + // No effect + airdrop2.withdraw(Alice); + // Check Alice balance + assertEq(token.balanceOf(Alice), 100); + } + + function test_withdraw_for_airdrop2_withdraw_at_the_end() public { + vm.warp(uint64(block.timestamp + 11)); + // These proofs are coming from 'pnpm run buildMerkle' + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.prank(Alice, Alice); + airdrop2.claim(abi.encode(Alice, 100), merkleProof); + + // Try withdraw but not started yet + vm.expectRevert(ERC20Airdrop2.WITHDRAWALS_NOT_ONGOING.selector); + airdrop2.withdraw(Alice); + + // Roll 10 day after + vm.roll(block.number + 200); + vm.warp(claimEnd + 10 days); + + (uint256 balance, uint256 withdrawable) = airdrop2.getBalance(Alice); + + assertEq(balance, 100); + assertEq(withdrawable, 100); + + airdrop2.withdraw(Alice); + + // Check Alice balance + assertEq(token.balanceOf(Alice), 100); + } + + function test_withdraw_for_airdrop2_but_out_of_withdrawal_window() public { + vm.warp(uint64(block.timestamp + 11)); + // These proofs are coming from 'pnpm run buildMerkle' + bytes32[] memory merkleProof = new bytes32[](3); + merkleProof[0] = 0x4014b456db813d18e801fe3b30bbe14542c9c84caa9a92b643f7f46849283077; + merkleProof[1] = 0xfc2f09b34fb9437f9bde16049237a2ab3caa6d772bd794da57a8c314aea22b3f; + merkleProof[2] = 0xc13844b93533d8aec9c7c86a3d9399efb4e834f4069b9fd8a88e7290be612d05; + + vm.prank(Alice, Alice); + airdrop2.claim(abi.encode(Alice, 100), merkleProof); + + // Try withdraw but not started yet + vm.expectRevert(ERC20Airdrop2.WITHDRAWALS_NOT_ONGOING.selector); + airdrop2.withdraw(Alice); + + // Roll 11 day after + vm.roll(block.number + 200); + vm.warp(claimEnd + 11 days); + + (uint256 balance, uint256 withdrawable) = airdrop2.getBalance(Alice); + + // Balance and withdrawable is 100,100 --> bc. it is out of withdrawal window + assertEq(balance, 100); + assertEq(withdrawable, 100); + + vm.expectRevert(ERC20Airdrop2.WITHDRAWALS_NOT_ONGOING.selector); + airdrop2.withdraw(Alice); + + // Check Alice balance + assertEq(token.balanceOf(Alice), 0); + } +} diff --git a/packages/protocol/test/tokenvault/ERC1155Vault.t.sol b/packages/protocol/test/tokenvault/ERC1155Vault.t.sol index bab7ffeaafd..d0f38b29b59 100644 --- a/packages/protocol/test/tokenvault/ERC1155Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC1155Vault.t.sol @@ -2,17 +2,7 @@ pragma solidity ^0.8.20; import "lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol"; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "forge-std/console2.sol"; -import "../TestBase.sol"; -import "../../contracts/common/AddressResolver.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "../../contracts/tokenvault/BaseNFTVault.sol"; -import "../../contracts/tokenvault/ERC1155Vault.sol"; -import "../../contracts/tokenvault/BridgedERC1155.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../../contracts/common/ICrossChainSync.sol"; +import "../TaikoTest.sol"; contract TestTokenERC1155 is ERC1155 { constructor(string memory baseURI) ERC1155(baseURI) { } @@ -112,39 +102,77 @@ contract ERC1155VaultTest is TaikoTest { DummyCrossChainSync crossChainSync; uint64 destChainId = 19_389; - // Need +1 bc. and Amelia is the proxied bridge contracts owner - // Change will cause onMessageRecall() test fails, because of - // getPreDeterminedDataBytes - address public Amelia = 0x60081b12838240B1ba02B3177153Bca678a86081; - function setUp() public { - vm.startPrank(Amelia); + vm.startPrank(Carol); vm.deal(Alice, 100 ether); - vm.deal(Amelia, 100 ether); + vm.deal(Carol, 100 ether); vm.deal(Bob, 100 ether); - addressManager = new AddressManager(); - addressManager.init(); + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }) + ); - bridge = new Bridge(); - bridge.init(address(addressManager)); + bridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); - destChainBridge = new Bridge(); - destChainBridge.init(address(addressManager)); + destChainBridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); - signalService = new SignalService(); - signalService.init(); + signalService = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector) + }) + ); - erc1155Vault = new ERC1155Vault(); - erc1155Vault.init(address(addressManager)); + erc1155Vault = ERC1155Vault( + LibDeployHelper.deployProxy({ + name: "erc1155_vault", + impl: address(new ERC1155Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) + }) + ); - destChainErc1155Vault = new ERC1155Vault(); - destChainErc1155Vault.init(address(addressManager)); + destChainErc1155Vault = ERC1155Vault( + LibDeployHelper.deployProxy({ + name: "erc1155_vault", + impl: address(new ERC1155Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) + }) + ); destChainIdBridge = new PrankDestBridge(destChainErc1155Vault); vm.deal(address(destChainIdBridge), 100 ether); - mockProofSignalService = new SkipProofCheckSignal(); - mockProofSignalService.init(); + mockProofSignalService = SkipProofCheckSignal( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SkipProofCheckSignal()), + data: bytes.concat(SignalService.init.selector) + }) + ); crossChainSync = new DummyCrossChainSync(); @@ -176,12 +204,10 @@ contract ERC1155VaultTest is TaikoTest { vm.deal(address(bridge), 100 ether); - address proxiedBridgedERC1155 = address(new ProxiedBridgedERC1155()); + address bridgedERC1155 = address(new BridgedERC1155()); - addressManager.setAddress(destChainId, "proxied_bridged_erc1155", proxiedBridgedERC1155); - addressManager.setAddress( - uint64(block.chainid), "proxied_bridged_erc1155", proxiedBridgedERC1155 - ); + addressManager.setAddress(destChainId, "bridged_erc1155", bridgedERC1155); + addressManager.setAddress(uint64(block.chainid), "bridged_erc1155", bridgedERC1155); ctoken1155 = new TestTokenERC1155("http://example.host.com/"); vm.stopPrank(); @@ -630,7 +656,7 @@ contract ERC1155VaultTest is TaikoTest { destChainIdBridge.setERC1155Vault(address(erc1155Vault)); - vm.prank(Amelia, Amelia); + vm.prank(Carol, Carol); addressManager.setAddress(uint64(block.chainid), "bridge", address(destChainIdBridge)); destChainIdBridge.sendReceiveERC1155ToERC1155Vault( @@ -777,10 +803,8 @@ contract ERC1155VaultTest is TaikoTest { // Upgrade the implementation of that contract // so that it supports now the 'helloWorld' call UpdatedBridgedERC1155 newBridgedContract = new UpdatedBridgedERC1155(); - vm.prank(Amelia, Amelia); - TransparentUpgradeableProxy(payable(deployedContract)).upgradeTo( - address(newBridgedContract) - ); + vm.prank(Carol, Carol); + BridgedERC1155(payable(deployedContract)).upgradeTo(address(newBridgedContract)); try UpdatedBridgedERC1155(deployedContract).helloWorld() { } catch { diff --git a/packages/protocol/test/tokenvault/ERC20Vault.t.sol b/packages/protocol/test/tokenvault/ERC20Vault.t.sol index b798ca09893..ad41b732fbf 100644 --- a/packages/protocol/test/tokenvault/ERC20Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC20Vault.t.sol @@ -1,16 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "forge-std/Test.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/common/AddressResolver.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "../../contracts/tokenvault/BridgedERC20.sol"; -import "../../contracts/test/erc20/FreeMintERC20.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../../contracts/L1/TaikoToken.sol"; -import "../../contracts/tokenvault/ERC20Vault.sol"; +import "../TaikoTest.sol"; // PrankDestBridge lets us simulate a transaction to the ERC20Vault // from a named Bridge, without having to test/run through the real Bridge code, @@ -77,7 +68,7 @@ contract UpdatedBridgedERC20 is BridgedERC20 { } } -contract TestERC20Vault is Test { +contract TestERC20Vault is TaikoTest { TaikoToken tko; AddressManager addressManager; Bridge bridge; @@ -88,43 +79,75 @@ contract TestERC20Vault is Test { SignalService signalService; uint64 destChainId = 7; - address public constant Alice = 0x10020FCb72e27650651B05eD2CEcA493bC807Ba4; - address public constant Bob = 0x200708D76eB1B69761c23821809d53F65049939e; - // Need +1 bc. and Amelia is the proxied bridge contracts owner - address public constant Amelia = 0x60081B12838240B1BA02b3177153BCa678A86080; - // Dave has nothing so that we can check if he gets the ether (and other - // erc20) - address public constant Dave = 0x70081B12838240b1ba02B3177153bcA678a86090; - function setUp() public { - vm.startPrank(Amelia); + vm.startPrank(Carol); vm.deal(Alice, 1 ether); - vm.deal(Amelia, 1 ether); + vm.deal(Carol, 1 ether); vm.deal(Bob, 1 ether); - tko = new TaikoToken(); + tko = TaikoToken( + LibDeployHelper.deployProxy({ + name: "taiko_token", + impl: address(new TaikoToken()), + data: bytes.concat( + TaikoToken.init.selector, abi.encode("Taiko Token", "TTKOk", address(this)) + ) + }) + ); + + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }) + ); - addressManager = new AddressManager(); - addressManager.init(); addressManager.setAddress(uint64(block.chainid), "taiko_token", address(tko)); - erc20Vault = new ERC20Vault(); - erc20Vault.init(address(addressManager)); + erc20Vault = ERC20Vault( + LibDeployHelper.deployProxy({ + name: "erc20_vault", + impl: address(new ERC20Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) + }) + ); - destChainIdERC20Vault = new ERC20Vault(); - destChainIdERC20Vault.init(address(addressManager)); + destChainIdERC20Vault = ERC20Vault( + LibDeployHelper.deployProxy({ + name: "erc20_vault", + impl: address(new ERC20Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) + }) + ); erc20 = new FreeMintERC20("ERC20", "ERC20"); erc20.mint(Alice); - bridge = new Bridge(); - bridge.init(address(addressManager)); + bridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); destChainIdBridge = new PrankDestBridge(erc20Vault); vm.deal(address(destChainIdBridge), 100 ether); - signalService = new SignalService(); - signalService.init(); + signalService = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector), + registerTo: address(0), + owner: address(0) + }) + ); addressManager.setAddress(uint64(block.chainid), "bridge", address(bridge)); @@ -136,13 +159,11 @@ contract TestERC20Vault is Test { addressManager.setAddress(destChainId, "bridge", address(destChainIdBridge)); - address proxiedBridgedERC20 = address(new ProxiedBridgedERC20()); + address bridgedERC20 = address(new BridgedERC20()); - addressManager.setAddress(destChainId, "proxied_bridged_erc20", proxiedBridgedERC20); + addressManager.setAddress(destChainId, "bridged_erc20", bridgedERC20); - addressManager.setAddress( - uint64(block.chainid), "proxied_bridged_erc20", proxiedBridgedERC20 - ); + addressManager.setAddress(uint64(block.chainid), "bridged_erc20", bridgedERC20); vm.stopPrank(); } @@ -291,7 +312,7 @@ contract TestERC20Vault is Test { uint256 amount = 1; uint256 etherAmount = 0.1 ether; - address to = Dave; + address to = David; uint256 erc20VaultBalanceBefore = erc20.balanceOf(address(erc20Vault)); uint256 toBalanceBefore = erc20.balanceOf(to); @@ -312,7 +333,7 @@ contract TestERC20Vault is Test { uint256 toBalanceAfter = erc20.balanceOf(to); assertEq(toBalanceAfter - toBalanceBefore, amount); - assertEq(Dave.balance, etherAmount); + assertEq(David.balance, etherAmount); } function test_20Vault_receive_erc20_non_canonical_to_dest_chain_deploys_new_bridged_token_and_mints( @@ -406,10 +427,8 @@ contract TestERC20Vault is Test { // so that it supports now the 'helloWorld' call UpdatedBridgedERC20 newBridgedContract = new UpdatedBridgedERC20(); vm.stopPrank(); - vm.prank(Amelia, Amelia); - TransparentUpgradeableProxy(payable(bridgedAddressAfter)).upgradeTo( - address(newBridgedContract) - ); + vm.prank(Carol, Carol); + BridgedERC20(payable(bridgedAddressAfter)).upgradeTo(address(newBridgedContract)); vm.prank(Alice, Alice); try UpdatedBridgedERC20(bridgedAddressAfter).helloWorld() { diff --git a/packages/protocol/test/tokenvault/ERC721Vault.t.sol b/packages/protocol/test/tokenvault/ERC721Vault.t.sol index df272108b8a..66745d3a680 100644 --- a/packages/protocol/test/tokenvault/ERC721Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC721Vault.t.sol @@ -2,16 +2,7 @@ pragma solidity ^0.8.20; import "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; -import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "forge-std/console2.sol"; -import "../TestBase.sol"; -import "../../contracts/common/AddressManager.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "../../contracts/tokenvault/BaseNFTVault.sol"; -import "../../contracts/tokenvault/ERC721Vault.sol"; -import "../../contracts/tokenvault/BridgedERC721.sol"; -import "../../contracts/signal/SignalService.sol"; -import "../../contracts/common/ICrossChainSync.sol"; +import "../TaikoTest.sol"; contract TestTokenERC721 is ERC721 { string _baseTokenURI; @@ -126,39 +117,78 @@ contract ERC721VaultTest is TaikoTest { DummyCrossChainSync crossChainSync; uint64 destChainId = 19_389; - // Need +1 bc. and Amelia is the proxied bridge contracts owner - // Change will cause onMessageRecall() test fails, because of - // getPreDeterminedDataBytes - address public constant Amelia = 0x60081B12838240B1BA02b3177153BCa678A86080; - function setUp() public { - vm.startPrank(Amelia); + vm.startPrank(Carol); vm.deal(Alice, 100 ether); - vm.deal(Amelia, 100 ether); + vm.deal(Carol, 100 ether); vm.deal(Bob, 100 ether); - addressManager = new AddressManager(); - addressManager.init(); - bridge = new Bridge(); - bridge.init(address(addressManager)); + addressManager = AddressManager( + LibDeployHelper.deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }) + ); - destChainBridge = new Bridge(); - destChainBridge.init(address(addressManager)); + bridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); - signalService = new SignalService(); - signalService.init(); + destChainBridge = Bridge( + payable( + LibDeployHelper.deployProxy({ + name: "bridge", + impl: address(new Bridge()), + data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), + registerTo: address(addressManager), + owner: address(0) + }) + ) + ); - erc721Vault = new ERC721Vault(); - erc721Vault.init(address(addressManager)); + signalService = SignalService( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SignalService()), + data: bytes.concat(SignalService.init.selector) + }) + ); - destChainErc721Vault = new ERC721Vault(); - destChainErc721Vault.init(address(addressManager)); + erc721Vault = ERC721Vault( + LibDeployHelper.deployProxy({ + name: "erc721_vault", + impl: address(new ERC721Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) + }) + ); + + destChainErc721Vault = ERC721Vault( + LibDeployHelper.deployProxy({ + name: "erc721_vault", + impl: address(new ERC721Vault()), + data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) + }) + ); destChainIdBridge = new PrankDestBridge(destChainErc721Vault); vm.deal(address(destChainIdBridge), 100 ether); - mockProofSignalService = new SkipProofCheckSignal(); - mockProofSignalService.init(); + mockProofSignalService = SkipProofCheckSignal( + LibDeployHelper.deployProxy({ + name: "signal_service", + impl: address(new SkipProofCheckSignal()), + data: bytes.concat(SignalService.init.selector) + }) + ); crossChainSync = new DummyCrossChainSync(); @@ -183,19 +213,16 @@ contract ERC721VaultTest is TaikoTest { addressManager.setAddress(uint64(block.chainid), "erc1155_vault", address(erc721Vault)); addressManager.setAddress(uint64(block.chainid), "erc20_vault", address(erc721Vault)); - address proxiedBridgedERC721 = address(new ProxiedBridgedERC721()); + address bridgedERC721 = address(new BridgedERC721()); - addressManager.setAddress(destChainId, "proxied_bridged_erc721", proxiedBridgedERC721); - addressManager.setAddress( - uint64(block.chainid), "proxied_bridged_erc721", proxiedBridgedERC721 - ); + addressManager.setAddress(destChainId, "bridged_erc721", bridgedERC721); + addressManager.setAddress(uint64(block.chainid), "bridged_erc721", bridgedERC721); vm.stopPrank(); vm.startPrank(Alice); canonicalToken721 = new TestTokenERC721("http://example.host.com/"); canonicalToken721.mint(10); - vm.stopPrank(); } @@ -651,7 +678,7 @@ contract ERC721VaultTest is TaikoTest { destChainIdBridge.setERC721Vault(address(erc721Vault)); - vm.prank(Amelia, Amelia); + vm.prank(Carol, Carol); addressManager.setAddress(uint64(block.chainid), "bridge", address(destChainIdBridge)); destChainIdBridge.sendReceiveERC721ToERC721Vault( @@ -797,10 +824,8 @@ contract ERC721VaultTest is TaikoTest { // Upgrade the implementation of that contract // so that it supports now the 'helloWorld' call UpdatedBridgedERC721 newBridgedContract = new UpdatedBridgedERC721(); - vm.prank(Amelia, Amelia); - TransparentUpgradeableProxy(payable(deployedContract)).upgradeTo( - address(newBridgedContract) - ); + vm.prank(Carol, Carol); + BridgedERC721(payable(deployedContract)).upgradeTo(address(newBridgedContract)); try UpdatedBridgedERC721(deployedContract).helloWorld() { // It should support now this function call diff --git a/packages/protocol/utils/airdrop/airdrop_db/example_claimList.json b/packages/protocol/utils/airdrop/airdrop_db/example_claimList.json new file mode 100644 index 00000000000..3208e43309c --- /dev/null +++ b/packages/protocol/utils/airdrop/airdrop_db/example_claimList.json @@ -0,0 +1,7 @@ +[ + { "address": "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf", "amount": 100 }, + { "address": "0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF", "amount": 100 }, + { "address": "0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69", "amount": 100 }, + { "address": "0x1efF47bc3a10a45D4B230B5d10E37751FE6AA718", "amount": 100 }, + { "address": "0xe1AB8145F7E55DC933d51a18c793F901A3A0b276", "amount": 200 } +] diff --git a/packages/protocol/utils/airdrop/buildMerkleTree.ts b/packages/protocol/utils/airdrop/buildMerkleTree.ts new file mode 100644 index 00000000000..f732a115c79 --- /dev/null +++ b/packages/protocol/utils/airdrop/buildMerkleTree.ts @@ -0,0 +1,97 @@ +import { MerkleTree } from "merkletreejs/dist/MerkleTree"; +const { ethers } = require("ethers"); +const keccak256 = require("keccak256"); +const fs = require("fs"); + +interface IClaimListData { + address: string; + amount: number; +} + +interface IMerkle { + merkleTree: MerkleTree; + rootHash: string; +} + +async function buildMerkleTree( + allowListDataArr: IClaimListData[], +): Promise { + // create merkle tree + const leafNodes: any = []; + for (let i = 0; i < allowListDataArr.length; i++) { + leafNodes.push(buildLeaf(allowListDataArr[i])); + } + const merkleTree = new MerkleTree(leafNodes, keccak256, { + sortPairs: true, + }); + + const rootHash = merkleTree.getHexRoot(); + + return { + merkleTree, + rootHash, + }; +} + +function buildLeaf(data: IClaimListData) { + const inputData = ethers.utils.defaultAbiCoder.encode( + ["address", "uint256"], + [data.address, data.amount], + ); + + return Buffer.from( + ethers.utils + .keccak256( + ethers.utils.defaultAbiCoder.encode( + ["bytes", "bytes"], + [ + ethers.utils.toUtf8Bytes("CLAIM_TAIKO_AIRDROP"), + inputData, + ], + ), + ) + .slice(2), + "hex", + ); +} + +async function getMerkleProof( + address: string, + amount: number, + claimList: IClaimListData[], +) { + const merkleData = await buildMerkleTree(claimList); + const leaf = buildLeaf({ address, amount }); + + return merkleData.merkleTree.getHexProof(leaf); +} + +async function main() { + const filePath = process.argv[2]; + + if (!filePath) { + console.error( + "Please provide a path to the JSON file as a command-line argument.", + ); + return; + } + + const jsonData = fs.readFileSync(filePath, "utf-8"); + const claimList: IClaimListData[] = JSON.parse(jsonData); + const merkleData = await buildMerkleTree(claimList); + + console.log("Merkle root:", merkleData.rootHash); + console.log("Nr of leaves (entries):", claimList.length); + + const exampleProof = await getMerkleProof( + "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf", + 100, + claimList, + ); + + console.log("Example proof for Alice (foundry) is: ", exampleProof); +} + +main().catch((error) => { + console.error(error); +}); diff --git a/packages/protocol/utils/generate_genesis/main.ts b/packages/protocol/utils/generate_genesis/main.ts index c9b34a20206..a792c95a1c5 100644 --- a/packages/protocol/utils/generate_genesis/main.ts +++ b/packages/protocol/utils/generate_genesis/main.ts @@ -47,7 +47,7 @@ async function main() { console.log("config: %o", config); - console.log("start deploy ProxiedSingletonTaikoL2 contract"); + console.log("start deploy TaikoL2 contract"); let result = await deployTaikoL2(config, { alloc: {}, diff --git a/packages/protocol/utils/generate_genesis/taikoL2.ts b/packages/protocol/utils/generate_genesis/taikoL2.ts index 2c639f115ca..39d1e9d4ed5 100644 --- a/packages/protocol/utils/generate_genesis/taikoL2.ts +++ b/packages/protocol/utils/generate_genesis/taikoL2.ts @@ -12,15 +12,12 @@ const ARTIFACTS_PATH = path.join(__dirname, "../../out"); const IMPLEMENTATION_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; -const ADMIN_SLOT = - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - // deployTaikoL2 generates a L2 genesis alloc of the TaikoL2 contract. export async function deployTaikoL2( config: Config, result: Result, ): Promise { - const { contractOwner, chainId, seedAccounts, contractAdmin } = config; + const { contractOwner, chainId, seedAccounts } = config; const alloc: any = {}; @@ -46,7 +43,6 @@ export async function deployTaikoL2( const contractConfigs: any = await generateContractConfigs( contractOwner, - contractAdmin, chainId, config.contractAddresses, config.param1559, @@ -67,7 +63,7 @@ export async function deployTaikoL2( // pre-mint ETHs for Bridge contract alloc[contractConfig.address].balance = - contractName === "SingletonBridgeProxy" + contractName === "Bridge" ? bridgeInitialEtherBalance.toHexString() : "0x0"; @@ -75,12 +71,11 @@ export async function deployTaikoL2( // rollup/artifacts/build-info will contain storage layouts, here // reading it using smock package. let storageLayoutName = contractName; - if (contractConfig.isProxy) { - storageLayoutName = contractName.replace("Proxy", ""); - storageLayoutName = `Proxied${storageLayoutName}`; - } + if (!contractConfig.isProxy) + storageLayoutName = `${contractName.replace("Impl", "")}`; + storageLayoutName = contractName.includes("AddressManager") - ? "ProxiedAddressManager" + ? "AddressManager" : storageLayoutName; storageLayouts[contractName] = @@ -118,128 +113,77 @@ export async function deployTaikoL2( // and initialized variables. async function generateContractConfigs( contractOwner: string, - contractAdmin: string, chainId: number, hardCodedAddresses: any, param1559: any, ): Promise { const contractArtifacts: any = { // ============ Contracts ============ - // Singletons - ProxiedSingletonBridge: require( - path.join( - ARTIFACTS_PATH, - "./Bridge.sol/ProxiedSingletonBridge.json", - ), + // Shared Contracts + BridgeImpl: require( + path.join(ARTIFACTS_PATH, "./Bridge.sol/Bridge.json"), ), - ProxiedSingletonERC20Vault: require( - path.join( - ARTIFACTS_PATH, - "./ERC20Vault.sol/ProxiedSingletonERC20Vault.json", - ), + ERC20VaultImpl: require( + path.join(ARTIFACTS_PATH, "./ERC20Vault.sol/ERC20Vault.json"), ), - ProxiedSingletonERC721Vault: require( - path.join( - ARTIFACTS_PATH, - "./ERC721Vault.sol/ProxiedSingletonERC721Vault.json", - ), + ERC721VaultImpl: require( + path.join(ARTIFACTS_PATH, "./ERC721Vault.sol/ERC721Vault.json"), ), - ProxiedSingletonERC1155Vault: require( - path.join( - ARTIFACTS_PATH, - "./ERC1155Vault.sol/ProxiedSingletonERC1155Vault.json", - ), + ERC1155VaultImpl: require( + path.join(ARTIFACTS_PATH, "./ERC1155Vault.sol/ERC1155Vault.json"), ), - ProxiedSingletonSignalService: require( - path.join( - ARTIFACTS_PATH, - "./SignalService.sol/ProxiedSingletonSignalService.json", - ), + SignalServiceImpl: require( + path.join(ARTIFACTS_PATH, "./SignalService.sol/SignalService.json"), ), - ProxiedSingletonAddressManagerForSingletons: require( + SharedAddressManagerImpl: require( path.join( ARTIFACTS_PATH, - "./AddressManager.sol/ProxiedAddressManager.json", + "./AddressManager.sol/AddressManager.json", ), ), - ProxiedBridgedERC20: require( - path.join( - ARTIFACTS_PATH, - "./BridgedERC20.sol/ProxiedBridgedERC20.json", - ), + BridgedERC20Impl: require( + path.join(ARTIFACTS_PATH, "./BridgedERC20.sol/BridgedERC20.json"), ), - ProxiedBridgedERC721: require( - path.join( - ARTIFACTS_PATH, - "./BridgedERC721.sol/ProxiedBridgedERC721.json", - ), + BridgedERC721Impl: require( + path.join(ARTIFACTS_PATH, "./BridgedERC721.sol/BridgedERC721.json"), ), - ProxiedBridgedERC1155: require( + BridgedERC1155Impl: require( path.join( ARTIFACTS_PATH, - "./BridgedERC1155.sol/ProxiedBridgedERC1155.json", + "./BridgedERC1155.sol/BridgedERC1155.json", ), ), - // Non-singletons - ProxiedSingletonTaikoL2: require( - path.join( - ARTIFACTS_PATH, - "./TaikoL2.sol/ProxiedSingletonTaikoL2.json", - ), + // Rollup Contracts + TaikoL2Impl: require( + path.join(ARTIFACTS_PATH, "./TaikoL2.sol/TaikoL2.json"), ), - ProxiedAddressManager: require( + RollupAddressManagerImpl: require( path.join( ARTIFACTS_PATH, - "./AddressManager.sol/ProxiedAddressManager.json", + "./AddressManager.sol/AddressManager.json", ), ), }; const proxy = require( - path.join( - ARTIFACTS_PATH, - "./TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json", - ), + path.join(ARTIFACTS_PATH, "./ERC1967Proxy.sol/ERC1967Proxy.json"), ); - // Singletons - contractArtifacts.SingletonBridgeProxy = proxy; - contractArtifacts.SingletonERC20VaultProxy = proxy; - contractArtifacts.SingletonERC721VaultProxy = proxy; - contractArtifacts.SingletonERC1155VaultProxy = proxy; - contractArtifacts.SingletonSignalServiceProxy = proxy; - contractArtifacts.SingletonAddressManagerForSingletonsProxy = proxy; - // Non-singletons - contractArtifacts.SingletonTaikoL2Proxy = proxy; - contractArtifacts.AddressManagerProxy = proxy; + // Shared Contracts + contractArtifacts.Bridge = proxy; + contractArtifacts.ERC20Vault = proxy; + contractArtifacts.ERC721Vault = proxy; + contractArtifacts.ERC1155Vault = proxy; + contractArtifacts.SignalService = proxy; + contractArtifacts.SharedAddressManager = proxy; + // Rollup Contracts + contractArtifacts.TaikoL2 = proxy; + contractArtifacts.RollupAddressManager = proxy; const addressMap: any = {}; for (const [contractName, artifact] of Object.entries(contractArtifacts)) { - let bytecode = (artifact as any).bytecode; - - switch (contractName) { - case "ProxiedSingletonTaikoL2": - bytecode = linkContractLibs( - contractArtifacts.ProxiedSingletonTaikoL2, - addressMap, - ); - break; - case "ProxiedSingletonBridge": - bytecode = linkContractLibs( - contractArtifacts.ProxiedSingletonBridge, - addressMap, - ); - break; - case "ProxiedSingletonSignalService": - bytecode = linkContractLibs( - contractArtifacts.ProxiedSingletonSignalService, - addressMap, - ); - break; - default: - break; - } + const bytecode = (artifact as any).bytecode; if ( hardCodedAddresses && @@ -261,73 +205,74 @@ async function generateContractConfigs( console.log(addressMap); return { - // Singletons - ProxiedSingletonAddressManagerForSingletons: { - address: addressMap.ProxiedSingletonAddressManagerForSingletons, + // Shared Contracts + SharedAddressManagerImpl: { + address: addressMap.SharedAddressManagerImpl, deployedBytecode: - contractArtifacts.ProxiedSingletonAddressManagerForSingletons - .deployedBytecode.object, + contractArtifacts.SharedAddressManagerImpl.deployedBytecode + .object, + variables: { + _owner: contractOwner, + }, }, - SingletonAddressManagerForSingletonsProxy: { - address: addressMap.SingletonAddressManagerForSingletonsProxy, + SharedAddressManager: { + address: addressMap.SharedAddressManager, deployedBytecode: - contractArtifacts.SingletonAddressManagerForSingletonsProxy - .deployedBytecode.object, + contractArtifacts.SharedAddressManager.deployedBytecode.object, variables: { // initializer _initialized: 1, _initializing: false, - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, // AddressManager addresses: { [chainId]: { [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("bridge"), - )]: addressMap.SingletonBridgeProxy, + )]: addressMap.Bridge, [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("erc20_vault"), - )]: addressMap.SingletonERC20VaultProxy, + )]: addressMap.ERC20Vault, [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("erc721_vault"), - )]: addressMap.SingletonERC721VaultProxy, + )]: addressMap.ERC721Vault, [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("erc1155_vault"), - )]: addressMap.SingletonERC1155VaultProxy, + )]: addressMap.ERC1155Vault, [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("signal_service"), - )]: addressMap.SingletonSignalServiceProxy, + )]: addressMap.SignalService, [ethers.utils.hexlify( - ethers.utils.toUtf8Bytes("proxied_bridged_erc20"), - )]: addressMap.ProxiedBridgedERC20, + ethers.utils.toUtf8Bytes("bridged_erc20"), + )]: addressMap.BridgedERC20Impl, [ethers.utils.hexlify( - ethers.utils.toUtf8Bytes("proxied_bridged_erc721"), - )]: addressMap.ProxiedBridgedERC721, + ethers.utils.toUtf8Bytes("bridged_erc721"), + )]: addressMap.BridgedERC721Impl, [ethers.utils.hexlify( - ethers.utils.toUtf8Bytes("proxied_bridged_erc1155"), - )]: addressMap.ProxiedBridgedERC1155, + ethers.utils.toUtf8Bytes("bridged_erc1155"), + )]: addressMap.BridgedERC1155Impl, }, }, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: - addressMap.ProxiedSingletonAddressManagerForSingletons, + [IMPLEMENTATION_SLOT]: addressMap.SharedAddressManagerImpl, }, isProxy: true, }, - ProxiedSingletonBridge: { - address: addressMap.ProxiedSingletonBridge, + BridgeImpl: { + address: addressMap.BridgeImpl, deployedBytecode: linkContractLibs( - contractArtifacts.ProxiedSingletonBridge, + contractArtifacts.BridgeImpl, addressMap, ), + variables: { + _owner: contractOwner, + }, }, - SingletonBridgeProxy: { - address: addressMap.SingletonBridgeProxy, - deployedBytecode: - contractArtifacts.SingletonBridgeProxy.deployedBytecode.object, + Bridge: { + address: addressMap.Bridge, + deployedBytecode: contractArtifacts.Bridge.deployedBytecode.object, variables: { // initializer _initialized: 1, @@ -335,31 +280,30 @@ async function generateContractConfigs( // ReentrancyGuardUpgradeable _reentry: 1, // _FALSE _paused: 1, // _FALSE - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, // AddressResolver - addressManager: - addressMap.SingletonAddressManagerForSingletonsProxy, + addressManager: addressMap.SharedAddressManager, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedSingletonBridge, + [IMPLEMENTATION_SLOT]: addressMap.BridgeImpl, }, isProxy: true, }, - ProxiedSingletonERC20Vault: { - address: addressMap.ProxiedSingletonERC20Vault, + ERC20VaultImpl: { + address: addressMap.ERC20VaultImpl, deployedBytecode: linkContractLibs( - contractArtifacts.ProxiedSingletonERC20Vault, + contractArtifacts.ERC20VaultImpl, addressMap, ), + variables: { + _owner: contractOwner, + }, }, - SingletonERC20VaultProxy: { - address: addressMap.SingletonERC20VaultProxy, + ERC20Vault: { + address: addressMap.ERC20Vault, deployedBytecode: - contractArtifacts.SingletonERC20VaultProxy.deployedBytecode - .object, + contractArtifacts.ERC20Vault.deployedBytecode.object, variables: { // initializer _initialized: 1, @@ -367,31 +311,30 @@ async function generateContractConfigs( // ReentrancyGuardUpgradeable _reentry: 1, // _FALSE _paused: 1, // _FALSE - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, // AddressResolver - addressManager: - addressMap.SingletonAddressManagerForSingletonsProxy, + addressManager: addressMap.SharedAddressManager, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedSingletonERC20Vault, + [IMPLEMENTATION_SLOT]: addressMap.ERC20VaultImpl, }, isProxy: true, }, - ProxiedSingletonERC721Vault: { - address: addressMap.ProxiedSingletonERC721Vault, + ERC721VaultImpl: { + address: addressMap.ERC721VaultImpl, deployedBytecode: linkContractLibs( - contractArtifacts.ProxiedSingletonERC721Vault, + contractArtifacts.ERC721VaultImpl, addressMap, ), + variables: { + _owner: contractOwner, + }, }, - SingletonERC721VaultProxy: { - address: addressMap.SingletonERC721VaultProxy, + ERC721Vault: { + address: addressMap.ERC721Vault, deployedBytecode: - contractArtifacts.SingletonERC721VaultProxy.deployedBytecode - .object, + contractArtifacts.ERC721Vault.deployedBytecode.object, variables: { // initializer _initialized: 1, @@ -399,31 +342,30 @@ async function generateContractConfigs( // ReentrancyGuardUpgradeable _reentry: 1, // _FALSE _paused: 1, // _FALSE - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, // AddressResolver - addressManager: - addressMap.SingletonAddressManagerForSingletonsProxy, + addressManager: addressMap.SharedAddressManager, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedSingletonERC721Vault, + [IMPLEMENTATION_SLOT]: addressMap.ERC721VaultImpl, }, isProxy: true, }, - ProxiedSingletonERC1155Vault: { - address: addressMap.ProxiedSingletonERC1155Vault, + ERC1155VaultImpl: { + address: addressMap.ERC1155VaultImpl, deployedBytecode: linkContractLibs( - contractArtifacts.ProxiedSingletonERC1155Vault, + contractArtifacts.ERC1155VaultImpl, addressMap, ), + variables: { + _owner: contractOwner, + }, }, - SingletonERC1155VaultProxy: { - address: addressMap.SingletonERC1155VaultProxy, + ERC1155Vault: { + address: addressMap.ERC1155Vault, deployedBytecode: - contractArtifacts.SingletonERC1155VaultProxy.deployedBytecode - .object, + contractArtifacts.ERC1155Vault.deployedBytecode.object, variables: { // initializer _initialized: 1, @@ -431,46 +373,45 @@ async function generateContractConfigs( // ReentrancyGuardUpgradeable _reentry: 1, // _FALSE _paused: 1, // _FALSE - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, // AddressResolver - addressManager: - addressMap.SingletonAddressManagerForSingletonsProxy, + addressManager: addressMap.SharedAddressManager, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedSingletonERC1155Vault, + [IMPLEMENTATION_SLOT]: addressMap.ERC1155VaultImpl, }, isProxy: true, }, - ProxiedSingletonSignalService: { - address: addressMap.ProxiedSingletonSignalService, - deployedBytecode: linkContractLibs( - contractArtifacts.ProxiedSingletonSignalService, - addressMap, - ), - }, - ProxiedBridgedERC20: { - address: addressMap.ProxiedBridgedERC20, + BridgedERC20: { + address: addressMap.BridgedERC20Impl, deployedBytecode: - contractArtifacts.ProxiedBridgedERC20.deployedBytecode.object, + contractArtifacts.BridgedERC20Impl.deployedBytecode.object, }, - ProxiedBridgedERC721: { - address: addressMap.ProxiedBridgedERC721, + BridgedERC721: { + address: addressMap.BridgedERC721Impl, deployedBytecode: - contractArtifacts.ProxiedBridgedERC721.deployedBytecode.object, + contractArtifacts.BridgedERC721Impl.deployedBytecode.object, }, - ProxiedBridgedERC1155: { - address: addressMap.ProxiedBridgedERC1155, + BridgedERC1155: { + address: addressMap.BridgedERC1155Impl, deployedBytecode: - contractArtifacts.ProxiedBridgedERC1155.deployedBytecode.object, + contractArtifacts.BridgedERC1155Impl.deployedBytecode.object, + }, + SignalServiceImpl: { + address: addressMap.SignalServiceImpl, + deployedBytecode: linkContractLibs( + contractArtifacts.SignalServiceImpl, + addressMap, + ), + variables: { + _owner: contractOwner, + }, }, - SingletonSignalServiceProxy: { - address: addressMap.SingletonSignalServiceProxy, + SignalService: { + address: addressMap.SignalService, deployedBytecode: - contractArtifacts.SingletonSignalServiceProxy.deployedBytecode - .object, + contractArtifacts.SignalService.deployedBytecode.object, variables: { // initializer _initialized: 1, @@ -478,45 +419,39 @@ async function generateContractConfigs( // ReentrancyGuardUpgradeable _reentry: 1, // _FALSE _paused: 1, // _FALSE - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, authorizedAddresses: { - [addressMap.SingletonTaikoL2Proxy]: ethers.utils.hexZeroPad( + [addressMap.TaikoL2]: ethers.utils.hexZeroPad( ethers.utils.hexlify(chainId), 32, ), }, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedSingletonSignalService, + [IMPLEMENTATION_SLOT]: addressMap.SignalServiceImpl, }, isProxy: true, }, - ProxiedAddressManager: { - address: addressMap.ProxiedAddressManager, - deployedBytecode: - contractArtifacts.ProxiedAddressManager.deployedBytecode.object, - }, - // Non-singletons - ProxiedSingletonTaikoL2: { - address: addressMap.ProxiedSingletonTaikoL2, + // Rollup Contracts + TaikoL2Impl: { + address: addressMap.TaikoL2Impl, deployedBytecode: linkContractLibs( - contractArtifacts.ProxiedSingletonTaikoL2, + contractArtifacts.TaikoL2Impl, addressMap, ), + variables: { + _owner: contractOwner, + }, }, - SingletonTaikoL2Proxy: { - address: addressMap.SingletonTaikoL2Proxy, - deployedBytecode: - contractArtifacts.SingletonTaikoL2Proxy.deployedBytecode.object, + TaikoL2: { + address: addressMap.TaikoL2, + deployedBytecode: contractArtifacts.TaikoL2.deployedBytecode.object, variables: { // TaikoL2 - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, - signalService: addressMap.SingletonSignalServiceProxy, + signalService: addressMap.SignalService, gasExcess: param1559.gasExcess, // keccak256(abi.encodePacked(block.chainid, basefee, ancestors)) publicInputHash: `${ethers.utils.solidityKeccak256( @@ -534,37 +469,43 @@ async function generateContractConfigs( )}`, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedSingletonTaikoL2, + [IMPLEMENTATION_SLOT]: addressMap.TaikoL2Impl, }, isProxy: true, }, - AddressManagerProxy: { - address: addressMap.AddressManagerProxy, + RollupAddressManagerImpl: { + address: addressMap.RollupAddressManagerImpl, + deployedBytecode: + contractArtifacts.RollupAddressManagerImpl.deployedBytecode + .object, + variables: { + _owner: contractOwner, + }, + }, + RollupAddressManager: { + address: addressMap.RollupAddressManager, deployedBytecode: - contractArtifacts.AddressManagerProxy.deployedBytecode.object, + contractArtifacts.RollupAddressManager.deployedBytecode.object, variables: { // initializer _initialized: 1, _initializing: false, - // Ownable2StepUpgradeable + // Ownable2Upgradeable _owner: contractOwner, - _pendingOwner: ethers.constants.AddressZero, // AddressManager addresses: { [chainId]: { [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("taiko"), - )]: addressMap.SingletonTaikoL2Proxy, + )]: addressMap.TaikoL2, [ethers.utils.hexlify( ethers.utils.toUtf8Bytes("signal_service"), - )]: addressMap.SingletonSignalServiceProxy, + )]: addressMap.SignalService, }, }, }, slots: { - [ADMIN_SLOT]: contractAdmin, - [IMPLEMENTATION_SLOT]: addressMap.ProxiedAddressManager, + [IMPLEMENTATION_SLOT]: addressMap.RollupAddressManagerImpl, }, isProxy: true, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a28755bbba..098fe24c389 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -157,7 +157,13 @@ importers: packages/fork-diff: {} + packages/guardian-prover-health-check: {} + packages/protocol: + dependencies: + merkletreejs: + specifier: ^0.3.11 + version: 0.3.11 devDependencies: '@defi-wonderland/smock': specifier: ^2.3.4 @@ -2372,7 +2378,6 @@ packages: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true - dev: true /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} @@ -2381,7 +2386,6 @@ packages: '@ethereumjs/rlp': 4.0.1 ethereum-cryptography: 2.1.2 micro-ftch: 0.3.1 - dev: true /@ethersproject/abi@5.0.0-beta.153: resolution: {integrity: sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==} @@ -3481,7 +3485,6 @@ packages: resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} dependencies: '@noble/hashes': 1.3.1 - dev: true /@noble/curves@1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -3499,7 +3502,6 @@ packages: /@noble/hashes@1.3.1: resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} engines: {node: '>= 16'} - dev: true /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} @@ -4298,7 +4300,6 @@ packages: '@noble/curves': 1.1.0 '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 - dev: true /@scure/bip32@1.3.2: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} @@ -8015,8 +8016,6 @@ packages: /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} requiresBuild: true - dev: true - optional: true /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -8070,7 +8069,6 @@ packages: /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - dev: true /bn.js@4.11.8: resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==} @@ -8325,6 +8323,10 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + /buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + dev: false + /buffer-to-arraybuffer@0.0.5: resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} requiresBuild: true @@ -9593,6 +9595,10 @@ packages: resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} dev: true + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + /css-loader@6.8.1(webpack@5.89.0): resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} engines: {node: '>= 12.13.0'} @@ -12023,7 +12029,6 @@ packages: resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: js-sha3: 0.8.0 - dev: true /ethereum-common@0.0.18: resolution: {integrity: sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==} @@ -12068,7 +12073,6 @@ packages: '@noble/hashes': 1.3.1 '@scure/bip32': 1.3.1 '@scure/bip39': 1.2.1 - dev: true /ethereum-waffle@3.4.4(typescript@5.2.2): resolution: {integrity: sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==} @@ -12357,7 +12361,6 @@ packages: dependencies: bn.js: 4.11.6 number-to-bn: 1.7.0 - dev: true /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -16886,6 +16889,17 @@ packages: semaphore-async-await: 1.5.1 dev: true + /merkletreejs@0.3.11: + resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} + engines: {node: '>= 7.6.0'} + dependencies: + bignumber.js: 9.1.2 + buffer-reverse: 1.0.1 + crypto-js: 4.2.0 + treeify: 1.1.0 + web3-utils: 1.10.2 + dev: false + /mermaid@10.5.0: resolution: {integrity: sha512-9l0o1uUod78D3/FVYPGSsgV+Z0tSnzLBDiC9rVzvelPxuO80HbN1oDr9ofpPETQy9XpypPQa26fr09VzEPfvWA==} dependencies: @@ -16922,7 +16936,6 @@ packages: /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} - dev: true /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -18257,7 +18270,6 @@ packages: dependencies: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - dev: true /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} @@ -22283,6 +22295,11 @@ packages: punycode: 2.3.0 dev: true + /treeify@1.1.0: + resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} + engines: {node: '>=0.6'} + dev: false + /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false @@ -23087,7 +23104,6 @@ packages: /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -24035,7 +24051,6 @@ packages: number-to-bn: 1.7.0 randombytes: 2.1.0 utf8: 3.0.0 - dev: true /web3-utils@1.2.11: resolution: {integrity: sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==} From 7a0af7eebf25e3b17ce9d31675dd4f44f622552e Mon Sep 17 00:00:00 2001 From: David Date: Wed, 29 Nov 2023 19:40:41 +0300 Subject: [PATCH 05/17] feat(protocol): improve DeployOnL1 logs (#15289) --- packages/protocol/contracts/libs/LibDeployHelper.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/contracts/libs/LibDeployHelper.sol b/packages/protocol/contracts/libs/LibDeployHelper.sol index 8f08a8d1313..c852572d905 100644 --- a/packages/protocol/contracts/libs/LibDeployHelper.sol +++ b/packages/protocol/contracts/libs/LibDeployHelper.sol @@ -35,7 +35,7 @@ library LibDeployHelper { if (registerTo != address(0)) { AddressManager(registerTo).setAddress(uint64(block.chainid), name, proxy); } - console2.log("> ", Strings.toString(uint256(name)), "@", registerTo); + console2.log("> ", string(abi.encodePacked(name)), "@", registerTo); console2.log("\t proxy : ", proxy); console2.log("\t impl : ", impl); console2.log("\t owner : ", OwnableUpgradeable(proxy).owner()); From aa9b6854271cef3ff96024a9bc4116a7d89e3cbf Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:35:58 +0800 Subject: [PATCH 06/17] fix(protocol): remove dup event from bridged tokens (#15290) --- packages/protocol/contracts/tokenvault/BridgedERC1155.sol | 2 -- packages/protocol/contracts/tokenvault/BridgedERC20.sol | 2 -- packages/protocol/contracts/tokenvault/BridgedERC721.sol | 3 --- 3 files changed, 7 deletions(-) diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol index fa74f127fa1..a21bc60f7d0 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol @@ -75,7 +75,6 @@ contract BridgedERC1155 is onlyFromNamed("erc1155_vault") { _mint(account, tokenId, amount, ""); - emit Transfer(address(0), account, tokenId, amount); } /// @dev Burns tokens. @@ -91,7 +90,6 @@ contract BridgedERC1155 is onlyFromNamed("erc1155_vault") { _burn(account, tokenId, amount); - emit Transfer(account, address(0), tokenId, amount); } /// @dev Safely transfers tokens from one address to another. diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20.sol b/packages/protocol/contracts/tokenvault/BridgedERC20.sol index 0b508e3b68e..21179997b55 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20.sol @@ -76,7 +76,6 @@ contract BridgedERC20 is /// @param amount The amount of tokens to mint. function mint(address account, uint256 amount) public onlyFromNamed("erc20_vault") { _mint(account, amount); - emit Transfer(address(0), account, amount); } /// @notice Burns tokens from an account. @@ -85,7 +84,6 @@ contract BridgedERC20 is /// @param amount The amount of tokens to burn. function burn(address account, uint256 amount) public onlyFromNamed("erc20_vault") { _burn(account, amount); - emit Transfer(account, address(0), amount); } /// @notice Transfers tokens from the caller to another account. diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/tokenvault/BridgedERC721.sol index 4fcbdf64b79..661ae5c1351 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC721.sol @@ -56,7 +56,6 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { /// @param tokenId ID of the token to mint. function mint(address account, uint256 tokenId) public onlyFromNamed("erc721_vault") { _mint(account, tokenId); - emit Transfer(address(0), account, tokenId); } /// @dev Burns tokens. @@ -67,9 +66,7 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { if (ownerOf(tokenId) != account) { revert BRIDGED_TOKEN_INVALID_BURN(); } - _burn(tokenId); - emit Transfer(account, address(0), tokenId); } /// @dev Safely transfers tokens from one address to another. From fd57baa8828c9f514d73757b3d13cbf4a38bfa52 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 30 Nov 2023 22:08:42 +0800 Subject: [PATCH 07/17] feat(protocol): Improve and test guardian prover (#15282) Co-authored-by: Daniel Wang Co-authored-by: jeff <113397187+cyberhorsey@users.noreply.github.com> Co-authored-by: David --- .../contracts/L1/provers/GuardianProver.sol | 82 ++---------- .../contracts/L1/provers/Guardians.sol | 108 ++++++++++++++++ .../contracts/common/AuthorizableContract.sol | 10 -- .../protocol/contracts/libs/LibDeploy.sol | 2 +- ...ockTokenPool.sol => TimelockTokenPool.sol} | 4 +- packages/protocol/script/DeployOnL1.s.sol | 117 ++++++------------ .../script/SetRemoteBridgeSuites.s.sol | 22 +--- packages/protocol/script/test_deploy_on_l1.sh | 1 + .../DeployCapability.sol} | 26 ++-- packages/protocol/test/L1/Guardians.t.sol | 87 +++++++++++++ packages/protocol/test/L1/SgxVerifier.t.sol | 7 +- packages/protocol/test/L1/TaikoL1.t.sol | 6 +- .../test/L1/TaikoL1LibProvingWithTiers.t.sol | 8 +- packages/protocol/test/L1/TaikoL1TestBase.sol | 27 ++-- packages/protocol/test/L2/TaikoL2.t.sol | 8 +- packages/protocol/test/TaikoTest.sol | 17 +-- packages/protocol/test/bridge/Bridge.t.sol | 20 ++- .../protocol/test/signal/SignalService.t.sol | 16 +-- ...okenPool.t.sol => TimelockTokenPool.t.sol} | 50 ++++---- .../test/team/airdrop/MerkleClaimable.t.sol | 4 +- .../test/tokenvault/ERC1155Vault.t.sol | 14 +-- .../protocol/test/tokenvault/ERC20Vault.t.sol | 12 +- .../test/tokenvault/ERC721Vault.t.sol | 14 +-- 23 files changed, 360 insertions(+), 302 deletions(-) create mode 100644 packages/protocol/contracts/L1/provers/Guardians.sol rename packages/protocol/contracts/team/{TimeLockTokenPool.sol => TimelockTokenPool.sol} (99%) rename packages/protocol/{contracts/libs/LibDeployHelper.sol => test/DeployCapability.sol} (74%) create mode 100644 packages/protocol/test/L1/Guardians.t.sol rename packages/protocol/test/team/{TimeLockTokenPool.t.sol => TimelockTokenPool.t.sol} (90%) diff --git a/packages/protocol/contracts/L1/provers/GuardianProver.sol b/packages/protocol/contracts/L1/provers/GuardianProver.sol index 2b51be87c11..1844bfb85b8 100644 --- a/packages/protocol/contracts/L1/provers/GuardianProver.sol +++ b/packages/protocol/contracts/L1/provers/GuardianProver.sol @@ -6,29 +6,11 @@ pragma solidity ^0.8.20; -import "../../common/EssentialContract.sol"; import "../tiers/ITierProvider.sol"; -import "../TaikoData.sol"; +import "./Guardians.sol"; /// @title GuardianProver -/// @dev Labeled in AddressResolver as "guardian_prover" -contract GuardianProver is EssentialContract { - uint256 public constant NUM_GUARDIANS = 5; - uint256 public constant REQUIRED_GUARDIANS = 3; - - mapping(address guardian => uint256 id) public guardianIds; // slot 1 - mapping(bytes32 => uint256 approvalBits) public approvals; // slot 2 - address[NUM_GUARDIANS] public guardians; // slots 3,4,5,6,7 - uint256[43] private __gap2; - - // Cannot use NUM_GUARDIANS below in event directly otherwise hardhat will - // fail - event GuardiansUpdated(address[5]); - event Approved(uint64 indexed blockId, uint256 approvalBits, bool proofSubmitted); - - error INVALID_GUARDIAN(); - error INVALID_GUARDIAN_SET(); - error INVALID_PROOF(); +contract GuardianProver is Guardians { error PROVING_FAILED(); /// @notice Initializes the contract with the provided address manager. @@ -37,35 +19,6 @@ contract GuardianProver is EssentialContract { _Essential_init(_addressManager); } - /// @notice Set the set of guardians - /// @param _guardians The new set of guardians - function setGuardians(address[NUM_GUARDIANS] memory _guardians) - external - onlyOwner - nonReentrant - { - for (uint256 i; i < NUM_GUARDIANS; ++i) { - address guardian = _guardians[i]; - if (guardian == address(0)) revert INVALID_GUARDIAN(); - - // In case there is a pending 'approval' and we call setGuardians() - // with an existing guardian but with different array position (id), - // then accidentally 2 guardian signatures could lead to firing away - // a proveBlock() transaction. - uint256 id = guardianIds[guardian]; - - if (id != 0) { - if (id != i + 1) revert INVALID_GUARDIAN_SET(); - } else { - delete guardianIds[guardians[i]]; - guardianIds[guardian] = i + 1; - guardians[i] = guardian; - } - } - - emit GuardiansUpdated(_guardians); - } - /// @dev Called by guardians to approve a guardian proof function approve( TaikoData.BlockMetadata calldata meta, @@ -73,43 +26,22 @@ contract GuardianProver is EssentialContract { TaikoData.TierProof calldata proof ) external + whenNotPaused nonReentrant + returns (bool approved) { - uint256 id = guardianIds[msg.sender]; - if (id == 0) revert INVALID_GUARDIAN(); - if (proof.tier != LibTiers.TIER_GUARDIAN) revert INVALID_PROOF(); - bytes32 hash = keccak256(abi.encode(meta, tran)); - uint256 approvalBits = approvals[hash]; - - approvalBits |= 1 << id; + approved = approve(meta.id, hash); - if (_isApproved(approvalBits)) { + if (approved) { + deleteApproval(hash); bytes memory data = abi.encodeWithSignature( "proveBlock(uint64,bytes)", meta.id, abi.encode(meta, tran, proof) ); (bool success,) = resolve("taiko", false).call(data); - if (!success) revert PROVING_FAILED(); - delete approvals[hash]; - - emit Approved(meta.id, approvalBits, true); - } else { - approvals[hash] = approvalBits; - emit Approved(meta.id, approvalBits, false); - } - } - - function _isApproved(uint256 approvalBits) private pure returns (bool) { - uint256 count; - uint256 bits = approvalBits >> 1; - for (uint256 i; i < NUM_GUARDIANS; ++i) { - if (bits & 1 == 1) ++count; - if (count == REQUIRED_GUARDIANS) return true; - bits >>= 1; } - return false; } } diff --git a/packages/protocol/contracts/L1/provers/Guardians.sol b/packages/protocol/contracts/L1/provers/Guardians.sol new file mode 100644 index 00000000000..5976e665022 --- /dev/null +++ b/packages/protocol/contracts/L1/provers/Guardians.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "../../common/EssentialContract.sol"; +import "../TaikoData.sol"; + +/// @title Guardians +abstract contract Guardians is EssentialContract { + uint256 public constant MIN_NUM_GUARDIANS = 5; + + mapping(address guardian => uint256 id) public guardianIds; // slot 1 + mapping(uint32 version => mapping(bytes32 => uint256 approvalBits)) internal _approvals; + address[] public guardians; // slot 3 + uint32 public version; // slot 4 + uint32 public minGuardians; + + uint256[46] private __gap; + + event GuardiansUpdated(uint32 version, address[] guardians); + event Approved(uint256 indexed operationId, uint256 approvalBits, bool proofSubmitted); + + error INVALID_GUARDIAN(); + error INVALID_GUARDIAN_SET(); + error INVALID_MIN_GUARDIANS(); + error INVALID_PROOF(); + + /// @notice Set the set of guardians + /// @param _guardians The new set of guardians + function setGuardians( + address[] memory _guardians, + uint8 _minGuardians + ) + external + onlyOwner + nonReentrant + { + if (_guardians.length < MIN_NUM_GUARDIANS || _guardians.length > type(uint8).max) { + revert INVALID_GUARDIAN_SET(); + } + if ( + _minGuardians == 0 || _minGuardians < _guardians.length / 2 + || _minGuardians > _guardians.length + ) revert INVALID_MIN_GUARDIANS(); + + // Delete current guardians data + for (uint256 i; i < guardians.length; ++i) { + delete guardianIds[guardians[i]]; + } + assembly { + sstore(guardians.slot, 0) + } + + for (uint256 i = 0; i < _guardians.length;) { + address guardian = _guardians[i]; + if (guardian == address(0)) revert INVALID_GUARDIAN(); + if (guardianIds[guardian] != 0) revert INVALID_GUARDIAN_SET(); + + // Save and index the guardian + guardians.push(guardian); + guardianIds[guardian] = ++i; + } + + minGuardians = _minGuardians; + emit GuardiansUpdated(++version, _guardians); + } + + function isApproved(bytes32 hash) public view returns (bool) { + return isApproved(_approvals[version][hash]); + } + + function numGuardians() public view returns (uint256) { + return guardians.length; + } + + function approve(uint256 operationId, bytes32 hash) internal returns (bool approved) { + uint256 id = guardianIds[msg.sender]; + if (id == 0) revert INVALID_GUARDIAN(); + + unchecked { + _approvals[version][hash] |= 1 << (id - 1); + } + + approved = isApproved(_approvals[version][hash]); + emit Approved(operationId, _approvals[version][hash], approved); + } + + function deleteApproval(bytes32 hash) internal { + delete _approvals[version][hash]; + } + + function isApproved(uint256 approvalBits) internal view returns (bool) { + uint256 count; + uint256 bits = approvalBits; + unchecked { + for (uint256 i; i < guardians.length; ++i) { + if (bits & 1 == 1) ++count; + if (count == minGuardians) return true; + bits >>= 1; + } + } + return false; + } +} diff --git a/packages/protocol/contracts/common/AuthorizableContract.sol b/packages/protocol/contracts/common/AuthorizableContract.sol index edccf08d776..82e57a24be9 100644 --- a/packages/protocol/contracts/common/AuthorizableContract.sol +++ b/packages/protocol/contracts/common/AuthorizableContract.sol @@ -15,15 +15,9 @@ abstract contract AuthorizableContract is EssentialContract { event Authorized(address indexed addr, bytes32 oldLabel, bytes32 newLabel); - error ADDRESS_UNAUTHORIZED(); error INVALID_ADDRESS(); error INVALID_LABEL(); - modifier onlyFromAuthorized() { - if (!isAuthorized(msg.sender)) revert ADDRESS_UNAUTHORIZED(); - _; - } - function authorize(address addr, bytes32 label) external onlyOwner { if (addr == address(0)) revert INVALID_ADDRESS(); @@ -34,10 +28,6 @@ abstract contract AuthorizableContract is EssentialContract { emit Authorized(addr, oldLabel, label); } - function isAuthorized(address addr) public view returns (bool) { - return authorizedAddresses[addr] != 0; - } - function isAuthorizedAs(address addr, bytes32 label) public view returns (bool) { return label != 0 && authorizedAddresses[addr] == label; } diff --git a/packages/protocol/contracts/libs/LibDeploy.sol b/packages/protocol/contracts/libs/LibDeploy.sol index 16fd3e66b8c..98f2eceee8e 100644 --- a/packages/protocol/contracts/libs/LibDeploy.sol +++ b/packages/protocol/contracts/libs/LibDeploy.sol @@ -25,7 +25,7 @@ library LibDeploy { if (impl == address(0)) revert NULL_IMPL_ADDR(); proxy = address(new ERC1967Proxy(impl, data)); - if (owner != address(0) && owner != msg.sender) { + if (owner != address(0) && owner != OwnableUpgradeable(proxy).owner()) { OwnableUpgradeable(proxy).transferOwnership(owner); } } diff --git a/packages/protocol/contracts/team/TimeLockTokenPool.sol b/packages/protocol/contracts/team/TimelockTokenPool.sol similarity index 99% rename from packages/protocol/contracts/team/TimeLockTokenPool.sol rename to packages/protocol/contracts/team/TimelockTokenPool.sol index 6424a24d0c4..0cf25116404 100644 --- a/packages/protocol/contracts/team/TimeLockTokenPool.sol +++ b/packages/protocol/contracts/team/TimelockTokenPool.sol @@ -11,7 +11,7 @@ import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; import "../common/EssentialContract.sol"; -/// @title TimeLockTokenPool +/// @title TimelockTokenPool /// Contract for managing Taiko tokens allocated to different roles and /// individuals. /// @@ -26,7 +26,7 @@ import "../common/EssentialContract.sol"; /// - investors /// - team members, advisors, etc. /// - grant program grantees -contract TimeLockTokenPool is EssentialContract { +contract TimelockTokenPool is EssentialContract { using SafeERC20 for IERC20; struct Grant { diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index 30894a1e22c..c27f87087cb 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -8,9 +8,6 @@ pragma solidity ^0.8.20; import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; - import "../contracts/L1/TaikoToken.sol"; import "../contracts/L1/TaikoL1.sol"; import "../contracts/L1/hooks/AssignmentHook.sol"; @@ -30,12 +27,12 @@ import "../contracts/tokenvault/ERC721Vault.sol"; import "../contracts/signal/SignalService.sol"; import "../contracts/test/erc20/FreeMintERC20.sol"; import "../contracts/test/erc20/MayFailFreeMintERC20.sol"; -import "../contracts/libs/LibDeployHelper.sol"; +import "../test/DeployCapability.sol"; /// @title DeployOnL1 /// @notice This script deploys the core Taiko protocol smart contract on L1, /// initializing the rollup. -contract DeployOnL1 is Script { +contract DeployOnL1 is DeployCapability { uint256 public constant NUM_GUARDIANS = 5; address public constant MAINNET_SECURITY_COUNCIL = 0x7C50d60743D3FCe5a39FdbF687AFbAe5acFF49Fd; @@ -80,7 +77,13 @@ contract DeployOnL1 is Script { uint64 l2ChainId = taikoL1.getConfig().chainId; require(l2ChainId != block.chainid, "same chainid"); - if (signalService.owner() == msg.sender) { + console2.log("------------------------------------------"); + console2.log("msg.sender: ", msg.sender); + console2.log("address(this): ", address(this)); + console2.log("signalService.owner(): ", signalService.owner()); + console2.log("------------------------------------------"); + + if (signalService.owner() == address(this)) { signalService.authorize(taikoL1Addr, bytes32(block.chainid)); signalService.authorize(vm.envAddress("TAIKO_L2_ADDRESS"), bytes32(uint256(l2ChainId))); signalService.transferOwnership(timelock); @@ -95,26 +98,24 @@ contract DeployOnL1 is Script { // --------------------------------------------------------------- // Register shared contracts in the new rollup - LibDeployHelper.copyRegister(rollupAddressManager, sharedAddressManager, "taiko_token"); - LibDeployHelper.copyRegister(rollupAddressManager, sharedAddressManager, "signal_service"); - LibDeployHelper.copyRegister(rollupAddressManager, sharedAddressManager, "bridge"); + copyRegister(rollupAddressManager, sharedAddressManager, "taiko_token"); + copyRegister(rollupAddressManager, sharedAddressManager, "signal_service"); + copyRegister(rollupAddressManager, sharedAddressManager, "bridge"); address proposer = vm.envAddress("PROPOSER"); if (proposer != address(0)) { - LibDeployHelper.register(rollupAddressManager, "proposer", proposer); + register(rollupAddressManager, "proposer", proposer); } address proposerOne = vm.envAddress("PROPOSER_ONE"); if (proposerOne != address(0)) { - LibDeployHelper.register(rollupAddressManager, "proposer_one", proposerOne); + register(rollupAddressManager, "proposer_one", proposerOne); } // --------------------------------------------------------------- // Register L2 addresses - LibDeployHelper.register( - rollupAddressManager, "taiko", vm.envAddress("TAIKO_L2_ADDRESS"), l2ChainId - ); - LibDeployHelper.register( + register(rollupAddressManager, "taiko", vm.envAddress("TAIKO_L2_ADDRESS"), l2ChainId); + register( rollupAddressManager, "signal_service", vm.envAddress("L2_SIGNAL_SERVICE"), l2ChainId ); @@ -124,10 +125,11 @@ contract DeployOnL1 is Script { if (AddressManager(sharedAddressManager).owner() == msg.sender) { AddressManager(sharedAddressManager).transferOwnership(timelock); + console2.log("** sharedAddressManager ownership transferred to timelock:", timelock); } - if (AddressManager(rollupAddressManager).owner() == msg.sender) { - AddressManager(rollupAddressManager).transferOwnership(timelock); - } + + AddressManager(rollupAddressManager).transferOwnership(timelock); + console2.log("** rollupAddressManager ownership transferred to timelock:", timelock); } function deploySharedContracts() @@ -143,18 +145,14 @@ contract DeployOnL1 is Script { timelock = deployProxy({ name: "timelock_controller", impl: address(new TaikoTimelockController()), - data: bytes.concat(TaikoTimelockController.init.selector, abi.encode(7 days)), - registerTo: address(0), - owner: address(0) + data: bytes.concat(TaikoTimelockController.init.selector, abi.encode(7 days)) }); sharedAddressManager = deployProxy({ - name: "address_manager_for_bridge", + name: "shared_address_manager", impl: address(new AddressManager()), - data: bytes.concat(AddressManager.init.selector), - registerTo: address(0), - owner: msg.sender // set to sender, transfer ownership to timelock after - }); + data: bytes.concat(AddressManager.init.selector) + }); address taikoToken = deployProxy({ name: "taiko_token", @@ -190,9 +188,9 @@ contract DeployOnL1 is Script { _timelock.grantRole(_timelock.CANCELLER_ROLE(), governor); _timelock.grantRole(_timelock.CANCELLER_ROLE(), securityCouncil); - _timelock.grantRole(_timelock.TIMELOCK_ADMIN_ROLE(), governor); _timelock.grantRole(_timelock.TIMELOCK_ADMIN_ROLE(), securityCouncil); - _timelock.renounceRole(_timelock.TIMELOCK_ADMIN_ROLE(), msg.sender); + _timelock.revokeRole(_timelock.TIMELOCK_ADMIN_ROLE(), address(this)); + _timelock.revokeRole(_timelock.TIMELOCK_ADMIN_ROLE(), msg.sender); _timelock.transferOwnership(securityCouncil); @@ -202,8 +200,8 @@ contract DeployOnL1 is Script { impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector), registerTo: sharedAddressManager, - owner: msg.sender // We set msg.sender as the owner and will change it later. - }); + owner: address(0) + }); deployProxy({ name: "bridge", @@ -263,13 +261,9 @@ contract DeployOnL1 is Script { console2.log("- sharedAddressManager : ", sharedAddressManager); // Deploy Bridged token implementations - LibDeployHelper.register(sharedAddressManager, "bridged_erc20", address(new BridgedERC20())); - LibDeployHelper.register( - sharedAddressManager, "bridged_erc721", address(new BridgedERC721()) - ); - LibDeployHelper.register( - sharedAddressManager, "bridged_erc1155", address(new BridgedERC1155()) - ); + register(sharedAddressManager, "bridged_erc20", address(new BridgedERC20())); + register(sharedAddressManager, "bridged_erc721", address(new BridgedERC721())); + register(sharedAddressManager, "bridged_erc1155", address(new BridgedERC1155())); } function deployRollupContracts( @@ -283,12 +277,10 @@ contract DeployOnL1 is Script { addressNotNull(timelock, "timelock"); rollupAddressManager = deployProxy({ - name: "address_manager_for_rollup", + name: "rollup_address_manager", impl: address(new AddressManager()), - data: bytes.concat(AddressManager.init.selector), - registerTo: address(0), - owner: msg.sender // set to msg.sender, change to timelock after - }); + data: bytes.concat(AddressManager.init.selector) + }); deployProxy({ name: "taiko", @@ -353,7 +345,7 @@ contract DeployOnL1 is Script { plonkVerifiers[0] = deployYulContract("contracts/L1/verifiers/PlonkVerifier.yulp"); for (uint16 i = 0; i < plonkVerifiers.length; ++i) { - LibDeployHelper.register( + register( rollupAddressManager, PseZkVerifier(pseZkVerifier).getVerifierName(i), plonkVerifiers[i] @@ -365,17 +357,12 @@ contract DeployOnL1 is Script { impl: address(new GuardianProver()), data: bytes.concat(GuardianProver.init.selector, abi.encode(rollupAddressManager)), registerTo: rollupAddressManager, - owner: msg.sender + owner: address(0) }); - address[] memory guardianProvers = vm.envAddress("GUARDIAN_PROVERS", ","); - require(guardianProvers.length == NUM_GUARDIANS, "NUM_GUARDIANS"); - - address[NUM_GUARDIANS] memory guardians; - for (uint256 i = 0; i < NUM_GUARDIANS; ++i) { - guardians[i] = guardianProvers[i]; - } - GuardianProver(guardianProver).setGuardians(guardians); + address[] memory guardians = vm.envAddress("GUARDIAN_PROVERS", ","); + uint8 minGuardians = uint8(vm.envUint("MIN_GUARDIANS")); + GuardianProver(guardianProver).setGuardians(guardians, minGuardians); GuardianProver(guardianProver).transferOwnership(timelock); } @@ -410,30 +397,4 @@ contract DeployOnL1 is Script { function addressNotNull(address addr, string memory err) private pure { require(addr != address(0), err); } - - function deployProxy( - string memory name, - address impl, - bytes memory data, - address registerTo, - address owner - ) - private - returns (address) - { - address addr = LibDeployHelper.deployProxy({ - name: bytes32(bytes(name)), - impl: impl, - data: data, - registerTo: registerTo, - owner: owner - }); - - vm.writeJson( - vm.serializeAddress("deployment", name, addr), - string.concat(vm.projectRoot(), "/deployments/deploy_l1.json") - ); - - return addr; - } } diff --git a/packages/protocol/script/SetRemoteBridgeSuites.s.sol b/packages/protocol/script/SetRemoteBridgeSuites.s.sol index 7651b68a637..f79a04a48ee 100644 --- a/packages/protocol/script/SetRemoteBridgeSuites.s.sol +++ b/packages/protocol/script/SetRemoteBridgeSuites.s.sol @@ -6,13 +6,9 @@ pragma solidity ^0.8.20; -import "forge-std/Script.sol"; -import "forge-std/console2.sol"; +import "../test/DeployCapability.sol"; -import "../contracts/common/AddressManager.sol"; -import "../contracts/libs/LibDeployHelper.sol"; - -contract SetRemoteBridgeSuites is Script { +contract SetRemoteBridgeSuites is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); address public addressManagerAddress = vm.envAddress("ADDRESS_MANAGER_ADDRESS"); uint256[] public remoteChainIDs = vm.envUint("REMOTE_CHAIN_IDS", ","); @@ -43,19 +39,13 @@ contract SetRemoteBridgeSuites is Script { for (uint256 i; i < remoteChainIDs.length; ++i) { uint64 chainid = uint64(remoteChainIDs[i]); - LibDeployHelper.register(addressManagerAddress, "bridge", remoteBridges[i], chainid); + register(addressManagerAddress, "bridge", remoteBridges[i], chainid); - LibDeployHelper.register( - addressManagerAddress, "erc20_vault", remoteERC20Vaults[i], chainid - ); + register(addressManagerAddress, "erc20_vault", remoteERC20Vaults[i], chainid); - LibDeployHelper.register( - addressManagerAddress, "erc721_vault", remoteERC721Vaults[i], chainid - ); + register(addressManagerAddress, "erc721_vault", remoteERC721Vaults[i], chainid); - LibDeployHelper.register( - addressManagerAddress, "erc1155_vault", remoteERC1155Vaults[i], chainid - ); + register(addressManagerAddress, "erc1155_vault", remoteERC1155Vaults[i], chainid); } vm.stopBroadcast(); diff --git a/packages/protocol/script/test_deploy_on_l1.sh b/packages/protocol/script/test_deploy_on_l1.sh index 23bb91c3b7e..9591cc4ded8 100755 --- a/packages/protocol/script/test_deploy_on_l1.sh +++ b/packages/protocol/script/test_deploy_on_l1.sh @@ -7,6 +7,7 @@ PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ PROPOSER=0x0000000000000000000000000000000000000000 \ PROPOSER_ONE=0x0000000000000000000000000000000000000000 \ GUARDIAN_PROVERS="0x1000777700000000000000000000000000000001,0x1000777700000000000000000000000000000002,0x1000777700000000000000000000000000000003,0x1000777700000000000000000000000000000004,0x1000777700000000000000000000000000000005" \ +MIN_GUARDIANS=3 \ TAIKO_L2_ADDRESS=0x1000777700000000000000000000000000000001 \ L2_SIGNAL_SERVICE=0x1000777700000000000000000000000000000007 \ SECURITY_COUNCIL=0x60997970C51812dc3A010C7d01b50e0d17dc79C8 \ diff --git a/packages/protocol/contracts/libs/LibDeployHelper.sol b/packages/protocol/test/DeployCapability.sol similarity index 74% rename from packages/protocol/contracts/libs/LibDeployHelper.sol rename to packages/protocol/test/DeployCapability.sol index c852572d905..0f8991d61f7 100644 --- a/packages/protocol/contracts/libs/LibDeployHelper.sol +++ b/packages/protocol/test/DeployCapability.sol @@ -11,13 +11,13 @@ import "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; import "forge-std/console2.sol"; +import "forge-std/Script.sol"; -import "../common/AddressManager.sol"; -import "./LibDeploy.sol"; +import "../contracts/common/AddressManager.sol"; +import "../contracts/libs/LibDeploy.sol"; -/// @title LibDeployHelper -/// @dev Do not use this library in production code except deployment scripts and tests. -library LibDeployHelper { +/// @title DeployCapability +abstract contract DeployCapability is Script { error ADDRESS_NULL(); function deployProxy( @@ -35,10 +35,18 @@ library LibDeployHelper { if (registerTo != address(0)) { AddressManager(registerTo).setAddress(uint64(block.chainid), name, proxy); } - console2.log("> ", string(abi.encodePacked(name)), "@", registerTo); - console2.log("\t proxy : ", proxy); - console2.log("\t impl : ", impl); - console2.log("\t owner : ", OwnableUpgradeable(proxy).owner()); + + console2.log(">", string(abi.encodePacked(name)), "@", registerTo); + console2.log(" proxy :", proxy); + console2.log(" impl :", impl); + console2.log(" owner :", OwnableUpgradeable(proxy).owner()); + console2.log(" msg.sender :", msg.sender); + console2.log(" this :", address(this)); + + vm.writeJson( + vm.serializeAddress("deployment", Strings.toString(uint256(name)), proxy), + string.concat(vm.projectRoot(), "/deployments/deploy_l1.json") + ); } function deployProxy( diff --git a/packages/protocol/test/L1/Guardians.t.sol b/packages/protocol/test/L1/Guardians.t.sol new file mode 100644 index 00000000000..04c8b180e89 --- /dev/null +++ b/packages/protocol/test/L1/Guardians.t.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "../TaikoTest.sol"; + +contract DummyGuardians is Guardians { + uint256 public operationId; + + function init() external initializer { + _Essential_init(); + } + + function approve(bytes32 hash) public returns (bool) { + return super.approve(operationId++, hash); + } +} + +contract TestSignalService is TaikoTest { + DummyGuardians target; + + function getSigners(uint256 numGuardians) internal returns (address[] memory signers) { + signers = new address[](numGuardians); + for (uint256 i = 0; i < numGuardians; ++i) { + signers[i] = randAddress(); + vm.deal(signers[i], 1 ether); + } + } + + function setUp() public { + target = DummyGuardians( + deployProxy({ + name: "guardians", + impl: address(new DummyGuardians()), + data: bytes.concat(DummyGuardians.init.selector) + }) + ); + } + + function test_guardians_set_guardians() public { + vm.expectRevert(Guardians.INVALID_GUARDIAN_SET.selector); + target.setGuardians(getSigners(0), 0); + + vm.expectRevert(Guardians.INVALID_MIN_GUARDIANS.selector); + target.setGuardians(getSigners(5), 0); + + vm.expectRevert(Guardians.INVALID_MIN_GUARDIANS.selector); + target.setGuardians(getSigners(5), 6); + } + + function test_guardians_set_guardians2() public { + address[] memory signers = getSigners(5); + signers[0] = address(0); + vm.expectRevert(Guardians.INVALID_GUARDIAN.selector); + target.setGuardians(signers, 4); + + signers[0] = signers[1]; + vm.expectRevert(Guardians.INVALID_GUARDIAN_SET.selector); + target.setGuardians(signers, 4); + } + + function test_guardians_approve() public { + address[] memory signers = getSigners(5); + target.setGuardians(signers, 3); + + bytes32 hash = keccak256("paris"); + for (uint256 i; i < 5; ++i) { + vm.prank(signers[0]); + assertEq(target.approve(hash), false); + assertEq(target.isApproved(hash), false); + } + + hash = keccak256("singapore"); + for (uint256 i; i < 5; ++i) { + vm.startPrank(signers[i]); + target.approve(hash); + + assertEq(target.approve(hash), i >= 2); + assertEq(target.isApproved(hash), i >= 2); + vm.stopPrank(); + } + + // changing the settings will invalid all approval history + target.setGuardians(signers, 2); + assertEq(target.version(), 2); + assertEq(target.isApproved(hash), false); + } +} diff --git a/packages/protocol/test/L1/SgxVerifier.t.sol b/packages/protocol/test/L1/SgxVerifier.t.sol index 4a4c89a1331..3b086adaf06 100644 --- a/packages/protocol/test/L1/SgxVerifier.t.sol +++ b/packages/protocol/test/L1/SgxVerifier.t.sol @@ -5,11 +5,8 @@ import "./TaikoL1TestBase.sol"; contract TestSgxVerifier is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1) { - return TaikoL1( - payable( - LibDeployHelper.deployProxy({ name: "taiko", impl: address(new TaikoL1()), data: "" }) - ) - ); + return + TaikoL1(payable(deployProxy({ name: "taiko", impl: address(new TaikoL1()), data: "" }))); } function test_addInstancesByOwner() external { diff --git a/packages/protocol/test/L1/TaikoL1.t.sol b/packages/protocol/test/L1/TaikoL1.t.sol index 06660f70183..52178454ddd 100644 --- a/packages/protocol/test/L1/TaikoL1.t.sol +++ b/packages/protocol/test/L1/TaikoL1.t.sol @@ -24,11 +24,7 @@ contract TaikoL1Test is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1) { return TaikoL1( payable( - LibDeployHelper.deployProxy({ - name: "taiko", - impl: address(new TaikoL1_NoCooldown()), - data: "" - }) + deployProxy({ name: "taiko", impl: address(new TaikoL1_NoCooldown()), data: "" }) ) ); } diff --git a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol b/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol index c37bd8d4a2d..eb548bc946c 100644 --- a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol +++ b/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol @@ -23,13 +23,7 @@ contract Verifier { contract TaikoL1LibProvingWithTiers is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1 taikoL1) { taikoL1 = TaikoL1( - payable( - LibDeployHelper.deployProxy({ - name: "taiko", - impl: address(new TaikoL1Tiers()), - data: "" - }) - ) + payable(deployProxy({ name: "taiko", impl: address(new TaikoL1Tiers()), data: "" })) ); } diff --git a/packages/protocol/test/L1/TaikoL1TestBase.sol b/packages/protocol/test/L1/TaikoL1TestBase.sol index 3d59ccd7ac2..4e8723876c8 100644 --- a/packages/protocol/test/L1/TaikoL1TestBase.sol +++ b/packages/protocol/test/L1/TaikoL1TestBase.sol @@ -39,7 +39,7 @@ abstract contract TaikoL1TestBase is TaikoTest { conf = L1.getConfig(); addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector) @@ -47,7 +47,7 @@ abstract contract TaikoL1TestBase is TaikoTest { ); ss = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector) @@ -55,7 +55,7 @@ abstract contract TaikoL1TestBase is TaikoTest { ); pv = PseZkVerifier( - LibDeployHelper.deployProxy({ + deployProxy({ name: "tier_pse_zkevm", impl: address(new PseZkVerifier()), data: bytes.concat(PseZkVerifier.init.selector, abi.encode(address(addressManager))) @@ -63,7 +63,7 @@ abstract contract TaikoL1TestBase is TaikoTest { ); sv = SgxVerifier( - LibDeployHelper.deployProxy({ + deployProxy({ name: "tier_sgx", impl: address(new SgxVerifier()), data: bytes.concat(SgxVerifier.init.selector, abi.encode(address(addressManager))) @@ -75,7 +75,7 @@ abstract contract TaikoL1TestBase is TaikoTest { sv.addInstances(initSgxInstances); sgxZkVerifier = SgxAndZkVerifier( - LibDeployHelper.deployProxy({ + deployProxy({ name: "tier_sgx_and_pse_zkevm", impl: address(new SgxAndZkVerifier()), data: bytes.concat(SgxAndZkVerifier.init.selector, abi.encode(address(addressManager))) @@ -83,7 +83,7 @@ abstract contract TaikoL1TestBase is TaikoTest { ); gv = GuardianVerifier( - LibDeployHelper.deployProxy({ + deployProxy({ name: "guardian_verifier", impl: address(new GuardianVerifier()), data: bytes.concat(GuardianVerifier.init.selector, abi.encode(address(addressManager))) @@ -91,7 +91,7 @@ abstract contract TaikoL1TestBase is TaikoTest { ); gp = GuardianProver( - LibDeployHelper.deployProxy({ + deployProxy({ name: "guardian_prover", impl: address(new GuardianProver()), data: bytes.concat(GuardianProver.init.selector, abi.encode(address(addressManager))) @@ -101,7 +101,7 @@ abstract contract TaikoL1TestBase is TaikoTest { setupGuardianProverMultisig(); cp = TaikoA6TierProvider( - LibDeployHelper.deployProxy({ + deployProxy({ name: "tier_provider", impl: address(new TaikoA6TierProvider()), data: bytes.concat(TaikoA6TierProvider.init.selector) @@ -110,7 +110,7 @@ abstract contract TaikoL1TestBase is TaikoTest { bridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -121,7 +121,7 @@ abstract contract TaikoL1TestBase is TaikoTest { ); assignmentHook = AssignmentHook( - LibDeployHelper.deployProxy({ + deployProxy({ name: "assignment_hook", impl: address(new AssignmentHook()), data: bytes.concat(AssignmentHook.init.selector, abi.encode(address(addressManager))) @@ -144,7 +144,7 @@ abstract contract TaikoL1TestBase is TaikoTest { registerAddress(pv.getVerifierName(300), address(new MockVerifier())); tko = TaikoToken( - LibDeployHelper.deployProxy({ + deployProxy({ name: "taiko_token", impl: address(new TaikoToken()), data: bytes.concat( @@ -331,13 +331,14 @@ abstract contract TaikoL1TestBase is TaikoTest { } function setupGuardianProverMultisig() internal { - address[5] memory initMultiSig; + address[] memory initMultiSig = new address[](5); initMultiSig[0] = David; initMultiSig[1] = Emma; initMultiSig[2] = Frank; initMultiSig[3] = Grace; initMultiSig[4] = Henry; - gp.setGuardians(initMultiSig); + + gp.setGuardians(initMultiSig, 3); } function registerAddress(bytes32 nameHash, address addr) internal { diff --git a/packages/protocol/test/L2/TaikoL2.t.sol b/packages/protocol/test/L2/TaikoL2.t.sol index 8a33a196ae9..e62b3fe2115 100644 --- a/packages/protocol/test/L2/TaikoL2.t.sol +++ b/packages/protocol/test/L2/TaikoL2.t.sol @@ -24,7 +24,7 @@ contract TestTaikoL2 is TaikoTest { function setUp() public { addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector) @@ -32,7 +32,7 @@ contract TestTaikoL2 is TaikoTest { ); ss = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector), @@ -46,7 +46,7 @@ contract TestTaikoL2 is TaikoTest { uint32 gasTarget = 60_000_000; L2 = TaikoL2EIP1559Configurable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "taiko_l2", impl: address(new TaikoL2EIP1559Configurable()), data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess)) @@ -57,7 +57,7 @@ contract TestTaikoL2 is TaikoTest { gasExcess = 195_420_300_100; L2skip = SkipBasefeeCheckL2( - LibDeployHelper.deployProxy({ + deployProxy({ name: "taiko_l2", impl: address(new SkipBasefeeCheckL2()), data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess)) diff --git a/packages/protocol/test/TaikoTest.sol b/packages/protocol/test/TaikoTest.sol index 66cd862aff6..78683952499 100644 --- a/packages/protocol/test/TaikoTest.sol +++ b/packages/protocol/test/TaikoTest.sol @@ -7,17 +7,16 @@ import "forge-std/console2.sol"; import "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "../contracts/thirdparty/LibFixedPointMath.sol"; + import "../contracts/bridge/Bridge.sol"; import "../contracts/signal/SignalService.sol"; -import "../contracts/common/ICrossChainSync.sol"; -import "../contracts/common/EssentialContract.sol"; import "../contracts/tokenvault/BridgedERC20.sol"; import "../contracts/tokenvault/BridgedERC721.sol"; import "../contracts/tokenvault/BridgedERC1155.sol"; import "../contracts/tokenvault/ERC20Vault.sol"; import "../contracts/tokenvault/ERC721Vault.sol"; import "../contracts/tokenvault/ERC1155Vault.sol"; -import "../contracts/team/TimeLockTokenPool.sol"; + import "../contracts/L1/TaikoToken.sol"; import "../contracts/L1/TaikoL1.sol"; import "../contracts/L1/verifiers/SgxVerifier.sol"; @@ -30,18 +29,20 @@ import "../contracts/L1/tiers/ITierProvider.sol"; import "../contracts/L1/hooks/AssignmentHook.sol"; import "../contracts/L1/provers/GuardianProver.sol"; -import "../contracts/team/airdrop/ERC20Airdrop.sol"; -import "../contracts/team/airdrop/ERC20Airdrop2.sol"; - import "../contracts/L2/Lib1559Math.sol"; import "../contracts/L2/TaikoL2EIP1559Configurable.sol"; import "../contracts/L2/TaikoL2.sol"; +import "../contracts/team/TimelockTokenPool.sol"; +import "../contracts/team/airdrop/ERC20Airdrop.sol"; +import "../contracts/team/airdrop/ERC20Airdrop2.sol"; + import "../contracts/test/erc20/FreeMintERC20.sol"; -import "../contracts/libs/LibDeployHelper.sol"; + +import "./DeployCapability.sol"; import "./HelperContracts.sol"; -abstract contract TaikoTest is Test { +abstract contract TaikoTest is Test, DeployCapability { uint256 private _seed = 0x12345678; address internal Alice = vm.addr(0x1); address internal Bob = vm.addr(0x2); diff --git a/packages/protocol/test/bridge/Bridge.t.sol b/packages/protocol/test/bridge/Bridge.t.sol index 73375c55661..b76a89293a1 100644 --- a/packages/protocol/test/bridge/Bridge.t.sol +++ b/packages/protocol/test/bridge/Bridge.t.sol @@ -35,7 +35,7 @@ contract BridgeTest is TaikoTest { vm.deal(Alice, 100 ether); addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector) @@ -44,7 +44,7 @@ contract BridgeTest is TaikoTest { bridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -56,7 +56,7 @@ contract BridgeTest is TaikoTest { destChainBridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)) @@ -65,7 +65,7 @@ contract BridgeTest is TaikoTest { ); mockProofSignalService = SkipProofCheckSignal( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SkipProofCheckSignal()), data: bytes.concat(SignalService.init.selector), @@ -75,7 +75,7 @@ contract BridgeTest is TaikoTest { ); signalService = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector) @@ -89,17 +89,13 @@ contract BridgeTest is TaikoTest { untrustedSenderContract = new UntrustedSendMessageRelayer(); vm.deal(address(untrustedSenderContract), 10 ether); - LibDeployHelper.register( + register( address(addressManager), "signal_service", address(mockProofSignalService), destChainId ); - LibDeployHelper.register( - address(addressManager), "bridge", address(destChainBridge), destChainId - ); + register(address(addressManager), "bridge", address(destChainBridge), destChainId); - LibDeployHelper.register( - address(addressManager), "taiko", address(uint160(123)), destChainId - ); + register(address(addressManager), "taiko", address(uint160(123)), destChainId); vm.stopPrank(); } diff --git a/packages/protocol/test/signal/SignalService.t.sol b/packages/protocol/test/signal/SignalService.t.sol index 679a94bd664..40c62f1b52c 100644 --- a/packages/protocol/test/signal/SignalService.t.sol +++ b/packages/protocol/test/signal/SignalService.t.sol @@ -16,7 +16,7 @@ contract TestSignalService is TaikoTest { vm.deal(Bob, 1 ether); addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector), @@ -26,7 +26,7 @@ contract TestSignalService is TaikoTest { ); signalService = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector) @@ -34,7 +34,7 @@ contract TestSignalService is TaikoTest { ); destSignalService = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector) @@ -42,20 +42,16 @@ contract TestSignalService is TaikoTest { ); crossChainSync = DummyCrossChainSync( - LibDeployHelper.deployProxy({ + deployProxy({ name: "dummy_cross_chain_sync", impl: address(new DummyCrossChainSync()), data: "" }) ); - LibDeployHelper.register( - address(addressManager), "signal_service", address(destSignalService), destChainId - ); + register(address(addressManager), "signal_service", address(destSignalService), destChainId); - LibDeployHelper.register( - address(addressManager), "taiko", address(crossChainSync), destChainId - ); + register(address(addressManager), "taiko", address(crossChainSync), destChainId); vm.stopPrank(); } diff --git a/packages/protocol/test/team/TimeLockTokenPool.t.sol b/packages/protocol/test/team/TimelockTokenPool.t.sol similarity index 90% rename from packages/protocol/test/team/TimeLockTokenPool.t.sol rename to packages/protocol/test/team/TimelockTokenPool.t.sol index 83764950424..1ba0300ff5f 100644 --- a/packages/protocol/test/team/TimeLockTokenPool.t.sol +++ b/packages/protocol/test/team/TimelockTokenPool.t.sol @@ -9,32 +9,32 @@ contract MyERC20 is ERC20 { } } -contract TestTimeLockTokenPool is TaikoTest { +contract TestTimelockTokenPool is TaikoTest { address internal Vault = randAddress(); ERC20 tko = new MyERC20(Vault); - TimeLockTokenPool pool; + TimelockTokenPool pool; function setUp() public { - pool = TimeLockTokenPool( - LibDeployHelper.deployProxy({ + pool = TimelockTokenPool( + deployProxy({ name: "time_lock_token_pool", - impl: address(new TimeLockTokenPool()), - data: bytes.concat(TimeLockTokenPool.init.selector, abi.encode(address(tko), Vault)) + impl: address(new TimelockTokenPool()), + data: bytes.concat(TimelockTokenPool.init.selector, abi.encode(address(tko), Vault)) }) ); } function test_invalid_granting() public { - vm.expectRevert(TimeLockTokenPool.INVALID_GRANT.selector); - pool.grant(Alice, TimeLockTokenPool.Grant(0, 0, 0, 0, 0, 0, 0)); + vm.expectRevert(TimelockTokenPool.INVALID_GRANT.selector); + pool.grant(Alice, TimelockTokenPool.Grant(0, 0, 0, 0, 0, 0, 0)); - vm.expectRevert(TimeLockTokenPool.INVALID_PARAM.selector); - pool.grant(address(0), TimeLockTokenPool.Grant(100e18, 0, 0, 0, 0, 0, 0)); + vm.expectRevert(TimelockTokenPool.INVALID_PARAM.selector); + pool.grant(address(0), TimelockTokenPool.Grant(100e18, 0, 0, 0, 0, 0, 0)); } function test_single_grant_zero_grant_period_zero_unlock_period() public { - pool.grant(Alice, TimeLockTokenPool.Grant(10_000e18, 0, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(10_000e18, 0, 0, 0, 0, 0, 0)); vm.prank(Vault); tko.approve(address(pool), 10_000e18); @@ -50,7 +50,7 @@ contract TestTimeLockTokenPool is TaikoTest { assertEq(amountWithdrawable, 10_000e18); // Try to void the grant - vm.expectRevert(TimeLockTokenPool.NOTHING_TO_VOID.selector); + vm.expectRevert(TimelockTokenPool.NOTHING_TO_VOID.selector); pool.void(Alice); vm.prank(Alice); @@ -72,7 +72,7 @@ contract TestTimeLockTokenPool is TaikoTest { pool.grant( Alice, - TimeLockTokenPool.Grant(10_000e18, 0, 0, 0, unlockStart, unlockCliff, unlockPeriod) + TimelockTokenPool.Grant(10_000e18, 0, 0, 0, unlockStart, unlockCliff, unlockPeriod) ); vm.prank(Vault); tko.approve(address(pool), 10_000e18); @@ -136,7 +136,7 @@ contract TestTimeLockTokenPool is TaikoTest { uint64 grantCliff = grantStart + grantPeriod / 2; pool.grant( - Alice, TimeLockTokenPool.Grant(10_000e18, grantStart, grantCliff, grantPeriod, 0, 0, 0) + Alice, TimelockTokenPool.Grant(10_000e18, grantStart, grantCliff, grantPeriod, 0, 0, 0) ); vm.prank(Vault); tko.approve(address(pool), 10_000e18); @@ -205,7 +205,7 @@ contract TestTimeLockTokenPool is TaikoTest { pool.grant( Alice, - TimeLockTokenPool.Grant( + TimelockTokenPool.Grant( 10_000e18, grantStart, grantCliff, @@ -294,8 +294,8 @@ contract TestTimeLockTokenPool is TaikoTest { } function test_multiple_grants() public { - pool.grant(Alice, TimeLockTokenPool.Grant(10_000e18, 0, 0, 0, 0, 0, 0)); - pool.grant(Alice, TimeLockTokenPool.Grant(20_000e18, 0, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(10_000e18, 0, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(20_000e18, 0, 0, 0, 0, 0, 0)); vm.prank(Vault); tko.approve(address(pool), 30_000e18); @@ -314,8 +314,8 @@ contract TestTimeLockTokenPool is TaikoTest { function test_void_multiple_grants_before_granted() public { uint64 grantStart = uint64(block.timestamp) + 30 days; - pool.grant(Alice, TimeLockTokenPool.Grant(10_000e18, grantStart, 0, 0, 0, 0, 0)); - pool.grant(Alice, TimeLockTokenPool.Grant(20_000e18, grantStart, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(10_000e18, grantStart, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(20_000e18, grantStart, 0, 0, 0, 0, 0)); vm.prank(Vault); tko.approve(address(pool), 30_000e18); @@ -334,7 +334,7 @@ contract TestTimeLockTokenPool is TaikoTest { // Try to void the grant pool.void(Alice); - TimeLockTokenPool.Grant[] memory grants = pool.getMyGrants(Alice); + TimelockTokenPool.Grant[] memory grants = pool.getMyGrants(Alice); for (uint256 i; i < grants.length; ++i) { assertEq(grants[i].grantStart, 0); assertEq(grants[i].grantPeriod, 0); @@ -350,8 +350,8 @@ contract TestTimeLockTokenPool is TaikoTest { function test_void_multiple_grants_after_granted() public { uint64 grantStart = uint64(block.timestamp) + 30 days; - pool.grant(Alice, TimeLockTokenPool.Grant(10_000e18, grantStart, 0, 0, 0, 0, 0)); - pool.grant(Alice, TimeLockTokenPool.Grant(20_000e18, grantStart, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(10_000e18, grantStart, 0, 0, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(20_000e18, grantStart, 0, 0, 0, 0, 0)); vm.prank(Vault); tko.approve(address(pool), 30_000e18); @@ -372,15 +372,15 @@ contract TestTimeLockTokenPool is TaikoTest { // Try to void the grant // Try to void the grant - vm.expectRevert(TimeLockTokenPool.NOTHING_TO_VOID.selector); + vm.expectRevert(TimelockTokenPool.NOTHING_TO_VOID.selector); pool.void(Alice); } function test_void_multiple_grants_in_the_middle() public { uint64 grantStart = uint64(block.timestamp); uint32 grantPeriod = 100 days; - pool.grant(Alice, TimeLockTokenPool.Grant(10_000e18, grantStart, 0, grantPeriod, 0, 0, 0)); - pool.grant(Alice, TimeLockTokenPool.Grant(20_000e18, grantStart, 0, grantPeriod, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(10_000e18, grantStart, 0, grantPeriod, 0, 0, 0)); + pool.grant(Alice, TimelockTokenPool.Grant(20_000e18, grantStart, 0, grantPeriod, 0, 0, 0)); vm.prank(Vault); tko.approve(address(pool), 30_000e18); diff --git a/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol b/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol index 7276c006e2c..44fba698018 100644 --- a/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol +++ b/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol @@ -24,7 +24,7 @@ contract TestERC20Airdrop is TaikoTest { token = new MyERC20(address(owner)); // 1st 'genesis' airdrop airdrop = ERC20Airdrop( - LibDeployHelper.deployProxy({ + deployProxy({ name: "airdrop", impl: address(new ERC20Airdrop()), data: bytes.concat( @@ -36,7 +36,7 @@ contract TestERC20Airdrop is TaikoTest { // 2nd airdrop subject to unlocking (e.g. 10 days after starting after // claim window) airdrop2 = ERC20Airdrop2( - LibDeployHelper.deployProxy({ + deployProxy({ name: "airdrop", impl: address(new ERC20Airdrop2()), data: bytes.concat( diff --git a/packages/protocol/test/tokenvault/ERC1155Vault.t.sol b/packages/protocol/test/tokenvault/ERC1155Vault.t.sol index d0f38b29b59..33513d1a4c1 100644 --- a/packages/protocol/test/tokenvault/ERC1155Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC1155Vault.t.sol @@ -108,7 +108,7 @@ contract ERC1155VaultTest is TaikoTest { vm.deal(Carol, 100 ether); vm.deal(Bob, 100 ether); addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector) @@ -117,7 +117,7 @@ contract ERC1155VaultTest is TaikoTest { bridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -129,7 +129,7 @@ contract ERC1155VaultTest is TaikoTest { destChainBridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -140,7 +140,7 @@ contract ERC1155VaultTest is TaikoTest { ); signalService = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector) @@ -148,7 +148,7 @@ contract ERC1155VaultTest is TaikoTest { ); erc1155Vault = ERC1155Vault( - LibDeployHelper.deployProxy({ + deployProxy({ name: "erc1155_vault", impl: address(new ERC1155Vault()), data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) @@ -156,7 +156,7 @@ contract ERC1155VaultTest is TaikoTest { ); destChainErc1155Vault = ERC1155Vault( - LibDeployHelper.deployProxy({ + deployProxy({ name: "erc1155_vault", impl: address(new ERC1155Vault()), data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) @@ -167,7 +167,7 @@ contract ERC1155VaultTest is TaikoTest { vm.deal(address(destChainIdBridge), 100 ether); mockProofSignalService = SkipProofCheckSignal( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SkipProofCheckSignal()), data: bytes.concat(SignalService.init.selector) diff --git a/packages/protocol/test/tokenvault/ERC20Vault.t.sol b/packages/protocol/test/tokenvault/ERC20Vault.t.sol index ad41b732fbf..9dca715b016 100644 --- a/packages/protocol/test/tokenvault/ERC20Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC20Vault.t.sol @@ -86,7 +86,7 @@ contract TestERC20Vault is TaikoTest { vm.deal(Bob, 1 ether); tko = TaikoToken( - LibDeployHelper.deployProxy({ + deployProxy({ name: "taiko_token", impl: address(new TaikoToken()), data: bytes.concat( @@ -96,7 +96,7 @@ contract TestERC20Vault is TaikoTest { ); addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector) @@ -106,7 +106,7 @@ contract TestERC20Vault is TaikoTest { addressManager.setAddress(uint64(block.chainid), "taiko_token", address(tko)); erc20Vault = ERC20Vault( - LibDeployHelper.deployProxy({ + deployProxy({ name: "erc20_vault", impl: address(new ERC20Vault()), data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) @@ -114,7 +114,7 @@ contract TestERC20Vault is TaikoTest { ); destChainIdERC20Vault = ERC20Vault( - LibDeployHelper.deployProxy({ + deployProxy({ name: "erc20_vault", impl: address(new ERC20Vault()), data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) @@ -126,7 +126,7 @@ contract TestERC20Vault is TaikoTest { bridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -140,7 +140,7 @@ contract TestERC20Vault is TaikoTest { vm.deal(address(destChainIdBridge), 100 ether); signalService = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector), diff --git a/packages/protocol/test/tokenvault/ERC721Vault.t.sol b/packages/protocol/test/tokenvault/ERC721Vault.t.sol index 66745d3a680..08dc05796e4 100644 --- a/packages/protocol/test/tokenvault/ERC721Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC721Vault.t.sol @@ -124,7 +124,7 @@ contract ERC721VaultTest is TaikoTest { vm.deal(Bob, 100 ether); addressManager = AddressManager( - LibDeployHelper.deployProxy({ + deployProxy({ name: "address_manager", impl: address(new AddressManager()), data: bytes.concat(AddressManager.init.selector) @@ -133,7 +133,7 @@ contract ERC721VaultTest is TaikoTest { bridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -145,7 +145,7 @@ contract ERC721VaultTest is TaikoTest { destChainBridge = Bridge( payable( - LibDeployHelper.deployProxy({ + deployProxy({ name: "bridge", impl: address(new Bridge()), data: bytes.concat(Bridge.init.selector, abi.encode(addressManager)), @@ -156,7 +156,7 @@ contract ERC721VaultTest is TaikoTest { ); signalService = SignalService( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SignalService()), data: bytes.concat(SignalService.init.selector) @@ -164,7 +164,7 @@ contract ERC721VaultTest is TaikoTest { ); erc721Vault = ERC721Vault( - LibDeployHelper.deployProxy({ + deployProxy({ name: "erc721_vault", impl: address(new ERC721Vault()), data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) @@ -172,7 +172,7 @@ contract ERC721VaultTest is TaikoTest { ); destChainErc721Vault = ERC721Vault( - LibDeployHelper.deployProxy({ + deployProxy({ name: "erc721_vault", impl: address(new ERC721Vault()), data: bytes.concat(BaseVault.init.selector, abi.encode(address(addressManager))) @@ -183,7 +183,7 @@ contract ERC721VaultTest is TaikoTest { vm.deal(address(destChainIdBridge), 100 ether); mockProofSignalService = SkipProofCheckSignal( - LibDeployHelper.deployProxy({ + deployProxy({ name: "signal_service", impl: address(new SkipProofCheckSignal()), data: bytes.concat(SignalService.init.selector) From 934f205961076d8ce27c056914c9502fdd05a1cd Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 30 Nov 2023 22:10:46 +0800 Subject: [PATCH 08/17] feat(protocol): allow changing Bridged ERC20 token on dest chain (#15288) Co-authored-by: Daniel Wang Co-authored-by: jeff <113397187+cyberhorsey@users.noreply.github.com> Co-authored-by: David Co-authored-by: D <51912515+adaki2004@users.noreply.github.com> Co-authored-by: adaki2004 --- .../contracts/common/EssentialContract.sol | 7 + .../contracts/compiled/FiatTokenProxy.json | 552 +++ .../contracts/compiled/FiatTokenV2_1.json | 3852 +++++++++++++++++ .../protocol/contracts/compiled/README.md | 24 + .../contracts/tokenvault/BaseNFTVault.sol | 3 - .../contracts/tokenvault/BridgedERC1155.sol | 14 +- .../contracts/tokenvault/BridgedERC20.sol | 58 +- .../contracts/tokenvault/BridgedERC20Base.sol | 79 + .../contracts/tokenvault/BridgedERC721.sol | 34 +- .../contracts/tokenvault/ERC20Vault.sol | 89 +- .../{IMintableERC20.sol => IBridgedERC20.sol} | 17 +- .../tokenvault/adaptors/USDCAdaptor.sol | 35 + .../test/tokenvault/BridgedERC20.t.sol | 142 + .../protocol/test/tokenvault/ERC20Vault.t.sol | 10 +- .../test/tokenvault/ERC721Vault.t.sol | 2 +- 15 files changed, 4846 insertions(+), 72 deletions(-) create mode 100644 packages/protocol/contracts/compiled/FiatTokenProxy.json create mode 100644 packages/protocol/contracts/compiled/FiatTokenV2_1.json create mode 100644 packages/protocol/contracts/compiled/README.md create mode 100644 packages/protocol/contracts/tokenvault/BridgedERC20Base.sol rename packages/protocol/contracts/tokenvault/{IMintableERC20.sol => IBridgedERC20.sol} (53%) create mode 100644 packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol create mode 100644 packages/protocol/test/tokenvault/BridgedERC20.t.sol diff --git a/packages/protocol/contracts/common/EssentialContract.sol b/packages/protocol/contracts/common/EssentialContract.sol index 87e594dd0e4..371bd275744 100644 --- a/packages/protocol/contracts/common/EssentialContract.sol +++ b/packages/protocol/contracts/common/EssentialContract.sol @@ -12,6 +12,13 @@ import "./OwnerUUPSUpgradable.sol"; abstract contract EssentialContract is OwnerUUPSUpgradable, AddressResolver { uint256[50] private __gap; + /// @dev Modifier that ensures the caller is the owner or resolved address of a given name. + /// @param name The name to check against. + modifier onlyFromOwnerOrNamed(bytes32 name) { + if (msg.sender != owner() && msg.sender != resolve(name, true)) revert RESOLVER_DENIED(); + _; + } + /// @notice Initializes the contract with an address manager. /// @param _addressManager The address of the address manager. // solhint-disable-next-line func-name-mixedcase diff --git a/packages/protocol/contracts/compiled/FiatTokenProxy.json b/packages/protocol/contracts/compiled/FiatTokenProxy.json new file mode 100644 index 00000000000..cebc9f3ceca --- /dev/null +++ b/packages/protocol/contracts/compiled/FiatTokenProxy.json @@ -0,0 +1,552 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "implementationContract", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506040516108a93803806108a98339818101604052602081101561003357600080fd5b5051808061004081610051565b5061004a336100c3565b5050610123565b610064816100e760201b61042a1760201c565b61009f5760405162461bcd60e51b815260040180806020018281038252603b81526020018061086e603b913960400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c355565b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b55565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061011b57508115155b949350505050565b61073c806101326000396000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146101315780638f2839701461016f578063f851a440146101af5761005a565b80633659cfe6146100645780634f1ef286146100a4575b6100626101c4565b005b34801561007057600080fd5b506100626004803603602081101561008757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101de565b610062600480360360408110156100ba57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156100f257600080fd5b82018360208201111561010457600080fd5b8035906020019184600183028401116401000000008311171561012657600080fd5b509092509050610232565b34801561013d57600080fd5b50610146610309565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561017b57600080fd5b506100626004803603602081101561019257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610318565b3480156101bb57600080fd5b50610146610420565b6101cc610466565b6101dc6101d76104fa565b61051f565b565b6101e6610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102275761022281610568565b61022f565b61022f6101c4565b50565b61023a610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fc5761027683610568565b60003073ffffffffffffffffffffffffffffffffffffffff16348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102e3576040519150601f19603f3d011682016040523d82523d6000602084013e6102e8565b606091505b50509050806102f657600080fd5b50610304565b6103046101c4565b505050565b60006103136104fa565b905090565b610320610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102275773ffffffffffffffffffffffffffffffffffffffff81166103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806106966036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e8610543565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a1610222816105bd565b6000610313610543565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061045e57508115155b949350505050565b61046e610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806106646032913960400191505060405180910390fd5b6101dc6101dc565b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35490565b3660008037600080366000845af43d6000803e80801561053e573d6000f35b3d6000fd5b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b5490565b610571816105e1565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9181900360200190a150565b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b55565b6105ea8161042a565b61063f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806106cc603b913960400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a264697066735822122001b610efbebc57927addec087895f40a32b15707f9bbcd4d028e2ffcc8cd241f64736f6c634300060c003343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373", + "sourceMap": "1385:182:20:-:0;;;1443:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1443:122:20;;;2686:42:19;2705:22;2686:18;:42::i;:::-;-1:-1:-1;3044:21:17::1;3054:10;3044:9;:21::i;:::-;2847:225:::0;1443:122:20;1385:182;;3492:342:19;3586:37;3605:17;3586:18;;;;;:37;;:::i;:::-;3565:143;;;;-1:-1:-1;;;3565:143:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2298:66;3787:31;3773:55::o;5448:153:17:-;2256:66;5563:22;5549:46::o;718:610:21:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;1305:15:21;;;1278:42;1270:51;718:610;-1:-1:-1;;;;718:610:21:o;1385:182:20:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146101315780638f2839701461016f578063f851a440146101af5761005a565b80633659cfe6146100645780634f1ef286146100a4575b6100626101c4565b005b34801561007057600080fd5b506100626004803603602081101561008757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101de565b610062600480360360408110156100ba57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156100f257600080fd5b82018360208201111561010457600080fd5b8035906020019184600183028401116401000000008311171561012657600080fd5b509092509050610232565b34801561013d57600080fd5b50610146610309565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561017b57600080fd5b506100626004803603602081101561019257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610318565b3480156101bb57600080fd5b50610146610420565b6101cc610466565b6101dc6101d76104fa565b61051f565b565b6101e6610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102275761022281610568565b61022f565b61022f6101c4565b50565b61023a610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fc5761027683610568565b60003073ffffffffffffffffffffffffffffffffffffffff16348484604051808383808284376040519201945060009350909150508083038185875af1925050503d80600081146102e3576040519150601f19603f3d011682016040523d82523d6000602084013e6102e8565b606091505b50509050806102f657600080fd5b50610304565b6103046101c4565b505050565b60006103136104fa565b905090565b610320610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102275773ffffffffffffffffffffffffffffffffffffffff81166103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806106966036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e8610543565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a1610222816105bd565b6000610313610543565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061045e57508115155b949350505050565b61046e610543565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806106646032913960400191505060405180910390fd5b6101dc6101dc565b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35490565b3660008037600080366000845af43d6000803e80801561053e573d6000f35b3d6000fd5b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b5490565b610571816105e1565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9181900360200190a150565b7f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b55565b6105ea8161042a565b61063f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806106cc603b913960400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c35556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a264697066735822122001b610efbebc57927addec087895f40a32b15707f9bbcd4d028e2ffcc8cd241f64736f6c634300060c0033", + "sourceMap": "1385:182:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1836:11:18;:9;:11::i;:::-;1385:182:20;4049:109:17;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4049:109:17;;;;:::i;4702:406::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4702:406:17;;-1:-1:-1;4702:406:17;-1:-1:-1;4702:406:17;:::i;3294:99::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3581:272;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3581:272:17;;;;:::i;3141:81::-;;;;;;;;;;;;;:::i;3688:100:18:-;3728:15;:13;:15::i;:::-;3753:28;3763:17;:15;:17::i;:::-;3753:9;:28::i;:::-;3688:100::o;4049:109:17:-;2571:8;:6;:8::i;:::-;2557:22;;:10;:22;;;2553:96;;;4122:29:::1;4133:17;4122:10;:29::i;:::-;2553:96:::0;;;2627:11;:9;:11::i;:::-;4049:109;:::o;4702:406::-;2571:8;:6;:8::i;:::-;2557:22;;:10;:22;;;2553:96;;;4839:29:::1;4850:17;4839:10;:29::i;:::-;4965:12;4990:4;4982:18;;5008:9;5019:4;;4982:42;;;;;;;;;;::::0;;::::1;::::0;-1:-1:-1;4982:42:17::1;::::0;-1:-1:-1;4982:42:17;;-1:-1:-1;;4982:42:17;;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4964:60;;;5093:7;5085:16;;;::::0;::::1;;2595:1;2553:96:::0;;;2627:11;:9;:11::i;:::-;4702:406;;;:::o;3294:99::-;3343:7;3369:17;:15;:17::i;:::-;3362:24;;3294:99;:::o;3581:272::-;2571:8;:6;:8::i;:::-;2557:22;;:10;:22;;;2553:96;;;3668:22:::1;::::0;::::1;3647:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3785:32;3798:8;:6;:8::i;:::-;3785:32;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;3827:19;3837:8;3827:9;:19::i;3141:81::-:0;3181:7;3207:8;:6;:8::i;718:610:21:-;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;1305:15:21;;;1278:42;1270:51;718:610;-1:-1:-1;;;;718:610:21:o;5684:210:17:-;5772:8;:6;:8::i;:::-;5758:22;;:10;:22;;;;5737:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5866:21;:19;:21::i;2863:185:19:-;2298:66;3021:11;;2999:43::o;2293:1025:18:-;2623:14;2620:1;2617;2604:34;2934:1;2915;2883:14;2864:1;2832:14;2809:5;2779:170;3023:16;3020:1;3017;3002:38;3061:6;3136:74;;;;3267:16;3264:1;3257:27;3136:74;3175:16;3172:1;3165:27;5165:157:17;2256:66;5295:11;;5274:42::o;3193:152:19:-;3259:37;3278:17;3259:18;:37::i;:::-;3311:27;;;;;;;;;;;;;;;;;;;3193:152;:::o;5448:153:17:-;2256:66;5563:22;5549:46::o;3492:342:19:-;3586:37;3605:17;3586:18;:37::i;:::-;3565:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2298:66;3787:31;3773:55::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "admin()": "f851a440", + "changeAdmin(address)": "8f283970", + "implementation()": "5c60da1b", + "upgradeTo(address)": "3659cfe6", + "upgradeToAndCall(address,bytes)": "4f1ef286" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementationContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract proxies FiatToken calls and enables FiatToken upgrades\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Only the current admin can call this function.\",\"params\":{\"newAdmin\":\"Address to transfer proxy administration to.\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"title\":\"FiatTokenProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/FiatTokenProxy/centre-tokens/contracts/v1/FiatTokenProxy.sol\":\"FiatTokenProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000000},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/FiatTokenProxy/centre-tokens/contracts/upgradeability/AdminUpgradeabilityProxy.sol\":{\"keccak256\":\"0xc93cb352d8b777ea96e743124af5386eeee32a9fdef0b2fbd89623988e66caad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0407b40cd936bdf6f6ae141fef3da54824a786affc9a459cd6cd83478043683\",\"dweb:/ipfs/QmQh2LjAVdU2HKc7w1fXxuPEfFvTcBifHiYzgdrZtDB9rk\"]},\"src/FiatTokenProxy/centre-tokens/contracts/upgradeability/Proxy.sol\":{\"keccak256\":\"0x6cc252e2b80c8ecaf6d29b950ba3591e4366caf06c3ccba89a8f9cbd2ee807e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d60d210ae173d21b90b989e69c50789fb09dc27ccb0736b41907471248ee3087\",\"dweb:/ipfs/QmQbijUGm48UDyqnefEJExWsxBViKj1M5TAWY82Jn6sJW7\"]},\"src/FiatTokenProxy/centre-tokens/contracts/upgradeability/UpgradeabilityProxy.sol\":{\"keccak256\":\"0x3086b8904fb474eb3d8d701f8ec6991796c5e8a7345ace9c3aabc140973f6c85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cde7d942bb42ee3fb09ed643751151bc192522a1dc9ccb5d28aff7fdadf8b9e6\",\"dweb:/ipfs/QmQBVbxYcZjRFH66R1ZByXx8rQym3Sx7jjFtFKRWhLXxdg\"]},\"src/FiatTokenProxy/centre-tokens/contracts/v1/FiatTokenProxy.sol\":{\"keccak256\":\"0x7e640892ac0fd6efafe4a9dc08cbc7ba5e825dafe8a6a8ebf717e7026b8fb69f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e84a985f3271652e16eec4df9be1829f042a98b5723db5b87aeeb8eadc9c207\",\"dweb:/ipfs/QmU4JWGMzd3rA64BiDVejhnapKRJG4WHLuw3g866hFPLTx\"]},\"src/FiatTokenProxy/openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xdfb4f812600ba4ce6738c35584ceb8c9433472583051b48ba5b1f66cb758a498\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df02dffe1c1de089d9b4f6192f0dcf464526f2230f420b3deec4645e0cdd2bff\",\"dweb:/ipfs/QmcqXGAU3KJqwrgUVoGJ2W8osomhSJ4R5kdsRpbuW3fELS\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.6.12+commit.27d51765" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "implementationContract", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousAdmin", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "AdminChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "Upgraded", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "changeAdmin" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "upgradeTo" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeToAndCall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "admin()": { + "returns": { + "_0": "The address of the proxy admin." + } + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Only the current admin can call this function.", + "params": { + "newAdmin": "Address to transfer proxy administration to." + } + }, + "implementation()": { + "returns": { + "_0": "The address of the implementation." + } + }, + "upgradeTo(address)": { + "details": "Upgrade the backing implementation of the proxy. Only the admin can call this function.", + "params": { + "newImplementation": "Address of the new implementation." + } + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.", + "params": { + "data": "Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector-and-argument-encoding.", + "newImplementation": "Address of the new implementation." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "ds-test/=lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/" + ], + "optimizer": { + "enabled": true, + "runs": 10000000 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/FiatTokenProxy/centre-tokens/contracts/v1/FiatTokenProxy.sol": "FiatTokenProxy" + }, + "libraries": {} + }, + "sources": { + "src/FiatTokenProxy/centre-tokens/contracts/upgradeability/AdminUpgradeabilityProxy.sol": { + "keccak256": "0xc93cb352d8b777ea96e743124af5386eeee32a9fdef0b2fbd89623988e66caad", + "urls": [ + "bzz-raw://d0407b40cd936bdf6f6ae141fef3da54824a786affc9a459cd6cd83478043683", + "dweb:/ipfs/QmQh2LjAVdU2HKc7w1fXxuPEfFvTcBifHiYzgdrZtDB9rk" + ], + "license": "MIT" + }, + "src/FiatTokenProxy/centre-tokens/contracts/upgradeability/Proxy.sol": { + "keccak256": "0x6cc252e2b80c8ecaf6d29b950ba3591e4366caf06c3ccba89a8f9cbd2ee807e3", + "urls": [ + "bzz-raw://d60d210ae173d21b90b989e69c50789fb09dc27ccb0736b41907471248ee3087", + "dweb:/ipfs/QmQbijUGm48UDyqnefEJExWsxBViKj1M5TAWY82Jn6sJW7" + ], + "license": "MIT" + }, + "src/FiatTokenProxy/centre-tokens/contracts/upgradeability/UpgradeabilityProxy.sol": { + "keccak256": "0x3086b8904fb474eb3d8d701f8ec6991796c5e8a7345ace9c3aabc140973f6c85", + "urls": [ + "bzz-raw://cde7d942bb42ee3fb09ed643751151bc192522a1dc9ccb5d28aff7fdadf8b9e6", + "dweb:/ipfs/QmQBVbxYcZjRFH66R1ZByXx8rQym3Sx7jjFtFKRWhLXxdg" + ], + "license": "MIT" + }, + "src/FiatTokenProxy/centre-tokens/contracts/v1/FiatTokenProxy.sol": { + "keccak256": "0x7e640892ac0fd6efafe4a9dc08cbc7ba5e825dafe8a6a8ebf717e7026b8fb69f", + "urls": [ + "bzz-raw://2e84a985f3271652e16eec4df9be1829f042a98b5723db5b87aeeb8eadc9c207", + "dweb:/ipfs/QmU4JWGMzd3rA64BiDVejhnapKRJG4WHLuw3g866hFPLTx" + ], + "license": "MIT" + }, + "src/FiatTokenProxy/openzeppelin/contracts/utils/Address.sol": { + "keccak256": "0xdfb4f812600ba4ce6738c35584ceb8c9433472583051b48ba5b1f66cb758a498", + "urls": [ + "bzz-raw://df02dffe1c1de089d9b4f6192f0dcf464526f2230f420b3deec4645e0cdd2bff", + "dweb:/ipfs/QmcqXGAU3KJqwrgUVoGJ2W8osomhSJ4R5kdsRpbuW3fELS" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/FiatTokenProxy/centre-tokens/contracts/v1/FiatTokenProxy.sol", + "id": 40713, + "exportedSymbols": { + "FiatTokenProxy": [40712] + }, + "nodeType": "SourceUnit", + "src": "1154:414:20", + "nodes": [ + { + "id": 40697, + "nodeType": "PragmaDirective", + "src": "1154:23:20", + "nodes": [], + "literals": ["solidity", "0.6", ".12"] + }, + { + "id": 40699, + "nodeType": "ImportDirective", + "src": "1179:94:20", + "nodes": [], + "absolutePath": "src/FiatTokenProxy/centre-tokens/contracts/upgradeability/AdminUpgradeabilityProxy.sol", + "file": "../upgradeability/AdminUpgradeabilityProxy.sol", + "scope": 40713, + "sourceUnit": 40566, + "symbolAliases": [ + { + "foreign": { + "argumentTypes": null, + "id": 40698, + "name": "AdminUpgradeabilityProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": null, + "src": "1192:24:20", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + }, + "local": null + } + ], + "unitAlias": "" + }, + { + "id": 40712, + "nodeType": "ContractDefinition", + "src": "1385:182:20", + "nodes": [ + { + "id": 40711, + "nodeType": "FunctionDefinition", + "src": "1443:122:20", + "nodes": [], + "body": { + "id": 40710, + "nodeType": "Block", + "src": "1563:2:20", + "nodes": [], + "statements": [] + }, + "documentation": null, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "argumentTypes": null, + "id": 40707, + "name": "implementationContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40704, + "src": "1535:22:20", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 40708, + "modifierName": { + "argumentTypes": null, + "id": 40706, + "name": "AdminUpgradeabilityProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40565, + "src": "1510:24:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_AdminUpgradeabilityProxy_$40565_$", + "typeString": "type(contract AdminUpgradeabilityProxy)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1510:48:20" + } + ], + "name": "", + "overrides": null, + "parameters": { + "id": 40705, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 40704, + "mutability": "mutable", + "name": "implementationContract", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 40711, + "src": "1455:30:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 40703, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1455:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1454:32:20" + }, + "returnParameters": { + "id": 40709, + "nodeType": "ParameterList", + "parameters": [], + "src": "1563:0:20" + }, + "scope": 40712, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 40701, + "name": "AdminUpgradeabilityProxy", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 40565, + "src": "1412:24:20", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AdminUpgradeabilityProxy_$40565", + "typeString": "contract AdminUpgradeabilityProxy" + } + }, + "id": 40702, + "nodeType": "InheritanceSpecifier", + "src": "1412:24:20" + } + ], + "contractDependencies": [40565, 40609, 40695], + "contractKind": "contract", + "documentation": { + "id": 40700, + "nodeType": "StructuredDocumentation", + "src": "1275:109:20", + "text": " @title FiatTokenProxy\n @dev This contract proxies FiatToken calls and enables FiatToken upgrades" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [40712, 40565, 40695, 40609], + "name": "FiatTokenProxy", + "scope": 40713 + } + ], + "license": "MIT" + }, + "id": 20 +} diff --git a/packages/protocol/contracts/compiled/FiatTokenV2_1.json b/packages/protocol/contracts/compiled/FiatTokenV2_1.json new file mode 100644 index 00000000000..ecde2cf6579 --- /dev/null +++ b/packages/protocol/contracts/compiled/FiatTokenV2_1.json @@ -0,0 +1,3852 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "name": "AuthorizationCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "name": "AuthorizationUsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "Blacklisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newBlacklister", + "type": "address" + } + ], + "name": "BlacklisterChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "burner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newMasterMinter", + "type": "address" + } + ], + "name": "MasterMinterChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256" + } + ], + "name": "MinterConfigured", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldMinter", + "type": "address" + } + ], + "name": "MinterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Pause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "PauserChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "RescuerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "UnBlacklisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpause", + "type": "event" + }, + { + "inputs": [], + "name": "CANCEL_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RECEIVE_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TRANSFER_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "name": "authorizationState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "blacklist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blacklister", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "cancelAuthorization", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256" + } + ], + "name": "configureMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currency", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "decrement", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "increment", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenSymbol", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenCurrency", + "type": "string" + }, + { + "internalType": "uint8", + "name": "tokenDecimals", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newMasterMinter", + "type": "address" + }, + { + "internalType": "address", + "name": "newPauser", + "type": "address" + }, + { + "internalType": "address", + "name": "newBlacklister", + "type": "address" + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newName", + "type": "string" + } + ], + "name": "initializeV2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lostAndFound", + "type": "address" + } + ], + "name": "initializeV2_1", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isBlacklisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "masterMinter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "minterAllowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauser", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "receiveWithAuthorization", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "rescueERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "transferWithAuthorization", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "unBlacklist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newBlacklister", + "type": "address" + } + ], + "name": "updateBlacklister", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newMasterMinter", + "type": "address" + } + ], + "name": "updateMasterMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauser", + "type": "address" + } + ], + "name": "updatePauser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "name": "updateRescuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": { + "object": "0x60806040526001805460ff60a01b191690556000600b553480156200002357600080fd5b506200002f3362000035565b62000057565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6153eb80620000676000396000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c80637f2eecc3116101b2578063b2118a8d116100f9578063e3ee160e116100a2578063ef55bec61161007c578063ef55bec614610cc1578063f2fde38b14610d2d578063f9f92be414610d60578063fe575a8714610d9357610336565b8063e3ee160e14610c14578063e5a6b10f14610c80578063e94a010214610c8857610336565b8063d608ea64116100d3578063d608ea6414610b61578063d916948714610bd1578063dd62ed3e14610bd957610336565b8063b2118a8d14610ab8578063bd10243014610afb578063d505accf14610b0357610336565b8063a0cc6a681161015b578063aa20e1e411610135578063aa20e1e414610a1f578063aa271e1a14610a52578063ad38bf2214610a8557610336565b8063a0cc6a68146109a5578063a457c2d7146109ad578063a9059cbb146109e657610336565b80638da5cb5b1161018c5780638da5cb5b1461098d57806395d89b41146109955780639fd0506d1461099d57610336565b80637f2eecc31461094a5780638456cb59146109525780638a6db9c31461095a57610336565b80633644e515116102815780634e44d9561161022a5780635a049a70116102045780635a049a701461088e5780635c975abb146108dc57806370a08231146108e45780637ecebe001461091757610336565b80634e44d9561461081a57806354fd4d5014610853578063554bab3c1461085b57610336565b80633f4ba83a1161025b5780633f4ba83a146107bc57806340c10f19146107c457806342966c68146107fd57610336565b80633644e5151461077357806338a631831461077b578063395093511461078357610336565b80632fc81e09116102e3578063313ce567116102bd578063313ce567146105385780633357162b1461055657806335d99f351461074257610336565b80632fc81e09146104ca5780633092afd5146104fd57806330adf81f1461053057610336565b80631a895266116103145780631a8952661461041f57806323b872dd146104545780632ab600451461049757610336565b806306fdde031461033b578063095ea7b3146103b857806318160ddd14610405575b600080fd5b610343610dc6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037d578181015183820152602001610365565b50505050905090810190601f1680156103aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f1600480360360408110156103ce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e72565b604080519115158252519081900360200190f35b61040d610fff565b60408051918252519081900360200190f35b6104526004803603602081101561043557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611005565b005b6103f16004803603606081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e9565b610452600480360360208110156104ad57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113ef565b610452600480360360208110156104e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611550565b6103f16004803603602081101561051357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ce565b61040d6116c7565b6105406116eb565b6040805160ff9092168252519081900360200190f35b610452600480360361010081101561056d57600080fd5b81019060208101813564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff908116916040810135821691606082013581169160800135166116f4565b61074a611a36565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61040d611a52565b61074a611a58565b6103f16004803603604081101561079957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a74565b610452611bf6565b6103f1600480360360408110156107da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cb9565b6104526004803603602081101561081357600080fd5b50356120ee565b6103f16004803603604081101561083057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356123a8565b61034361253b565b6104526004803603602081101561087157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612572565b610452600480360360a08110156108a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060ff60408201351690606081013590608001356126d9565b6103f1612777565b61040d600480360360208110156108fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612798565b61040d6004803603602081101561092d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166127c0565b61040d6127e8565b61045261280c565b61040d6004803603602081101561097057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166128e6565b61074a61290e565b61034361292a565b61074a6129a3565b61040d6129bf565b6103f1600480360360408110156109c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356129e3565b6103f1600480360360408110156109fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b65565b61045260048036036020811015610a3557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612ce7565b6103f160048036036020811015610a6857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e4e565b61045260048036036020811015610a9b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e79565b61045260048036036060811015610ace57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612fe0565b61074a613076565b610452600480360360e0811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135613092565b61045260048036036020811015610b7757600080fd5b810190602081018135640100000000811115610b9257600080fd5b820183602082011115610ba457600080fd5b80359060200191846001830284011164010000000083111715610bc657600080fd5b509092509050613238565b61040d613321565b61040d60048036036040811015610bef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516613345565b6104526004803603610120811015610c2b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e081013590610100013561337d565b610343613527565b6103f160048036036040811015610c9e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356135a0565b6104526004803603610120811015610cd857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e08101359061010001356135d8565b61045260048036036020811015610d4357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613775565b61045260048036036020811015610d7657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166138c8565b6103f160048036036020811015610da957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166139af565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b820191906000526020600020905b815481529060010190602001808311610e4d57829003601f168201915b505050505081565b60015460009074010000000000000000000000000000000000000000900460ff1615610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff43386866139da565b506001949350505050565b600b5490565b60025473ffffffffffffffffffffffffffffffffffffffff163314611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061506b602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f117e3210bb9aa7d9baff172026820255c6f6c30ba8999d1c2fd88e2848137c4e9190a250565b60015460009074010000000000000000000000000000000000000000900460ff161561117657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff1615611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff16156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a6020908152604080832033845290915290205485111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151316028913960400191505060405180910390fd5b611375878787613b21565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a602090815260408083203384529091529020546113b09086613d4c565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600a60209081526040808320338452909152902055600193505050509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461147557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614fc9602a913960400191505060405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60125460ff1660011461156257600080fd5b30600090815260096020526040902054801561158357611583308383613b21565b505030600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600117909155601280549091166002179055565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150426029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600d909152808220829055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a2506001919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065460ff1681565b60085474010000000000000000000000000000000000000000900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806151ac602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150de602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fa06029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615159602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152bf6028913960400191505060405180910390fd5b875161192b9060049060208b0190614d50565b50865161193f9060059060208a0190614d50565b508551611953906007906020890190614d50565b50600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8716179055600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff87811691909117909255600180548216868416179055600280549091169184169190911790556119ed81613d95565b5050600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009074010000000000000000000000000000000000000000900460ff1615611b0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615611b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686613ddc565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061524d6022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015460009074010000000000000000000000000000000000000000900460ff1615611d4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff16611dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806150bd6021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611e98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f0f6023913960400191505060405180910390fd5b60008411611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614ff36029913960400191505060405180910390fd5b336000908152600d602052604090205480851115611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061521f602e913960400191505060405180910390fd5b600b54611fd39086613e26565b600b5573ffffffffffffffffffffffffffffffffffffffff86166000908152600960205260409020546120069086613e26565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600960205260409020556120368186613d4c565b336000818152600d6020908152604091829020939093558051888152905173ffffffffffffffffffffffffffffffffffffffff8a16937fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8928290030190a360408051868152905173ffffffffffffffffffffffffffffffffffffffff8816916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600195945050505050565b60015474010000000000000000000000000000000000000000900460ff161561217857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff166121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806150bd6021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b33600090815260096020526040902054826122af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614ee66029913960400191505060405180910390fd5b82811015612308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150976026913960400191505060405180910390fd5b600b546123159084613d4c565b600b556123228184613d4c565b33600081815260096020908152604091829020939093558051868152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a260408051848152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60015460009074010000000000000000000000000000000000000000900460ff161561243557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150426029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d825291829020859055815185815291517f46980fca912ef9bcdbd36877427b6b90e860769f604e89c0e67720cece530d209281900390910190a250600192915050565b60408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612664576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614e936028913960400191505060405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60015474010000000000000000000000000000000000000000900460ff161561276357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6127708585858585613e9a565b5050505050565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b60015473ffffffffffffffffffffffffffffffffffffffff16331461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061524d6022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b73ffffffffffffffffffffffffffffffffffffffff166000908152600d602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60015460009074010000000000000000000000000000000000000000900460ff1615612a7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612ad9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612b5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686614023565b60015460009074010000000000000000000000000000000000000000900460ff1615612bf257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612cdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686613b21565b60005473ffffffffffffffffffffffffffffffffffffffff163314612d6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150de602f913960400191505060405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fdb66dfa9c6b8f5226fe9aac7e51897ae8ee94ac31dc70bb6c9900b2574b707e690600090a250565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314612eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153156032913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fc67398012c111ce95ecb7429b933096c977380ee6c421175a71a4a4c6c88c06e90600090a250565b600e5473ffffffffffffffffffffffffffffffffffffffff163314613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061510d6024913960400191505060405180910390fd5b61307173ffffffffffffffffffffffffffffffffffffffff8416838361407f565b505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff161561311c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61322d8989898989898961410c565b505050505050505050565b60085474010000000000000000000000000000000000000000900460ff168015613265575060125460ff16155b61326e57600080fd5b61327a60048383614dce565b506132ef82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015291506142b59050565b600f555050601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60015474010000000000000000000000000000000000000000900460ff161561340757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b614327565b5050505050505050505050565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152601060209081526040808320938352929052205460ff1690565b60015474010000000000000000000000000000000000000000900460ff161561366257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff16156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b614469565b60005473ffffffffffffffffffffffffffffffffffffffff1633146137fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613867576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f586026913960400191505060405180910390fd5b6000546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09281900390910190a16138c581613d95565b50565b60025473ffffffffffffffffffffffffffffffffffffffff163314613938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061506b602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b8559190a250565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8316613a46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151fb6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f7e6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316613b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151d66025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e706023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054811115613c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061501c6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054613ca79082613d4c565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600960205260408082209390935590841681522054613ce39082613e26565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526009602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000613d8e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614576565b9392505050565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600a60209081526040808320938616835292905220546130719084908490613e219085613e26565b6139da565b600082820183811015613d8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613ea48585614627565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff87168183018190526060828101889052835180840390910181526080909201909252600f54909190613f1890868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff1614613f9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616600081815260106020908152604080832089845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518792917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a3505050505050565b6130718383613e21846040518060600160405280602581526020016153916025913973ffffffffffffffffffffffffffffffffffffffff808a166000908152600a60209081526040808320938c16835292905220549190614576565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052613071908490614727565b4284101561417b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a207065726d697420697320657870697265640000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80881660008181526011602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992810192909252818301849052938a1660608201526080810189905260a081019390935260c08084018890528151808503909101815260e09093019052600f5461421e90868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff16146142a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f454950323631323a20696e76616c6964207369676e6174757265000000000000604482015290519081900360640190fd5b6142ab8888886139da565b5050505050505050565b8151602092830120815191830191909120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818601528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b614333898588886147ff565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143c690868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff161461444857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6144528a866148bf565b61445d8a8a8a613b21565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff881633146144d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151876025913960400191505060405180910390fd5b6144e3898588886147ff565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143c690868686866146b5565b6000818484111561461f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145e45781810151838201526020016145cc565b50505050905090810190601f1680156146115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260106020908152604080832084845290915290205460ff16156146b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806152e7602e913960400191505060405180910390fd5b5050565b8051602080830191909120604080517f19010000000000000000000000000000000000000000000000000000000000008185015260228101899052604280820193909352815180820390930183526062019052805191012060009061471c81878787614944565b979650505050505050565b6060614789826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614b419092919063ffffffff16565b805190915015613071578080602001905160208110156147a857600080fd5b5051613071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615295602a913960400191505060405180910390fd5b814211614857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614ebb602b913960400191505060405180910390fd5b8042106148af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6148b98484614627565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260106020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a35050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061526f6026913960400191505060405180910390fd5b8360ff16601b141580156149d757508360ff16601c14155b15614a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f326026913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614a89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116614b3657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45435265636f7665723a20696e76616c6964207369676e617475726500000000604482015290519081900360640190fd5b90505b949350505050565b6060614b3984846000856060614b5685614d17565b614bc157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614c2b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614bee565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614c8d576040519150601f19603f3d011682016040523d82523d6000602084013e614c92565b606091505b50915091508115614ca6579150614b399050565b805115614cb65780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528651602484015286518793919283926044019190850190808383600083156145e45781810151838201526020016145cc565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614b39575050151592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614d9157805160ff1916838001178555614dbe565b82800160010185558215614dbe579182015b82811115614dbe578251825591602001919060010190614da3565b50614dca929150614e5a565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e2d578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555614dbe565b82800160010185558215614dbe579182015b82811115614dbe578235825591602001919060010190614e3f565b5b80821115614dca5760008155600101614e5b56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e206973206e6f74207965742076616c696446696174546f6b656e3a206275726e20616d6f756e74206e6f742067726561746572207468616e203046696174546f6b656e3a206d696e7420746f20746865207a65726f206164647265737345435265636f7665723a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737346696174546f6b656e3a206e65772070617573657220697320746865207a65726f2061646472657373526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e74206e6f742067726561746572207468616e203045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f7420746865206d61737465724d696e746572426c61636b6c69737461626c653a2063616c6c6572206973206e6f742074686520626c61636b6c697374657246696174546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f742061206d696e74657246696174546f6b656e3a206e6577206d61737465724d696e74657220697320746865207a65726f2061646472657373526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636546696174546f6b656e3a206e657720626c61636b6c697374657220697320746865207a65726f206164647265737346696174546f6b656e56323a2063616c6c6572206d7573742062652074686520706179656546696174546f6b656e3a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e742065786365656473206d696e746572416c6c6f77616e63655061757361626c653a2063616c6c6572206973206e6f74207468652070617573657245435265636f7665723a20696e76616c6964207369676e6174757265202773272076616c75655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656446696174546f6b656e3a206e6577206f776e657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e2069732075736564206f722063616e63656c6564426c61636b6c69737461626c653a206e657720626c61636b6c697374657220697320746865207a65726f2061646472657373426c61636b6c69737461626c653a206163636f756e7420697320626c61636b6c697374656446696174546f6b656e56323a20617574686f72697a6174696f6e206973206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203ccc7055acd0820f4e7d094fa75ff2d3b0c27bdd446079aeef6bd6d02c56938e64736f6c634300060c0033", + "sourceMap": "1362:764:41:-:0;;;2106:26:35;;;-1:-1:-1;2106:26:35;;;-1:-1:-1;1940:33:33;;1362:764:41;;;;;;;;;-1:-1:-1;2223:20:34;2232:10;2223:8;:20::i;:::-;1362:764:41;;2493:79:34;2548:6;:17;;-1:-1:-1;2548:17:34;-1:-1:-1;2548:17:34;;;;;;;;;;2493:79::o;1362:764:41:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106103365760003560e01c80637f2eecc3116101b2578063b2118a8d116100f9578063e3ee160e116100a2578063ef55bec61161007c578063ef55bec614610cc1578063f2fde38b14610d2d578063f9f92be414610d60578063fe575a8714610d9357610336565b8063e3ee160e14610c14578063e5a6b10f14610c80578063e94a010214610c8857610336565b8063d608ea64116100d3578063d608ea6414610b61578063d916948714610bd1578063dd62ed3e14610bd957610336565b8063b2118a8d14610ab8578063bd10243014610afb578063d505accf14610b0357610336565b8063a0cc6a681161015b578063aa20e1e411610135578063aa20e1e414610a1f578063aa271e1a14610a52578063ad38bf2214610a8557610336565b8063a0cc6a68146109a5578063a457c2d7146109ad578063a9059cbb146109e657610336565b80638da5cb5b1161018c5780638da5cb5b1461098d57806395d89b41146109955780639fd0506d1461099d57610336565b80637f2eecc31461094a5780638456cb59146109525780638a6db9c31461095a57610336565b80633644e515116102815780634e44d9561161022a5780635a049a70116102045780635a049a701461088e5780635c975abb146108dc57806370a08231146108e45780637ecebe001461091757610336565b80634e44d9561461081a57806354fd4d5014610853578063554bab3c1461085b57610336565b80633f4ba83a1161025b5780633f4ba83a146107bc57806340c10f19146107c457806342966c68146107fd57610336565b80633644e5151461077357806338a631831461077b578063395093511461078357610336565b80632fc81e09116102e3578063313ce567116102bd578063313ce567146105385780633357162b1461055657806335d99f351461074257610336565b80632fc81e09146104ca5780633092afd5146104fd57806330adf81f1461053057610336565b80631a895266116103145780631a8952661461041f57806323b872dd146104545780632ab600451461049757610336565b806306fdde031461033b578063095ea7b3146103b857806318160ddd14610405575b600080fd5b610343610dc6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037d578181015183820152602001610365565b50505050905090810190601f1680156103aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103f1600480360360408110156103ce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e72565b604080519115158252519081900360200190f35b61040d610fff565b60408051918252519081900360200190f35b6104526004803603602081101561043557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611005565b005b6103f16004803603606081101561046a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e9565b610452600480360360208110156104ad57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113ef565b610452600480360360208110156104e057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611550565b6103f16004803603602081101561051357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ce565b61040d6116c7565b6105406116eb565b6040805160ff9092168252519081900360200190f35b610452600480360361010081101561056d57600080fd5b81019060208101813564010000000081111561058857600080fd5b82018360208201111561059a57600080fd5b803590602001918460018302840111640100000000831117156105bc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602081013573ffffffffffffffffffffffffffffffffffffffff908116916040810135821691606082013581169160800135166116f4565b61074a611a36565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61040d611a52565b61074a611a58565b6103f16004803603604081101561079957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611a74565b610452611bf6565b6103f1600480360360408110156107da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611cb9565b6104526004803603602081101561081357600080fd5b50356120ee565b6103f16004803603604081101561083057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356123a8565b61034361253b565b6104526004803603602081101561087157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612572565b610452600480360360a08110156108a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060ff60408201351690606081013590608001356126d9565b6103f1612777565b61040d600480360360208110156108fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612798565b61040d6004803603602081101561092d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166127c0565b61040d6127e8565b61045261280c565b61040d6004803603602081101561097057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166128e6565b61074a61290e565b61034361292a565b61074a6129a3565b61040d6129bf565b6103f1600480360360408110156109c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356129e3565b6103f1600480360360408110156109fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b65565b61045260048036036020811015610a3557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612ce7565b6103f160048036036020811015610a6857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e4e565b61045260048036036020811015610a9b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612e79565b61045260048036036060811015610ace57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135612fe0565b61074a613076565b610452600480360360e0811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135613092565b61045260048036036020811015610b7757600080fd5b810190602081018135640100000000811115610b9257600080fd5b820183602082011115610ba457600080fd5b80359060200191846001830284011164010000000083111715610bc657600080fd5b509092509050613238565b61040d613321565b61040d60048036036040811015610bef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516613345565b6104526004803603610120811015610c2b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e081013590610100013561337d565b610343613527565b6103f160048036036040811015610c9e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356135a0565b6104526004803603610120811015610cd857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060808101359060a08101359060ff60c0820135169060e08101359061010001356135d8565b61045260048036036020811015610d4357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613775565b61045260048036036020811015610d7657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166138c8565b6103f160048036036020811015610da957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166139af565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b820191906000526020600020905b815481529060010190602001808311610e4d57829003601f168201915b505050505081565b60015460009074010000000000000000000000000000000000000000900460ff1615610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615610fe9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff43386866139da565b506001949350505050565b600b5490565b60025473ffffffffffffffffffffffffffffffffffffffff163314611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061506b602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f117e3210bb9aa7d9baff172026820255c6f6c30ba8999d1c2fd88e2848137c4e9190a250565b60015460009074010000000000000000000000000000000000000000900460ff161561117657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff16156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff1615611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040902054859060ff16156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a6020908152604080832033845290915290205485111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151316028913960400191505060405180910390fd5b611375878787613b21565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600a602090815260408083203384529091529020546113b09086613d4c565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600a60209081526040808320338452909152902055600193505050509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461147557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614fc9602a913960400191505060405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe475e580d85111348e40d8ca33cfdd74c30fe1655c2d8537a13abc10065ffa5a90600090a250565b60125460ff1660011461156257600080fd5b30600090815260096020526040902054801561158357611583308383613b21565b505030600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00908116600117909155601280549091166002179055565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314611641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150426029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600d909152808220829055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a2506001919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065460ff1681565b60085474010000000000000000000000000000000000000000900460ff1615611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806151ac602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150de602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611840576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fa06029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615159602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152bf6028913960400191505060405180910390fd5b875161192b9060049060208b0190614d50565b50865161193f9060059060208a0190614d50565b508551611953906007906020890190614d50565b50600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8716179055600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff87811691909117909255600180548216868416179055600280549091169184169190911790556119ed81613d95565b5050600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055505050505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1690565b60015460009074010000000000000000000000000000000000000000900460ff1615611b0157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615611b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686613ddc565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061524d6022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015460009074010000000000000000000000000000000000000000900460ff1615611d4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff16611dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806150bd6021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615611e17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615611e98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f0f6023913960400191505060405180910390fd5b60008411611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614ff36029913960400191505060405180910390fd5b336000908152600d602052604090205480851115611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061521f602e913960400191505060405180910390fd5b600b54611fd39086613e26565b600b5573ffffffffffffffffffffffffffffffffffffffff86166000908152600960205260409020546120069086613e26565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600960205260409020556120368186613d4c565b336000818152600d6020908152604091829020939093558051888152905173ffffffffffffffffffffffffffffffffffffffff8a16937fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8928290030190a360408051868152905173ffffffffffffffffffffffffffffffffffffffff8816916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600195945050505050565b60015474010000000000000000000000000000000000000000900460ff161561217857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b336000908152600c602052604090205460ff166121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806150bd6021913960400191505060405180910390fd5b3360008181526003602052604090205460ff1615612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b33600090815260096020526040902054826122af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614ee66029913960400191505060405180910390fd5b82811015612308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150976026913960400191505060405180910390fd5b600b546123159084613d4c565b600b556123228184613d4c565b33600081815260096020908152604091829020939093558051868152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a260408051848152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b60015460009074010000000000000000000000000000000000000000900460ff161561243557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146124a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150426029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000818152600c6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600d825291829020859055815185815291517f46980fca912ef9bcdbd36877427b6b90e860769f604e89c0e67720cece530d209281900390910190a250600192915050565b60408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612664576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614e936028913960400191505060405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fb80482a293ca2e013eda8683c9bd7fc8347cfdaeea5ede58cba46df502c2a60490600090a250565b60015474010000000000000000000000000000000000000000900460ff161561276357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6127708585858585613e9a565b5050505050565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526009602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526011602052604090205490565b7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b60015473ffffffffffffffffffffffffffffffffffffffff16331461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061524d6022913960400191505060405180910390fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b73ffffffffffffffffffffffffffffffffffffffff166000908152600d602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b60015460009074010000000000000000000000000000000000000000900460ff1615612a7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612ad9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612b5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686614023565b60015460009074010000000000000000000000000000000000000000900460ff1615612bf257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b3360008181526003602052604090205460ff1615612c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040902054849060ff1615612cdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b610ff4338686613b21565b60005473ffffffffffffffffffffffffffffffffffffffff163314612d6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150de602f913960400191505060405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fdb66dfa9c6b8f5226fe9aac7e51897ae8ee94ac31dc70bb6c9900b2574b707e690600090a250565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314612eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153156032913960400191505060405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907fc67398012c111ce95ecb7429b933096c977380ee6c421175a71a4a4c6c88c06e90600090a250565b600e5473ffffffffffffffffffffffffffffffffffffffff163314613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061510d6024913960400191505060405180910390fd5b61307173ffffffffffffffffffffffffffffffffffffffff8416838361407f565b505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff161561311c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561319d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716600090815260036020526040902054879060ff161561321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61322d8989898989898961410c565b505050505050505050565b60085474010000000000000000000000000000000000000000900460ff168015613265575060125460ff16155b61326e57600080fd5b61327a60048383614dce565b506132ef82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600181527f3200000000000000000000000000000000000000000000000000000000000000602082015291506142b59050565b600f555050601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600a6020908152604080832093909416825291909152205490565b60015474010000000000000000000000000000000000000000900460ff161561340757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613488576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b614327565b5050505050505050505050565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152601060209081526040808320938352929052205460ff1690565b60015474010000000000000000000000000000000000000000900460ff161561366257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff16156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8916600090815260036020526040902054899060ff1615613764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153476025913960400191505060405180910390fd5b61351a8b8b8b8b8b8b8b8b8b614469565b60005473ffffffffffffffffffffffffffffffffffffffff1633146137fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613867576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f586026913960400191505060405180910390fd5b6000546040805173ffffffffffffffffffffffffffffffffffffffff9283168152918316602083015280517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09281900390910190a16138c581613d95565b50565b60025473ffffffffffffffffffffffffffffffffffffffff163314613938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061506b602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b8559190a250565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8316613a46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806151fb6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f7e6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316613b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151d66025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e706023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054811115613c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061501c6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040902054613ca79082613d4c565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600960205260408082209390935590841681522054613ce39082613e26565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526009602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000613d8e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614576565b9392505050565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600a60209081526040808320938616835292905220546130719084908490613e219085613e26565b6139da565b600082820183811015613d8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613ea48585614627565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff87168183018190526060828101889052835180840390910181526080909201909252600f54909190613f1890868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff1614613f9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616600081815260106020908152604080832089845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518792917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a3505050505050565b6130718383613e21846040518060600160405280602581526020016153916025913973ffffffffffffffffffffffffffffffffffffffff808a166000908152600a60209081526040808320938c16835292905220549190614576565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052613071908490614727565b4284101561417b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a207065726d697420697320657870697265640000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80881660008181526011602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c992810192909252818301849052938a1660608201526080810189905260a081019390935260c08084018890528151808503909101815260e09093019052600f5461421e90868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff16146142a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f454950323631323a20696e76616c6964207369676e6174757265000000000000604482015290519081900360640190fd5b6142ab8888886139da565b5050505050505050565b8151602092830120815191830191909120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818601528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b614333898588886147ff565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143c690868686866146b5565b73ffffffffffffffffffffffffffffffffffffffff161461444857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46696174546f6b656e56323a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6144528a866148bf565b61445d8a8a8a613b21565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff881633146144d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806151876025913960400191505060405180910390fd5b6144e3898588886147ff565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff808c16828401819052908b166060830152608082018a905260a0820189905260c0820188905260e080830188905283518084039091018152610100909201909252600f549091906143c690868686866146b5565b6000818484111561461f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145e45781810151838201526020016145cc565b50505050905090810190601f1680156146115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260106020908152604080832084845290915290205460ff16156146b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806152e7602e913960400191505060405180910390fd5b5050565b8051602080830191909120604080517f19010000000000000000000000000000000000000000000000000000000000008185015260228101899052604280820193909352815180820390930183526062019052805191012060009061471c81878787614944565b979650505050505050565b6060614789826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614b419092919063ffffffff16565b805190915015613071578080602001905160208110156147a857600080fd5b5051613071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615295602a913960400191505060405180910390fd5b814211614857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614ebb602b913960400191505060405180910390fd5b8042106148af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6148b98484614627565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260106020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a35050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061526f6026913960400191505060405180910390fd5b8360ff16601b141580156149d757508360ff16601c14155b15614a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f326026913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614a89573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116614b3657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45435265636f7665723a20696e76616c6964207369676e617475726500000000604482015290519081900360640190fd5b90505b949350505050565b6060614b3984846000856060614b5685614d17565b614bc157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614c2b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614bee565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614c8d576040519150601f19603f3d011682016040523d82523d6000602084013e614c92565b606091505b50915091508115614ca6579150614b399050565b805115614cb65780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528651602484015286518793919283926044019190850190808383600083156145e45781810151838201526020016145cc565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614b39575050151592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614d9157805160ff1916838001178555614dbe565b82800160010185558215614dbe579182015b82811115614dbe578251825591602001919060010190614da3565b50614dca929150614e5a565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614e2d578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555614dbe565b82800160010185558215614dbe579182015b82811115614dbe578235825591602001919060010190614e3f565b5b80821115614dca5760008155600101614e5b56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735061757361626c653a206e65772070617573657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e206973206e6f74207965742076616c696446696174546f6b656e3a206275726e20616d6f756e74206e6f742067726561746572207468616e203046696174546f6b656e3a206d696e7420746f20746865207a65726f206164647265737345435265636f7665723a20696e76616c6964207369676e6174757265202776272076616c75654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737346696174546f6b656e3a206e65772070617573657220697320746865207a65726f2061646472657373526573637561626c653a206e6577207265736375657220697320746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e74206e6f742067726561746572207468616e203045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f7420746865206d61737465724d696e746572426c61636b6c69737461626c653a2063616c6c6572206973206e6f742074686520626c61636b6c697374657246696174546f6b656e3a206275726e20616d6f756e7420657863656564732062616c616e636546696174546f6b656e3a2063616c6c6572206973206e6f742061206d696e74657246696174546f6b656e3a206e6577206d61737465724d696e74657220697320746865207a65726f2061646472657373526573637561626c653a2063616c6c6572206973206e6f7420746865207265736375657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636546696174546f6b656e3a206e657720626c61636b6c697374657220697320746865207a65726f206164647265737346696174546f6b656e56323a2063616c6c6572206d7573742062652074686520706179656546696174546f6b656e3a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737346696174546f6b656e3a206d696e7420616d6f756e742065786365656473206d696e746572416c6c6f77616e63655061757361626c653a2063616c6c6572206973206e6f74207468652070617573657245435265636f7665723a20696e76616c6964207369676e6174757265202773272076616c75655361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656446696174546f6b656e3a206e6577206f776e657220697320746865207a65726f206164647265737346696174546f6b656e56323a20617574686f72697a6174696f6e2069732075736564206f722063616e63656c6564426c61636b6c69737461626c653a206e657720626c61636b6c697374657220697320746865207a65726f2061646472657373426c61636b6c69737461626c653a206163636f756e7420697320626c61636b6c697374656446696174546f6b656e56323a20617574686f72697a6174696f6e206973206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203ccc7055acd0820f4e7d094fa75ff2d3b0c27bdd446079aeef6bd6d02c56938e64736f6c634300060c0033", + "sourceMap": "1362:764:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:18:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6725:273;;;;;;;;;;;;;;;;-1:-1:-1;6725:273:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6132:100;;;:::i;:::-;;;;;;;;;;;;;;;;2772:148:32;;;;;;;;;;;;;;;;-1:-1:-1;2772:148:32;;;;:::i;:::-;;7776:536:33;;;;;;;;;;;;;;;;-1:-1:-1;7776:536:33;;;;;;;;;;;;;;;;;;:::i;2466:264:30:-;;;;;;;;;;;;;;;;-1:-1:-1;2466:264:30;;;;:::i;1528:398:41:-;;;;;;;;;;;;;;;;-1:-1:-1;1528:398:41;;;;:::i;10209:239:33:-;;;;;;;;;;;;;;;;-1:-1:-1;10209:239:33;;;;:::i;1612:116:37:-;;;:::i;1699:21:33:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2413:1160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2413:1160:33;;;;;;;;-1:-1:-1;2413:1160:33;;-1:-1:-1;;2413:1160:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2413:1160:33;;;;;;;;-1:-1:-1;2413:1160:33;;-1:-1:-1;;2413:1160:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2413:1160:33;;-1:-1:-1;;;2413:1160:33;;;;;-1:-1:-1;;2413:1160:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1754:27::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1291:31:39;;;:::i;1636:83:30:-;;;:::i;2269:284:40:-;;;;;;;;;;;;;;;;-1:-1:-1;2269:284:40;;;;;;;;;:::i;2802:94:35:-;;;:::i;4097:840:33:-;;;;;;;;;;;;;;;;-1:-1:-1;4097:840:33;;;;;;;;;:::i;10737:538::-;;;;;;;;;;;;;;;;-1:-1:-1;10737:538:33;;:::i;9703:334::-;;;;;;;;;;;;;;;;-1:-1:-1;9703:334:33;;;;;;;;;:::i;2040:84:41:-;;;:::i;2953:254:35:-;;;;;;;;;;;;;;;;-1:-1:-1;2953:254:35;;;;:::i;5782:229:40:-;;;;;;;;;;;;;;;;-1:-1:-1;5782:229:40;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2106:26:35:-;;;:::i;6340:154:33:-;;;;;;;;;;;;;;;;-1:-1:-1;6340:154:33;;;;:::i;1921:107:37:-;;;;;;;;;;;;;;;;-1:-1:-1;1921:107:37;;;;:::i;2068:136:38:-;;;:::i;2623:89:35:-;;;:::i;5318:118:33:-;;;;;;;;;;;;;;;;-1:-1:-1;5318:118:33;;;;:::i;2355:79:34:-;;;:::i;1673:20:33:-;;;:::i;2079:21:35:-;;;:::i;1787:137:38:-;;;:::i;2766:284:40:-;;;;;;;;;;;;;;;;-1:-1:-1;2766:284:40;;;;;;;;;:::i;8487:260:33:-;;;;;;;;;;;;;;;;-1:-1:-1;8487:260:33;;;;;;;;;:::i;11281:303::-;;;;;;;;;;;;;;;;-1:-1:-1;11281:303:33;;;;:::i;5543:104::-;;;;;;;;;;;;;;;;-1:-1:-1;5543:104:33;;;;:::i;2926:299:32:-;;;;;;;;;;;;;;;;-1:-1:-1;2926:299:32;;;;:::i;2161:177:30:-;;;;;;;;;;;;;;;;-1:-1:-1;2161:177:30;;;;;;;;;;;;;;;;;;:::i;1365:26:32:-;;;:::i;6439:309:40:-;;;;;;;;;;;;;;;;-1:-1:-1;6439:309:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1758:298::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1758:298:40;;-1:-1:-1;1758:298:40;-1:-1:-1;1758:298:40;:::i;2285:130:38:-;;;:::i;5898:175:33:-;;;;;;;;;;;;;;;;-1:-1:-1;5898:175:33;;;;;;;;;;;:::i;3621:523:40:-;;;;;;;;;;;;;;;;-1:-1:-1;3621:523:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1726:22:33:-;;;:::i;3088:183:38:-;;;;;;;;;;;;;;;;-1:-1:-1;3088:183:38;;;;;;;;;:::i;4883:521:40:-;;;;;;;;;;;;;;;;-1:-1:-1;4883:521:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2945:269:34:-;;;;;;;;;;;;;;;;-1:-1:-1;2945:269:34;;;;:::i;2500:143:32:-;;;;;;;;;;;;;;;;-1:-1:-1;2500:143:32;;;;:::i;2277:115::-;;;;;;;;;;;;;;;;-1:-1:-1;2277:115:32;;;;:::i;1649:18:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6725:273::-;2286:6:35;;6914:4:33;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6853:10:33::1;2064:21:32;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;6888:7:33;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6934:36:33::3;6943:10;6955:7;6964:5;6934:8;:36::i;:::-;-1:-1:-1::0;6987:4:33::3;::::0;6725:273;-1:-1:-1;;;;6725:273:33:o;6132:100::-;6213:12;;6132:100;:::o;2772:148:32:-;1771:11;;;;1757:10;:25;1736:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2846:21:::1;::::0;::::1;2870:5;2846:21:::0;;;:11:::1;:21;::::0;;;;;:29;;;::::1;::::0;;2890:23;::::1;::::0;2870:5;2890:23:::1;2772:148:::0;:::o;7776:536:33:-;2286:6:35;;8033:4:33;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7948:10:33::1;2064:21:32;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;7983:4:33;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::3;::::0;::::3;;::::0;;;:11:::3;:21;::::0;;;;;8012:2:33;;2064:21:32::3;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8083:13:33::4;::::0;::::4;;::::0;;;:7:::4;:13;::::0;;;;;;;8097:10:::4;8083:25:::0;;;;;;;;8074:34;::::4;;8053:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8184:26;8194:4;8200:2;8204:5;8184:9;:26::i;:::-;8248:13;::::0;::::4;;::::0;;;:7:::4;:13;::::0;;;;;;;8262:10:::4;8248:25:::0;;;;;;;;:36:::4;::::0;8278:5;8248:29:::4;:36::i;:::-;8220:13;::::0;::::4;;::::0;;;:7:::4;:13;::::0;;;;;;;8234:10:::4;8220:25:::0;;;;;;;:64;8301:4:::4;::::0;-1:-1:-1;2158:1:32::3;::::2;2323::35::1;7776:536:33::0;;;;;:::o;2466:264:30:-;2713:6:34;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:24:30::1;::::0;::::1;2538:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2661:8;:21:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2697:26:::1;::::0;::::1;::::0;-1:-1:-1;;2697:26:30::1;2466:264:::0;:::o;1528:398:41:-;1652:19;;;;;:24;1644:33;;;;;;1728:4;1688:20;1711:23;;;:8;:23;;;;;;1748:16;;1744:99;;1780:52;1798:4;1805:12;1819;1780:9;:52::i;:::-;-1:-1:-1;;1872:4:41;1852:26;;;;:11;:26;;;;;:33;;;;;;1881:4;1852:33;;;;1896:19;:23;;;;;1918:1;1896:23;;;1528:398::o;10209:239:33:-;5104:12;;10306:4;;5104:12;;5090:10;:26;5069:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10326:15:::1;::::0;::::1;10344:5;10326:15:::0;;;:7:::1;:15;::::0;;;;;;;:23;;;::::1;::::0;;10359:13:::1;:21:::0;;;;;;:25;;;10399:21;::::1;::::0;10344:5;10399:21:::1;-1:-1:-1::0;10437:4:33::1;10209:239:::0;;;:::o;1612:116:37:-;1662:66;1612:116;:::o;1699:21:33:-;;;;;;:::o;2413:1160::-;2717:11;;;;;;;2716:12;2708:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2806:29;;;2785:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2939:23;;;2918:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3060:28;;;3039:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3191:22;;;3170:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3290:16;;;;:4;;:16;;;;;:::i;:::-;-1:-1:-1;3316:20:33;;;;:6;;:20;;;;;:::i;:::-;-1:-1:-1;3346:24:33;;;;:8;;:24;;;;;:::i;:::-;-1:-1:-1;3380:8:33;:24;;;;;;;;;;3414:12;:30;;;;;;;;;;;;;;;;;-1:-1:-1;3454:18:33;;;;;;;;;;3482:11;:28;;;;;;;;;;;;;;3520:18;3529:8;3520;:18::i;:::-;-1:-1:-1;;3548:11:33;:18;;;;;;;;-1:-1:-1;;;;;;2413:1160:33:o;1754:27::-;;;;;;:::o;1291:31:39:-;;;;:::o;1636:83:30:-;1704:8;;;;1636:83;:::o;2269:284:40:-;2286:6:35;;2455:4:40;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2394:10:40::1;2064:21:32;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;2429:7:40;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2475:50:40::3;2494:10;2506:7;2515:9;2475:18;:50::i;2802:94:35:-:0;2473:6;;;;2459:10;:20;2451:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2851:6:::1;:14:::0;;;::::1;::::0;;2880:9:::1;::::0;::::1;::::0;2860:5:::1;::::0;2880:9:::1;2802:94::o:0;4097:840:33:-;2286:6:35;;4280:4:33;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3708:10:33::1;3700:19;::::0;;;:7:::1;:19;::::0;;;;;::::1;;3692:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4223:10:::2;2064:21:32;::::0;;;:11:::2;:21;::::0;;;;;::::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::3;::::0;::::3;;::::0;;;:11:::3;:21;::::0;;;;;4258:3:33;;2064:21:32::3;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4308:17:33::4;::::0;::::4;4300:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4393:1;4383:7;:11;4375:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4496:10;4451:28;4482:25:::0;;;:13:::4;:25;::::0;;;;;4538:31;;::::4;;4517:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4667:12;::::0;:25:::4;::::0;4684:7;4667:16:::4;:25::i;:::-;4652:12;:40:::0;4718:13:::4;::::0;::::4;;::::0;;;:8:::4;:13;::::0;;;;;:26:::4;::::0;4736:7;4718:17:::4;:26::i;:::-;4702:13;::::0;::::4;;::::0;;;:8:::4;:13;::::0;;;;:42;4782:33:::4;:20:::0;4807:7;4782:24:::4;:33::i;:::-;4768:10;4754:25;::::0;;;:13:::4;:25;::::0;;;;;;;;:61;;;;4830:30;;;;;;;4754:25:::4;4830:30:::0;::::4;::::0;::::4;::::0;;;;;;::::4;4875:34;::::0;;;;;;;::::4;::::0;::::4;::::0;4892:1:::4;::::0;4875:34:::4;::::0;;;;::::4;::::0;;::::4;-1:-1:-1::0;4926:4:33::4;::::0;4097:840;-1:-1:-1;;;;;4097:840:33:o;10737:538::-;2286:6:35;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3708:10:33::1;3700:19;::::0;;;:7:::1;:19;::::0;;;;;::::1;;3692:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10850:10:::2;2064:21:32;::::0;;;:11:::2;:21;::::0;;;;;::::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10903:10:33::3;10876:15;10894:20:::0;;;:8:::3;:20;::::0;;;;;10932:11;10924:65:::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11018:7;11007;:18;;10999:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11094:12;::::0;:25:::3;::::0;11111:7;11094:16:::3;:25::i;:::-;11079:12;:40:::0;11152:20:::3;:7:::0;11164;11152:11:::3;:20::i;:::-;11138:10;11129:20;::::0;;;:8:::3;:20;::::0;;;;;;;;:43;;;;11187:25;;;;;;;11138:10;;11187:25:::3;::::0;;;;;;;::::3;11227:41;::::0;;;;;;;11256:1:::3;::::0;11236:10:::3;::::0;11227:41:::3;::::0;;;;::::3;::::0;;::::3;2158:1:32;3767::33::2;10737:538:::0;:::o;9703:334::-;2286:6:35;;9854:4:33;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5104:12:33::1;::::0;::::1;;5090:10;:26;5069:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9874:15:::2;::::0;::::2;;::::0;;;:7:::2;:15;::::0;;;;;;;:22;;;::::2;9892:4;9874:22;::::0;;9906:13:::2;:21:::0;;;;;;:43;;;9964:45;;;;;;;::::2;::::0;;;;;;;;::::2;-1:-1:-1::0;10026:4:33::2;9703:334:::0;;;;:::o;2040:84:41:-;2107:10;;;;;;;;;;;;;;;;;2040:84;:::o;2953:254:35:-;2713:6:34;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:24:35::1;::::0;::::1;3024:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3145:6;:19:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;3179:21:::1;::::0;3193:6;::::1;::::0;3179:21:::1;::::0;-1:-1:-1;;3179:21:35::1;2953:254:::0;:::o;5782:229:40:-;2286:6:35;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5956:48:40::1;5977:10;5989:5;5996:1;5999;6002;5956:20;:48::i;:::-;5782:229:::0;;;;;:::o;2106:26:35:-;;;;;;;;;:::o;6340:154:33:-;6470:17;;6440:7;6470:17;;;:8;:17;;;;;;;6340:154::o;1921:107:37:-;2001:20;;1975:7;2001:20;;;:13;:20;;;;;;;1921:107::o;2068:136:38:-;2138:66;2068:136;:::o;2623:89:35:-;2473:6;;;;2459:10;:20;2451:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2679:4:::1;2670:13:::0;;;::::1;::::0;::::1;::::0;;2698:7:::1;::::0;::::1;::::0;2670:13;;2698:7:::1;2623:89::o:0;5318:118:33:-;5408:21;;5382:7;5408:21;;;:13;:21;;;;;;;5318:118::o;2355:79:34:-;2395:7;2421:6;;;2355:79;:::o;1673:20:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2079:21:35;;;;;;:::o;1787:137:38:-;1858:66;1787:137;:::o;2766:284:40:-;2286:6:35;;2952:4:40;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2891:10:40::1;2064:21:32;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;2926:7:40;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2972:50:40::3;2991:10;3003:7;3012:9;2972:18;:50::i;8487:260:33:-:0;2286:6:35;;8667:4:33;;2286:6:35;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8611:10:33::1;2064:21:32;::::0;;;:11:::1;:21;::::0;;;;;::::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;8646:2:33;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8687:32:33::3;8697:10;8709:2;8713:5;8687:9;:32::i;11281:303::-:0;2713:6:34;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11385:30:33::1;::::0;::::1;11364:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11498:12;:31:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;11544:33:::1;::::0;11564:12;::::1;::::0;11544:33:::1;::::0;-1:-1:-1;;11544:33:33::1;11281:303:::0;:::o;5543:104::-;5624:16;;5601:4;5624:16;;;:7;:16;;;;;;;;;5543:104::o;2926:299:32:-;2713:6:34;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3028:29:32::1;::::0;::::1;3007:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3143:11;:29:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;3187:31:::1;::::0;3206:11;::::1;::::0;3187:31:::1;::::0;-1:-1:-1;;3187:31:32::1;2926:299:::0;:::o;2161:177:30:-;1867:8;;;;1853:10;:22;1845:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:38:::1;:26;::::0;::::1;2320:2:::0;2324:6;2293:26:::1;:38::i;:::-;2161:177:::0;;;:::o;1365:26:32:-;;;;;;:::o;6439:309:40:-;2286:6:35;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:32::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;6651:5:40;;2064:21:32::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;6673:7:40;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6692:49:40::3;6700:5;6707:7;6716:5;6723:8;6733:1;6736;6739;6692:7;:49::i;:::-;2158:1:32::2;2323::35::1;6439:309:40::0;;;;;;;:::o;1758:298::-;1883:11;;;;;;;:39;;;;-1:-1:-1;1898:19:40;;;;:24;1883:39;1875:48;;;;;;1933:14;:4;1940:7;;1933:14;:::i;:::-;;1976:40;2003:7;;1976:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1976:40:40;;;;;;;;;;;;;;;;;;-1:-1:-1;1976:26:40;;-1:-1:-1;1976:40:40:i;:::-;1957:16;:59;-1:-1:-1;;2026:19:40;:23;;;;2048:1;2026:23;;;1758:298::o;2285:130:38:-;2349:66;2285:130;:::o;5898:175:33:-;6043:14;;;;6013:7;6043:14;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;5898:175::o;3621:523:40:-;2286:6:35;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:32::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;3900:4:40;;2064:21:32::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;3921:2:40;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3935:202:40::3;3975:4;3993:2;4009:5;4028:10;4052:11;4077:5;4096:1;4111;4126;3935:26;:202::i;:::-;2158:1:32::2;2323::35::1;3621:523:40::0;;;;;;;;;:::o;1726:22:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3088:183:38;3225:32;;;;;3198:4;3225:32;;;:20;:32;;;;;;;;:39;;;;;;;;;;;3088:183::o;4883:521:40:-;2286:6:35;;;;;;;2285:7;2277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:32::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;5161:4:40;;2064:21:32::1;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:21:::2;::::0;::::2;;::::0;;;:11:::2;:21;::::0;;;;;5182:2:40;;2064:21:32::2;;2063:22;2042:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5196:201:40::3;5235:4;5253:2;5269:5;5288:10;5312:11;5337:5;5356:1;5371;5386;5196:25;:201::i;2945:269:34:-:0;2713:6;;;;2699:10;:20;2691:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3040:22:::1;::::0;::::1;3019:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:6;::::0;3141:38:::1;::::0;;3162:6:::1;::::0;;::::1;3141:38:::0;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;3189:18;3198:8;3189;:18::i;:::-;2945:269:::0;:::o;2500:143:32:-;1771:11;;;;1757:10;:25;1736:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2572:21:::1;::::0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:28;;;::::1;2596:4;2572:28;::::0;;2615:21;::::1;::::0;2572;2615::::1;2500:143:::0;:::o;2277:115::-;2364:21;;2341:4;2364:21;;;:11;:21;;;;;;;;;2277:115::o;7196:363:33:-;7327:19;;;7319:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7405:21;;;7397:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7475:14;;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;:31;;;7521;;;;;;;;;;;;;;;;;7196:363;;;:::o;8931:526::-;9057:18;;;9049:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9135:16;;;9127:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9231:14;;;;;;;:8;:14;;;;;;9222:23;;;9201:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9337:14;;;;;;;:8;:14;;;;;;:25;;9356:5;9337:18;:25::i;:::-;9320:14;;;;;;;;:8;:14;;;;;;:42;;;;9387:12;;;;;;;:23;;9404:5;9387:16;:23::i;:::-;9372:12;;;;;;;;:8;:12;;;;;;;;;:38;;;;9425:25;;;;;;;9372:12;;9425:25;;;;;;;;;;;;;8931:526;;;:::o;1321:134:42:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;1321:134;-1:-1:-1;;;1321:134:42:o;2493:79:34:-;2548:6;:17;;;;;;;;;;;;;;;2493:79::o;6981:208:40:-;7143:14;;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;7118:64;;7127:5;;7134:7;;7143:38;;7171:9;7143:27;:38::i;:::-;7118:8;:64::i;874:176:42:-;932:7;963:5;;;986:6;;;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6532:611:38;6693:46;6721:10;6733:5;6693:27;:46::i;:::-;6770:106;;;2349:66;6770:106;;;;;;;;;;;;;6750:17;6770:106;;;;;;;;;;;;;;;;;;;;;;;6922:16;;6770:106;;;6907:47;;6940:1;6943;6946;6770:106;6907:14;:47::i;:::-;:61;;;6886:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7035:32;;;;;;;:20;:32;;;;;;;;:39;;;;;;;;;:46;;;;7077:4;7035:46;;;7096:40;7068:5;;7035:32;7096:40;;;6532:611;;;;;;:::o;7422:341:40:-;7559:197;7581:5;7600:7;7621:125;7666:9;7621:125;;;;;;;;;;;;;;;;;:14;;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;:125;:27;:125::i;696:175:44:-;805:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;828:23;805:58;;;778:86;;798:5;;778:19;:86::i;2459:637:37:-;2673:3;2661:8;:15;;2653:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2854:20;;;;2766:15;2854:20;;;:13;:20;;;;;;;;;:22;;;;;;;;2742:166;;1662:66;2742:166;;;;;;;;;;;;;;;;2722:17;2742:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2954:16;;2939:47;;2972:1;2975;2978;2742:166;2939:14;:47::i;:::-;:56;;;2918:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3058:31;3067:5;3074:7;3083:5;3058:8;:31::i;:::-;2459:637;;;;;;;;:::o;1501:686:28:-;2015:22;;;;;;;2059:25;;;;;;;;;1776:390;;;1927:66;1776:390;;;;;;;;;;;;;;;;;;1702:9;1776:390;;;;2143:4;1776:390;;;;;;;;;;;;;;;;;;;;;;;;1749:431;;;;;;1501:686::o;3842:780:38:-;4103:64;4130:4;4136:5;4143:10;4155:11;4103:26;:64::i;:::-;4198:191;;;1858:66;4198:191;;;;;;;;;;;;;;;;;4178:17;4198:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4435:16;;4198:191;;;4420:47;;4453:1;4456;4459;4198:191;4420:14;:47::i;:::-;:55;;;4399:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:37;4567:4;4573:5;4542:24;:37::i;:::-;4589:26;4599:4;4605:2;4609:5;4589:9;:26::i;:::-;3842:780;;;;;;;;;;:::o;5361:854::-;5629:16;;;5635:10;5629:16;5621:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5697:64;5724:4;5730:5;5737:10;5749:11;5697:26;:64::i;:::-;5792:190;;;2138:66;5792:190;;;;;;;;;;;;;;;;;5772:17;5792:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6028:16;;5792:190;;;6013:47;;6046:1;6049;6052;5792:190;6013:14;:47::i;1746:187:42:-;1832:7;1867:12;1859:6;;;;1851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:42;;;1746:187::o;7322:255:38:-;7459:32;;;;;;;:20;:32;;;;;;;;:39;;;;;;;;;;;7458:40;7437:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7322:255;;:::o;2572:434:28:-;2898:26;;;;;;;;;;2803:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2780:168;;;;;2744:7;;2965:34;2780:168;2991:1;2994;2997;2965:17;:34::i;:::-;2958:41;2572:434;-1:-1:-1;;;;;;;2572:434:28:o;2959:751:44:-;3378:23;3404:69;3432:4;3404:69;;;;;;;;;;;;;;;;;3412:5;3404:27;;;;:69;;;;;:::i;:::-;3487:17;;3378:95;;-1:-1:-1;3487:21:44;3483:221;;3627:10;3616:30;;;;;;;;;;;;;;;-1:-1:-1;3616:30:44;3608:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:419:38;8103:10;8097:3;:16;8076:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:11;8200:3;:17;8192:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8269:46;8297:10;8309:5;8269:27;:46::i;:::-;7903:419;;;;:::o;8493:203::-;8592:32;;;;;;;:20;:32;;;;;;;;:39;;;;;;;;;:46;;;;8634:4;8592:46;;;8653:36;8625:5;;8592:32;8653:36;;;8493:203;;:::o;1872:1556:27:-;1997:7;2932:66;2907:91;;2890:192;;;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2890:192;3096:1;:7;;3101:2;3096:7;;:18;;;;;3107:1;:7;;3112:2;3107:7;;3096:18;3092:97;;;3130:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3092:97;3283:14;3300:26;3310:6;3318:1;3321;3324;3300:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3300:26:27;;;;;;-1:-1:-1;;3344:20:27;;;3336:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3415:6;-1:-1:-1;1872:1556:27;;;;;;;:::o;3770:194:45:-;3873:12;3904:53;3927:6;3935:4;3941:1;3944:12;5247;5279:18;5290:6;5279:10;:18::i;:::-;5271:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5402:12;5416:23;5443:6;:11;;5463:8;5474:4;5443:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5401:78;;;;5493:7;5489:580;;;5523:10;-1:-1:-1;5516:17:45;;-1:-1:-1;5516:17:45;5489:580;5634:17;;:21;5630:429;;5892:10;5886:17;5952:15;5939:10;5935:2;5931:19;5924:44;5841:145;6024:20;;;;;;;;;;;;;;;;;;;;6031:12;;6024:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:610;778:4;1239:20;;1084:66;1278:23;;;;;;:42;;-1:-1:-1;;1305:15:45;;;1270:51;-1:-1:-1;;718:610:45:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "methodIdentifiers": { + "CANCEL_AUTHORIZATION_TYPEHASH()": "d9169487", + "DOMAIN_SEPARATOR()": "3644e515", + "PERMIT_TYPEHASH()": "30adf81f", + "RECEIVE_WITH_AUTHORIZATION_TYPEHASH()": "7f2eecc3", + "TRANSFER_WITH_AUTHORIZATION_TYPEHASH()": "a0cc6a68", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "authorizationState(address,bytes32)": "e94a0102", + "balanceOf(address)": "70a08231", + "blacklist(address)": "f9f92be4", + "blacklister()": "bd102430", + "burn(uint256)": "42966c68", + "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)": "5a049a70", + "configureMinter(address,uint256)": "4e44d956", + "currency()": "e5a6b10f", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "increaseAllowance(address,uint256)": "39509351", + "initialize(string,string,string,uint8,address,address,address,address)": "3357162b", + "initializeV2(string)": "d608ea64", + "initializeV2_1(address)": "2fc81e09", + "isBlacklisted(address)": "fe575a87", + "isMinter(address)": "aa271e1a", + "masterMinter()": "35d99f35", + "mint(address,uint256)": "40c10f19", + "minterAllowance(address)": "8a6db9c3", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "owner()": "8da5cb5b", + "pause()": "8456cb59", + "paused()": "5c975abb", + "pauser()": "9fd0506d", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": "ef55bec6", + "removeMinter(address)": "3092afd5", + "rescueERC20(address,address,uint256)": "b2118a8d", + "rescuer()": "38a63183", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "transferOwnership(address)": "f2fde38b", + "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": "e3ee160e", + "unBlacklist(address)": "1a895266", + "unpause()": "3f4ba83a", + "updateBlacklister(address)": "ad38bf22", + "updateMasterMinter(address)": "aa20e1e4", + "updatePauser(address)": "554bab3c", + "updateRescuer(address)": "2ab60045", + "version()": "54fd4d50" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"AuthorizationCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"AuthorizationUsed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"Blacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newBlacklister\",\"type\":\"address\"}],\"name\":\"BlacklisterChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newMasterMinter\",\"type\":\"address\"}],\"name\":\"MasterMinterChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minterAllowedAmount\",\"type\":\"uint256\"}],\"name\":\"MinterConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldMinter\",\"type\":\"address\"}],\"name\":\"MinterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Pause\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PauserChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"RescuerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"UnBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpause\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CANCEL_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECEIVE_WITH_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRANSFER_WITH_AUTHORIZATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"}],\"name\":\"authorizationState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"blacklist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blacklister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"cancelAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minterAllowedAmount\",\"type\":\"uint256\"}],\"name\":\"configureMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currency\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"decrement\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"increment\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenCurrency\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"newMasterMinter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newPauser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newBlacklister\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"initializeV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lostAndFound\",\"type\":\"address\"}],\"name\":\"initializeV2_1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"masterMinter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"minterAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validBefore\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"receiveWithAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rescuer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validAfter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validBefore\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"nonce\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"transferWithAuthorization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unBlacklist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newBlacklister\",\"type\":\"address\"}],\"name\":\"updateBlacklister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newMasterMinter\",\"type\":\"address\"}],\"name\":\"updateMasterMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPauser\",\"type\":\"address\"}],\"name\":\"updatePauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRescuer\",\"type\":\"address\"}],\"name\":\"updateRescuer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"owner\":\"Token owner's address\",\"spender\":\"Spender's address\"},\"returns\":{\"_0\":\"Allowance amount\"}},\"approve(address,uint256)\":{\"params\":{\"spender\":\"Spender's address\",\"value\":\"Allowance amount\"},\"returns\":{\"_0\":\"True if successful\"}},\"authorizationState(address,bytes32)\":{\"details\":\"Nonces are randomly generated 32-byte data unique to the authorizer's address\",\"params\":{\"authorizer\":\"Authorizer's address\",\"nonce\":\"Nonce of the authorization\"},\"returns\":{\"_0\":\"True if the nonce is used\"}},\"balanceOf(address)\":{\"details\":\"Get token balance of an account\",\"params\":{\"account\":\"address The account\"}},\"blacklist(address)\":{\"details\":\"Adds account to blacklist\",\"params\":{\"_account\":\"The address to blacklist\"}},\"burn(uint256)\":{\"details\":\"allows a minter to burn some of its own tokens Validates that caller is a minter and that sender is not blacklisted amount is less than or equal to the minter's account balance\",\"params\":{\"_amount\":\"uint256 the amount of tokens to be burned\"}},\"cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)\":{\"details\":\"Works only if the authorization is not yet used.\",\"params\":{\"authorizer\":\"Authorizer's address\",\"nonce\":\"Nonce of the authorization\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"v\":\"v of the signature\"}},\"configureMinter(address,uint256)\":{\"details\":\"Function to add/update a new minter\",\"params\":{\"minter\":\"The address of the minter\",\"minterAllowedAmount\":\"The minting amount allowed for the minter\"},\"returns\":{\"_0\":\"True if the operation was successful.\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"decrement\":\"Amount of decrease in allowance\",\"spender\":\"Spender's address\"},\"returns\":{\"_0\":\"True if successful\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"increment\":\"Amount of increase in allowance\",\"spender\":\"Spender's address\"},\"returns\":{\"_0\":\"True if successful\"}},\"initializeV2(string)\":{\"params\":{\"newName\":\"New token name\"}},\"initializeV2_1(address)\":{\"params\":{\"lostAndFound\":\"The address to which the locked funds are sent\"}},\"isBlacklisted(address)\":{\"details\":\"Checks if account is blacklisted\",\"params\":{\"_account\":\"The address to check\"}},\"isMinter(address)\":{\"details\":\"Checks if account is a minter\",\"params\":{\"account\":\"The address to check\"}},\"mint(address,uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"_amount\":\"The amount of tokens to mint. Must be less than or equal to the minterAllowance of the caller.\",\"_to\":\"The address that will receive the minted tokens.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"minterAllowance(address)\":{\"details\":\"Get minter allowance for an account\",\"params\":{\"minter\":\"The address of the minter\"}},\"nonces(address)\":{\"params\":{\"owner\":\"Token owner's address (Authorizer)\"},\"returns\":{\"_0\":\"Next nonce\"}},\"owner()\":{\"details\":\"Tells the address of the owner\",\"returns\":{\"_0\":\"the address of the owner\"}},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"Expiration time, seconds since the epoch\",\"owner\":\"Token owner's address (Authorizer)\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"spender\":\"Spender's address\",\"v\":\"v of the signature\",\"value\":\"Amount of allowance\"}},\"receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"details\":\"This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks.\",\"params\":{\"from\":\"Payer's address (Authorizer)\",\"nonce\":\"Unique nonce\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"to\":\"Payee's address\",\"v\":\"v of the signature\",\"validAfter\":\"The time after which this is valid (unix time)\",\"validBefore\":\"The time before which this is valid (unix time)\",\"value\":\"Amount to be transferred\"}},\"removeMinter(address)\":{\"details\":\"Function to remove a minter\",\"params\":{\"minter\":\"The address of the minter to remove\"},\"returns\":{\"_0\":\"True if the operation was successful.\"}},\"rescueERC20(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to withdraw\",\"to\":\"Recipient address\",\"tokenContract\":\"ERC20 token contract address\"}},\"rescuer()\":{\"returns\":{\"_0\":\"Rescuer's address\"}},\"totalSupply()\":{\"details\":\"Get totalSupply of token\"},\"transfer(address,uint256)\":{\"params\":{\"to\":\"Payee's address\",\"value\":\"Transfer amount\"},\"returns\":{\"_0\":\"True if successful\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"from\":\"Payer's address\",\"to\":\"Payee's address\",\"value\":\"Transfer amount\"},\"returns\":{\"_0\":\"True if successful\"}},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}},\"transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"params\":{\"from\":\"Payer's address (Authorizer)\",\"nonce\":\"Unique nonce\",\"r\":\"r of the signature\",\"s\":\"s of the signature\",\"to\":\"Payee's address\",\"v\":\"v of the signature\",\"validAfter\":\"The time after which this is valid (unix time)\",\"validBefore\":\"The time before which this is valid (unix time)\",\"value\":\"Amount to be transferred\"}},\"unBlacklist(address)\":{\"details\":\"Removes account from blacklist\",\"params\":{\"_account\":\"The address to remove from the blacklist\"}},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"},\"updatePauser(address)\":{\"details\":\"update the pauser role\"},\"updateRescuer(address)\":{\"params\":{\"newRescuer\":\"New rescuer's address\"}},\"version()\":{\"returns\":{\"_0\":\"Version string\"}}},\"title\":\"FiatToken V2.1\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address)\":{\"notice\":\"Amount of remaining tokens spender is allowed to transfer on behalf of the token owner\"},\"approve(address,uint256)\":{\"notice\":\"Set spender's allowance over the caller's tokens to be a given value.\"},\"authorizationState(address,bytes32)\":{\"notice\":\"Returns the state of an authorization\"},\"cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)\":{\"notice\":\"Attempt to cancel an authorization\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decrease the allowance by a given decrement\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increase the allowance by a given increment\"},\"initializeV2(string)\":{\"notice\":\"Initialize v2\"},\"initializeV2_1(address)\":{\"notice\":\"Initialize v2.1\"},\"nonces(address)\":{\"notice\":\"Nonces for permit\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Update allowance with a signed permit\"},\"receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"notice\":\"Receive a transfer with a signed authorization from the payer\"},\"rescueERC20(address,address,uint256)\":{\"notice\":\"Rescue ERC20 tokens locked up in this contract.\"},\"rescuer()\":{\"notice\":\"Returns current rescuer\"},\"transfer(address,uint256)\":{\"notice\":\"Transfer tokens from the caller\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfer tokens by spending allowance\"},\"transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)\":{\"notice\":\"Execute a transfer with a signed authorization\"},\"updateRescuer(address)\":{\"notice\":\"Assign the rescuer role to a given address.\"},\"version()\":{\"notice\":\"Version string for the EIP712 domain separator\"}},\"notice\":\"ERC20 Token backed by fiat reserves, version 2.1\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2_1.sol\":\"FiatTokenV2_1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000000},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/FiatTokenV2_1/centre-tokens/contracts/util/ECRecover.sol\":{\"keccak256\":\"0xb4e623304daaf25e40292e60a814ae60a60745d10003f1881a36be763dbc09aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6ef83bd777bfb13b0968b9cadd971216a95150427fa5d6b50f984e4b7268d31\",\"dweb:/ipfs/QmZS5TeT6n7tM36PBdYZNJW3wgYgAZE9zMcouNs4FuEDKj\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/util/EIP712.sol\":{\"keccak256\":\"0x39319612a776e16f355d5ab71575b68c427a058839544f032733df228b5debd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d5ac6450e881a4275f4b5baf7b5d6e15c0a0c7c2039edf39f106e0b821c9829d\",\"dweb:/ipfs/QmShHneDasAXQzjA8iKWXk3sbZgxbQGPiMQ1MUpJGF64N8\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1.1/FiatTokenV1_1.sol\":{\"keccak256\":\"0xa5f8fc4b5e739ddcafe52dd76ebb7605e09eb9d52a5c1d77e48dd88e83106308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24543f05d3eb4768ee9798768cb6c9ce8b88d30606a5def83118ad1ba9382ac8\",\"dweb:/ipfs/QmYREtrAvoxn6DKXehJPP1pbs8vciqMvRHVk2eFKLtmKVT\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1.1/Rescuable.sol\":{\"keccak256\":\"0x8c02b979e06aa4133c93e47c743ebebd56d120dd10aeaf56b2da2a36f06b68b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d73d6f98bd494500a414ca616eabe9ad6e99f283e00a471bddd7f8ac5825334\",\"dweb:/ipfs/QmXesAuMcXJiG3r2og7adeT5wBcY6ntFncVUFjNPfEhJC9\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1/AbstractFiatTokenV1.sol\":{\"keccak256\":\"0xb81ae053cff8eced79f29c3542b7693763ed2bfdd9a25d6b150439d21b3fa57d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e16ce40aef6188334cd0dbc2e3aead22c1f89101d782df821821061d5efa891b\",\"dweb:/ipfs/QmW2WnaMTzpUityk5Mpv7FFdKCh2CeueJaDneoABGVowVm\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1/Blacklistable.sol\":{\"keccak256\":\"0xc4ff3bfe34c8ecf9f2c333f8373c111fdd4640ed15677c4891bb9cf3cbff9554\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91cfc583d47eda58f356783698a130c1c6adf797c4ba55461598c0bac8159f33\",\"dweb:/ipfs/QmeWfmhcwUE7H5Ge8TVhWkJ4kDwDY8a4kExMaufukLqsh1\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1/FiatTokenV1.sol\":{\"keccak256\":\"0xaed130ecb4b0714a887dccaaff61321915f2afbf0839ee8af10673507a010471\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3961d2ed8f4f2c69cc4ce0fdb2346b8bd5c09d644627704181fa03b82231ff31\",\"dweb:/ipfs/Qmb7sdix44isYUaD4TD4QsVmR8d86NN4koiFE6SsjRagGQ\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1/Ownable.sol\":{\"keccak256\":\"0x654e645d6d09616fde908eba4d29abf318fede7e8cc3e31705203fc1d2599217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fce1ff1458e817aaa5f87d3ef4207fbbdeb25e548d460f47d9cca4fb80175390\",\"dweb:/ipfs/QmfY7E5xfTyeiuU2nDXEdYfy5LKjGRh69fuKK4HV6YTv9v\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v1/Pausable.sol\":{\"keccak256\":\"0x873ce4f17eb8694cd0420ef6682c2da54290fe6e243f21ead37e90f211ac91b6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7df712210c8bb5fc08e0ff7b684ee4035530cd67b21f20d81766a17407606a3c\",\"dweb:/ipfs/QmYPFYAw4W8VdcBdknLhqfNfiUuGhGJD3ZZ7rAjrKjhtXd\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v2/AbstractFiatTokenV2.sol\":{\"keccak256\":\"0x5d393663d48e4bbb730630c117c2b703dd3c9968833e66dbbb18c92eab207afe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b0ce642b7ab095d970e3e5d031e5de6b2a98a7ddd20fd94123a42ed81e21757e\",\"dweb:/ipfs/QmbPixwbbpHS7zBRcJV1idzhaSd1SPRm3LjpywxFnXxR8A\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v2/EIP2612.sol\":{\"keccak256\":\"0x8ed169be2f6423b8e7002241857d719e9eb9545f5dbad5209a8f6445132bdbe0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0646f70d57d072c0569ccbd9b02c922bbb183e6052f94c241c4fef9a267e73bc\",\"dweb:/ipfs/QmZK3D3qqTMenkdc5EpZSiyxETMpTVpRke61uuRH75ctVk\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v2/EIP3009.sol\":{\"keccak256\":\"0x74a81d5b1682cb6716f60c27254e8a15463797e1772b37c884390eb9c7985070\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d3a6e220c2b8aab8c5070312cc9320ce2b79955b0bddafd99e5feec13851016\",\"dweb:/ipfs/QmQwc2nZtMKyDcGT8Scnv1R4ThP2Va9trUHnRiqMz4G2WN\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v2/EIP712Domain.sol\":{\"keccak256\":\"0x56d8c0259e7f0baa5bb0d0d94810f25d001fb2dbe4eaf54dbe369ba0f1b8fd2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9356cfa1d42bfb8c4f84a3db535ab75b2088975bfbda30834d79c3eb678047ea\",\"dweb:/ipfs/QmSBeiLwNGEC4vnr82EWQinGZFZemxKwxvwLZ9bu48FWF2\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2.sol\":{\"keccak256\":\"0x59654e02023dd9d712bb160545854eae6cba80d707a547f6abfaadcd830af2e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e22c43b71ea393e9910bd91a355f711803d6971be25e9dabc702aaefac2a597f\",\"dweb:/ipfs/QmRjopnHgyKh1mXBDETBaXaom3NJSaacGEJweB5b28BdSE\"]},\"src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2_1.sol\":{\"keccak256\":\"0x6328091a86a3ab02471fba7ff3bf44200f6daf9f0ff3b61fe4043ee14cc1a4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4fed880853c249f6f812ddfa37bf99633b688f0bfd734e03372e4523f6cd2af9\",\"dweb:/ipfs/QmUMD1SvykvTJ8jmAjnsW13Yo3Wt6KH5dfKRPKCRogLki8\"]},\"src/FiatTokenV2_1/openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]},\"src/FiatTokenV2_1/openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"src/FiatTokenV2_1/openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d7de652204c2ee291a61aa984103dfc7ae4392d651fbbc44a0079caee7c69a3\",\"dweb:/ipfs/Qmcw1cQnq9eWDnrCBwU3TNyqLfTMUFg5YKpYUkELoMPuUE\"]},\"src/FiatTokenV2_1/openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xdfb4f812600ba4ce6738c35584ceb8c9433472583051b48ba5b1f66cb758a498\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df02dffe1c1de089d9b4f6192f0dcf464526f2230f420b3deec4645e0cdd2bff\",\"dweb:/ipfs/QmcqXGAU3KJqwrgUVoGJ2W8osomhSJ4R5kdsRpbuW3fELS\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.6.12+commit.27d51765" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "AuthorizationCanceled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "AuthorizationUsed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Blacklisted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newBlacklister", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "BlacklisterChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "burner", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Burn", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newMasterMinter", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "MasterMinterChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "MinterConfigured", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldMinter", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "MinterRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "Pause", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "PauserChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RescuerChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "UnBlacklisted", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "Unpause", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "CANCEL_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "RECEIVE_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "TRANSFER_WITH_AUTHORIZATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "authorizationState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "blacklist" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blacklister", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "burn" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "authorizer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "cancelAuthorization" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minterAllowedAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "configureMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "currency", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "decrement", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "increment", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenSymbol", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenCurrency", + "type": "string" + }, + { + "internalType": "uint8", + "name": "tokenDecimals", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newMasterMinter", + "type": "address" + }, + { + "internalType": "address", + "name": "newPauser", + "type": "address" + }, + { + "internalType": "address", + "name": "newBlacklister", + "type": "address" + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newName", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeV2" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lostAndFound", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeV2_1" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBlacklisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "masterMinter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "minterAllowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "pause" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauser", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "permit" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "receiveWithAuthorization" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "rescueERC20" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "rescuer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validAfter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validBefore", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferWithAuthorization" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unBlacklist" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "unpause" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newBlacklister", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateBlacklister" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newMasterMinter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateMasterMinter" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPauser", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updatePauser" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newRescuer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateRescuer" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "allowance(address,address)": { + "params": { + "owner": "Token owner's address", + "spender": "Spender's address" + }, + "returns": { + "_0": "Allowance amount" + } + }, + "approve(address,uint256)": { + "params": { + "spender": "Spender's address", + "value": "Allowance amount" + }, + "returns": { + "_0": "True if successful" + } + }, + "authorizationState(address,bytes32)": { + "details": "Nonces are randomly generated 32-byte data unique to the authorizer's address", + "params": { + "authorizer": "Authorizer's address", + "nonce": "Nonce of the authorization" + }, + "returns": { + "_0": "True if the nonce is used" + } + }, + "balanceOf(address)": { + "details": "Get token balance of an account", + "params": { + "account": "address The account" + } + }, + "blacklist(address)": { + "details": "Adds account to blacklist", + "params": { + "_account": "The address to blacklist" + } + }, + "burn(uint256)": { + "details": "allows a minter to burn some of its own tokens Validates that caller is a minter and that sender is not blacklisted amount is less than or equal to the minter's account balance", + "params": { + "_amount": "uint256 the amount of tokens to be burned" + } + }, + "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)": { + "details": "Works only if the authorization is not yet used.", + "params": { + "authorizer": "Authorizer's address", + "nonce": "Nonce of the authorization", + "r": "r of the signature", + "s": "s of the signature", + "v": "v of the signature" + } + }, + "configureMinter(address,uint256)": { + "details": "Function to add/update a new minter", + "params": { + "minter": "The address of the minter", + "minterAllowedAmount": "The minting amount allowed for the minter" + }, + "returns": { + "_0": "True if the operation was successful." + } + }, + "decreaseAllowance(address,uint256)": { + "params": { + "decrement": "Amount of decrease in allowance", + "spender": "Spender's address" + }, + "returns": { + "_0": "True if successful" + } + }, + "increaseAllowance(address,uint256)": { + "params": { + "increment": "Amount of increase in allowance", + "spender": "Spender's address" + }, + "returns": { + "_0": "True if successful" + } + }, + "initializeV2(string)": { + "params": { + "newName": "New token name" + } + }, + "initializeV2_1(address)": { + "params": { + "lostAndFound": "The address to which the locked funds are sent" + } + }, + "isBlacklisted(address)": { + "details": "Checks if account is blacklisted", + "params": { + "_account": "The address to check" + } + }, + "isMinter(address)": { + "details": "Checks if account is a minter", + "params": { + "account": "The address to check" + } + }, + "mint(address,uint256)": { + "details": "Function to mint tokens", + "params": { + "_amount": "The amount of tokens to mint. Must be less than or equal to the minterAllowance of the caller.", + "_to": "The address that will receive the minted tokens." + }, + "returns": { + "_0": "A boolean that indicates if the operation was successful." + } + }, + "minterAllowance(address)": { + "details": "Get minter allowance for an account", + "params": { + "minter": "The address of the minter" + } + }, + "nonces(address)": { + "params": { + "owner": "Token owner's address (Authorizer)" + }, + "returns": { + "_0": "Next nonce" + } + }, + "owner()": { + "details": "Tells the address of the owner", + "returns": { + "_0": "the address of the owner" + } + }, + "pause()": { + "details": "called by the owner to pause, triggers stopped state" + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "params": { + "deadline": "Expiration time, seconds since the epoch", + "owner": "Token owner's address (Authorizer)", + "r": "r of the signature", + "s": "s of the signature", + "spender": "Spender's address", + "v": "v of the signature", + "value": "Amount of allowance" + } + }, + "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "details": "This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks.", + "params": { + "from": "Payer's address (Authorizer)", + "nonce": "Unique nonce", + "r": "r of the signature", + "s": "s of the signature", + "to": "Payee's address", + "v": "v of the signature", + "validAfter": "The time after which this is valid (unix time)", + "validBefore": "The time before which this is valid (unix time)", + "value": "Amount to be transferred" + } + }, + "removeMinter(address)": { + "details": "Function to remove a minter", + "params": { + "minter": "The address of the minter to remove" + }, + "returns": { + "_0": "True if the operation was successful." + } + }, + "rescueERC20(address,address,uint256)": { + "params": { + "amount": "Amount to withdraw", + "to": "Recipient address", + "tokenContract": "ERC20 token contract address" + } + }, + "rescuer()": { + "returns": { + "_0": "Rescuer's address" + } + }, + "totalSupply()": { + "details": "Get totalSupply of token" + }, + "transfer(address,uint256)": { + "params": { + "to": "Payee's address", + "value": "Transfer amount" + }, + "returns": { + "_0": "True if successful" + } + }, + "transferFrom(address,address,uint256)": { + "params": { + "from": "Payer's address", + "to": "Payee's address", + "value": "Transfer amount" + }, + "returns": { + "_0": "True if successful" + } + }, + "transferOwnership(address)": { + "details": "Allows the current owner to transfer control of the contract to a newOwner.", + "params": { + "newOwner": "The address to transfer ownership to." + } + }, + "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "params": { + "from": "Payer's address (Authorizer)", + "nonce": "Unique nonce", + "r": "r of the signature", + "s": "s of the signature", + "to": "Payee's address", + "v": "v of the signature", + "validAfter": "The time after which this is valid (unix time)", + "validBefore": "The time before which this is valid (unix time)", + "value": "Amount to be transferred" + } + }, + "unBlacklist(address)": { + "details": "Removes account from blacklist", + "params": { + "_account": "The address to remove from the blacklist" + } + }, + "unpause()": { + "details": "called by the owner to unpause, returns to normal state" + }, + "updatePauser(address)": { + "details": "update the pauser role" + }, + "updateRescuer(address)": { + "params": { + "newRescuer": "New rescuer's address" + } + }, + "version()": { + "returns": { + "_0": "Version string" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowance(address,address)": { + "notice": "Amount of remaining tokens spender is allowed to transfer on behalf of the token owner" + }, + "approve(address,uint256)": { + "notice": "Set spender's allowance over the caller's tokens to be a given value." + }, + "authorizationState(address,bytes32)": { + "notice": "Returns the state of an authorization" + }, + "cancelAuthorization(address,bytes32,uint8,bytes32,bytes32)": { + "notice": "Attempt to cancel an authorization" + }, + "decreaseAllowance(address,uint256)": { + "notice": "Decrease the allowance by a given decrement" + }, + "increaseAllowance(address,uint256)": { + "notice": "Increase the allowance by a given increment" + }, + "initializeV2(string)": { + "notice": "Initialize v2" + }, + "initializeV2_1(address)": { + "notice": "Initialize v2.1" + }, + "nonces(address)": { + "notice": "Nonces for permit" + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "notice": "Update allowance with a signed permit" + }, + "receiveWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "notice": "Receive a transfer with a signed authorization from the payer" + }, + "rescueERC20(address,address,uint256)": { + "notice": "Rescue ERC20 tokens locked up in this contract." + }, + "rescuer()": { + "notice": "Returns current rescuer" + }, + "transfer(address,uint256)": { + "notice": "Transfer tokens from the caller" + }, + "transferFrom(address,address,uint256)": { + "notice": "Transfer tokens by spending allowance" + }, + "transferWithAuthorization(address,address,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32)": { + "notice": "Execute a transfer with a signed authorization" + }, + "updateRescuer(address)": { + "notice": "Assign the rescuer role to a given address." + }, + "version()": { + "notice": "Version string for the EIP712 domain separator" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "ds-test/=lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/" + ], + "optimizer": { + "enabled": true, + "runs": 10000000 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2_1.sol": "FiatTokenV2_1" + }, + "libraries": {} + }, + "sources": { + "src/FiatTokenV2_1/centre-tokens/contracts/util/ECRecover.sol": { + "keccak256": "0xb4e623304daaf25e40292e60a814ae60a60745d10003f1881a36be763dbc09aa", + "urls": [ + "bzz-raw://d6ef83bd777bfb13b0968b9cadd971216a95150427fa5d6b50f984e4b7268d31", + "dweb:/ipfs/QmZS5TeT6n7tM36PBdYZNJW3wgYgAZE9zMcouNs4FuEDKj" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/util/EIP712.sol": { + "keccak256": "0x39319612a776e16f355d5ab71575b68c427a058839544f032733df228b5debd1", + "urls": [ + "bzz-raw://d5ac6450e881a4275f4b5baf7b5d6e15c0a0c7c2039edf39f106e0b821c9829d", + "dweb:/ipfs/QmShHneDasAXQzjA8iKWXk3sbZgxbQGPiMQ1MUpJGF64N8" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1.1/FiatTokenV1_1.sol": { + "keccak256": "0xa5f8fc4b5e739ddcafe52dd76ebb7605e09eb9d52a5c1d77e48dd88e83106308", + "urls": [ + "bzz-raw://24543f05d3eb4768ee9798768cb6c9ce8b88d30606a5def83118ad1ba9382ac8", + "dweb:/ipfs/QmYREtrAvoxn6DKXehJPP1pbs8vciqMvRHVk2eFKLtmKVT" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1.1/Rescuable.sol": { + "keccak256": "0x8c02b979e06aa4133c93e47c743ebebd56d120dd10aeaf56b2da2a36f06b68b1", + "urls": [ + "bzz-raw://9d73d6f98bd494500a414ca616eabe9ad6e99f283e00a471bddd7f8ac5825334", + "dweb:/ipfs/QmXesAuMcXJiG3r2og7adeT5wBcY6ntFncVUFjNPfEhJC9" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1/AbstractFiatTokenV1.sol": { + "keccak256": "0xb81ae053cff8eced79f29c3542b7693763ed2bfdd9a25d6b150439d21b3fa57d", + "urls": [ + "bzz-raw://e16ce40aef6188334cd0dbc2e3aead22c1f89101d782df821821061d5efa891b", + "dweb:/ipfs/QmW2WnaMTzpUityk5Mpv7FFdKCh2CeueJaDneoABGVowVm" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1/Blacklistable.sol": { + "keccak256": "0xc4ff3bfe34c8ecf9f2c333f8373c111fdd4640ed15677c4891bb9cf3cbff9554", + "urls": [ + "bzz-raw://91cfc583d47eda58f356783698a130c1c6adf797c4ba55461598c0bac8159f33", + "dweb:/ipfs/QmeWfmhcwUE7H5Ge8TVhWkJ4kDwDY8a4kExMaufukLqsh1" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1/FiatTokenV1.sol": { + "keccak256": "0xaed130ecb4b0714a887dccaaff61321915f2afbf0839ee8af10673507a010471", + "urls": [ + "bzz-raw://3961d2ed8f4f2c69cc4ce0fdb2346b8bd5c09d644627704181fa03b82231ff31", + "dweb:/ipfs/Qmb7sdix44isYUaD4TD4QsVmR8d86NN4koiFE6SsjRagGQ" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1/Ownable.sol": { + "keccak256": "0x654e645d6d09616fde908eba4d29abf318fede7e8cc3e31705203fc1d2599217", + "urls": [ + "bzz-raw://fce1ff1458e817aaa5f87d3ef4207fbbdeb25e548d460f47d9cca4fb80175390", + "dweb:/ipfs/QmfY7E5xfTyeiuU2nDXEdYfy5LKjGRh69fuKK4HV6YTv9v" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v1/Pausable.sol": { + "keccak256": "0x873ce4f17eb8694cd0420ef6682c2da54290fe6e243f21ead37e90f211ac91b6", + "urls": [ + "bzz-raw://7df712210c8bb5fc08e0ff7b684ee4035530cd67b21f20d81766a17407606a3c", + "dweb:/ipfs/QmYPFYAw4W8VdcBdknLhqfNfiUuGhGJD3ZZ7rAjrKjhtXd" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v2/AbstractFiatTokenV2.sol": { + "keccak256": "0x5d393663d48e4bbb730630c117c2b703dd3c9968833e66dbbb18c92eab207afe", + "urls": [ + "bzz-raw://b0ce642b7ab095d970e3e5d031e5de6b2a98a7ddd20fd94123a42ed81e21757e", + "dweb:/ipfs/QmbPixwbbpHS7zBRcJV1idzhaSd1SPRm3LjpywxFnXxR8A" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v2/EIP2612.sol": { + "keccak256": "0x8ed169be2f6423b8e7002241857d719e9eb9545f5dbad5209a8f6445132bdbe0", + "urls": [ + "bzz-raw://0646f70d57d072c0569ccbd9b02c922bbb183e6052f94c241c4fef9a267e73bc", + "dweb:/ipfs/QmZK3D3qqTMenkdc5EpZSiyxETMpTVpRke61uuRH75ctVk" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v2/EIP3009.sol": { + "keccak256": "0x74a81d5b1682cb6716f60c27254e8a15463797e1772b37c884390eb9c7985070", + "urls": [ + "bzz-raw://1d3a6e220c2b8aab8c5070312cc9320ce2b79955b0bddafd99e5feec13851016", + "dweb:/ipfs/QmQwc2nZtMKyDcGT8Scnv1R4ThP2Va9trUHnRiqMz4G2WN" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v2/EIP712Domain.sol": { + "keccak256": "0x56d8c0259e7f0baa5bb0d0d94810f25d001fb2dbe4eaf54dbe369ba0f1b8fd2b", + "urls": [ + "bzz-raw://9356cfa1d42bfb8c4f84a3db535ab75b2088975bfbda30834d79c3eb678047ea", + "dweb:/ipfs/QmSBeiLwNGEC4vnr82EWQinGZFZemxKwxvwLZ9bu48FWF2" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2.sol": { + "keccak256": "0x59654e02023dd9d712bb160545854eae6cba80d707a547f6abfaadcd830af2e7", + "urls": [ + "bzz-raw://e22c43b71ea393e9910bd91a355f711803d6971be25e9dabc702aaefac2a597f", + "dweb:/ipfs/QmRjopnHgyKh1mXBDETBaXaom3NJSaacGEJweB5b28BdSE" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2_1.sol": { + "keccak256": "0x6328091a86a3ab02471fba7ff3bf44200f6daf9f0ff3b61fe4043ee14cc1a4f0", + "urls": [ + "bzz-raw://4fed880853c249f6f812ddfa37bf99633b688f0bfd734e03372e4523f6cd2af9", + "dweb:/ipfs/QmUMD1SvykvTJ8jmAjnsW13Yo3Wt6KH5dfKRPKCRogLki8" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/openzeppelin/contracts/math/SafeMath.sol": { + "keccak256": "0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806", + "urls": [ + "bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5", + "dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/openzeppelin/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385", + "urls": [ + "bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017", + "dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/openzeppelin/contracts/token/ERC20/SafeERC20.sol": { + "keccak256": "0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27", + "urls": [ + "bzz-raw://0d7de652204c2ee291a61aa984103dfc7ae4392d651fbbc44a0079caee7c69a3", + "dweb:/ipfs/Qmcw1cQnq9eWDnrCBwU3TNyqLfTMUFg5YKpYUkELoMPuUE" + ], + "license": "MIT" + }, + "src/FiatTokenV2_1/openzeppelin/contracts/utils/Address.sol": { + "keccak256": "0xdfb4f812600ba4ce6738c35584ceb8c9433472583051b48ba5b1f66cb758a498", + "urls": [ + "bzz-raw://df02dffe1c1de089d9b4f6192f0dcf464526f2230f420b3deec4645e0cdd2bff", + "dweb:/ipfs/QmcqXGAU3KJqwrgUVoGJ2W8osomhSJ4R5kdsRpbuW3fELS" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2_1.sol", + "id": 47381, + "exportedSymbols": { + "FiatTokenV2_1": [47380] + }, + "nodeType": "SourceUnit", + "src": "1154:973:41", + "nodes": [ + { + "id": 47316, + "nodeType": "PragmaDirective", + "src": "1154:23:41", + "nodes": [], + "literals": ["solidity", "0.6", ".12"] + }, + { + "id": 47318, + "nodeType": "ImportDirective", + "src": "1179:48:41", + "nodes": [], + "absolutePath": "src/FiatTokenV2_1/centre-tokens/contracts/v2/FiatTokenV2.sol", + "file": "./FiatTokenV2.sol", + "scope": 47381, + "sourceUnit": 47315, + "symbolAliases": [ + { + "foreign": { + "argumentTypes": null, + "id": 47317, + "name": "FiatTokenV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": null, + "src": "1188:11:41", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + }, + "local": null + } + ], + "unitAlias": "" + }, + { + "id": 47380, + "nodeType": "ContractDefinition", + "src": "1362:764:41", + "nodes": [ + { + "id": 47370, + "nodeType": "FunctionDefinition", + "src": "1528:398:41", + "nodes": [], + "body": { + "id": 47369, + "nodeType": "Block", + "src": "1583:343:41", + "nodes": [], + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 47330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 47328, + "name": "_initializedVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47025, + "src": "1652:19:41", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 47329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1675:1:41", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1652:24:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 47327, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "1644:7:41", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 47331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1644:33:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 47332, + "nodeType": "ExpressionStatement", + "src": "1644:33:41" + }, + { + "assignments": [47334], + "declarations": [ + { + "constant": false, + "id": 47334, + "mutability": "mutable", + "name": "lockedAmount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 47369, + "src": "1688:20:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 47333, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1688:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 47341, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 47335, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 45622, + "src": "1711:8:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 47340, + "indexExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 47338, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1728:4:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$47380", + "typeString": "contract FiatTokenV2_1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$47380", + "typeString": "contract FiatTokenV2_1" + } + ], + "id": 47337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1720:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 47336, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1720:7:41", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 47339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1720:13:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1711:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1688:46:41" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 47344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 47342, + "name": "lockedAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47334, + "src": "1748:12:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 47343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1763:1:41", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1748:16:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 47355, + "nodeType": "IfStatement", + "src": "1744:99:41", + "trueBody": { + "id": 47354, + "nodeType": "Block", + "src": "1766:77:41", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 47348, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1798:4:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$47380", + "typeString": "contract FiatTokenV2_1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$47380", + "typeString": "contract FiatTokenV2_1" + } + ], + "id": 47347, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1790:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 47346, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1790:7:41", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 47349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1790:13:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 47350, + "name": "lostAndFound", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47324, + "src": "1805:12:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 47351, + "name": "lockedAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47334, + "src": "1819:12:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 47345, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [46200], + "referencedDeclaration": 46200, + "src": "1780:9:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 47352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1780:52:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 47353, + "nodeType": "ExpressionStatement", + "src": "1780:52:41" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 47363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 47356, + "name": "blacklisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 45464, + "src": "1852:11:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 47361, + "indexExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 47359, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1872:4:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$47380", + "typeString": "contract FiatTokenV2_1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FiatTokenV2_1_$47380", + "typeString": "contract FiatTokenV2_1" + } + ], + "id": 47358, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1864:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 47357, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1864:7:41", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 47360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1864:13:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1852:26:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 47362, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1881:4:41", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "1852:33:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 47364, + "nodeType": "ExpressionStatement", + "src": "1852:33:41" + }, + { + "expression": { + "argumentTypes": null, + "id": 47367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 47365, + "name": "_initializedVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47025, + "src": "1896:19:41", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "32", + "id": 47366, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1918:1:41", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "1896:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 47368, + "nodeType": "ExpressionStatement", + "src": "1896:23:41" + } + ] + }, + "documentation": { + "id": 47322, + "nodeType": "StructuredDocumentation", + "src": "1406:117:41", + "text": " @notice Initialize v2.1\n @param lostAndFound The address to which the locked funds are sent" + }, + "functionSelector": "2fc81e09", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "initializeV2_1", + "overrides": null, + "parameters": { + "id": 47325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 47324, + "mutability": "mutable", + "name": "lostAndFound", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 47370, + "src": "1552:20:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 47323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1552:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1551:22:41" + }, + "returnParameters": { + "id": 47326, + "nodeType": "ParameterList", + "parameters": [], + "src": "1583:0:41" + }, + "scope": 47380, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 47379, + "nodeType": "FunctionDefinition", + "src": "2040:84:41", + "nodes": [], + "body": { + "id": 47378, + "nodeType": "Block", + "src": "2097:27:41", + "nodes": [], + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "32", + "id": 47376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2114:3:41", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5", + "typeString": "literal_string \"2\"" + }, + "value": "2" + }, + "functionReturnParameters": 47375, + "id": 47377, + "nodeType": "Return", + "src": "2107:10:41" + } + ] + }, + "documentation": { + "id": 47371, + "nodeType": "StructuredDocumentation", + "src": "1932:103:41", + "text": " @notice Version string for the EIP712 domain separator\n @return Version string" + }, + "functionSelector": "54fd4d50", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "version", + "overrides": null, + "parameters": { + "id": 47372, + "nodeType": "ParameterList", + "parameters": [], + "src": "2056:2:41" + }, + "returnParameters": { + "id": 47375, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 47374, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 47379, + "src": "2082:13:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 47373, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2082:6:41", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2081:15:41" + }, + "scope": 47380, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 47320, + "name": "FiatTokenV2", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 47314, + "src": "1388:11:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FiatTokenV2_$47314", + "typeString": "contract FiatTokenV2" + } + }, + "id": 47321, + "nodeType": "InheritanceSpecifier", + "src": "1388:11:41" + } + ], + "contractDependencies": [ + 45337, 45426, 45451, 45582, 46359, 46443, 46543, 46568, 46663, 46995, + 47002, 47314, 47654 + ], + "contractKind": "contract", + "documentation": { + "id": 47319, + "nodeType": "StructuredDocumentation", + "src": "1269:92:41", + "text": " @title FiatToken V2.1\n @notice ERC20 Token backed by fiat reserves, version 2.1" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 47380, 47314, 46663, 46995, 47002, 46568, 45337, 45426, 46359, 45582, + 46543, 46443, 45451, 47654 + ], + "name": "FiatTokenV2_1", + "scope": 47381 + } + ], + "license": "MIT" + }, + "id": 41 +} diff --git a/packages/protocol/contracts/compiled/README.md b/packages/protocol/contracts/compiled/README.md new file mode 100644 index 00000000000..076670757c3 --- /dev/null +++ b/packages/protocol/contracts/compiled/README.md @@ -0,0 +1,24 @@ +## About the compiled contracts + +Following Circle's recommendation for native token support (USDC, EURC), one needs to follow the standard proposed below: + +https://github.com/circlefin/stablecoin-evm/blob/master/doc/bridged_USDC_standard.md + +According to this document: + +> The third-party team’s bridged USDC token contract is expected to be identical to native USDC token contracts on other EVM blockchains. USDC uses a proxy pattern, so the standard applies to both the implementation contract code and the token proxy. +> +> Using identical code facilitates trustless contract verification by Circle and supports a seamless integration with existing USDC services. To facilitate this, the third-party team may choose one of the following: +> +> Copy previously deployed bytecode from a recent, native USDC token contract deployment (both proxy and implementation) on an EVM blockchain, for example Arbitrum, Base, OP Mainnet, or Polygon PoS Note that you must supply different constructor and initializer parameters where needed. +> +> Build the FiatToken contracts from source. In this case, the compiler metadata must be published or made available to support full contract verification. Various suggested compiler settings that Circle uses can be found here, which will allow the third-party team to reach the same bytecode if followed consistently. + +Following the recommendations the contracts were built with the same compiler settings (version + optimization) and they have bytecode equivalance with the other contracts (mentioned in the doc, and can be found on links below (Arbitrum, Scroll, Polygon, etc.)). + +For reference, here are Arbitrum's proxy + token contracts: + +- Proxy: https://arbiscan.io/token/0xaf88d065e77c8cc2239327c5edb3a432268e5831#code +- Implementation: https://arbiscan.io/address/0x0f4fb9474303d10905AB86aA8d5A65FE44b6E04A#code + +As a cross-reference, one can compare the bytecode of the ones present on arbiscan and here in the .json files (under bytcode key), the additional (meta)data could be helpful for contracts verfication. diff --git a/packages/protocol/contracts/tokenvault/BaseNFTVault.sol b/packages/protocol/contracts/tokenvault/BaseNFTVault.sol index 357a304e55e..c232545fa86 100644 --- a/packages/protocol/contracts/tokenvault/BaseNFTVault.sol +++ b/packages/protocol/contracts/tokenvault/BaseNFTVault.sol @@ -97,11 +97,8 @@ abstract contract BaseNFTVault is BaseVault { error VAULT_INVALID_TOKEN(); error VAULT_INVALID_AMOUNT(); error VAULT_INVALID_USER(); - error VAULT_INVALID_FROM(); error VAULT_INVALID_SRC_CHAIN_ID(); error VAULT_INTERFACE_NOT_SUPPORTED(); - error VAULT_MESSAGE_NOT_FAILED(); - error VAULT_MESSAGE_RELEASED_ALREADY(); error VAULT_TOKEN_ARRAY_MISMATCH(); error VAULT_MAX_TOKEN_PER_TXN_EXCEEDED(); diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol index a21bc60f7d0..9a58720f6b6 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol @@ -32,8 +32,8 @@ contract BridgedERC1155 is // Event triggered upon token transfer. event Transfer(address indexed from, address indexed to, uint256 tokenId, uint256 amount); - error BRIDGED_TOKEN_CANNOT_RECEIVE(); - error BRIDGED_TOKEN_INVALID_PARAMS(); + error BTOKEN_CANNOT_RECEIVE(); + error BTOKEN_INVALID_PARAMS(); /// @dev Initializer function to be called after deployment. /// @param _addressManager The address of the address manager. @@ -52,7 +52,7 @@ contract BridgedERC1155 is initializer { if (_srcToken == address(0) || _srcChainId == 0 || _srcChainId == block.chainid) { - revert BRIDGED_TOKEN_INVALID_PARAMS(); + revert BTOKEN_INVALID_PARAMS(); } _Essential_init(_addressManager); __ERC1155_init(""); @@ -72,6 +72,8 @@ contract BridgedERC1155 is uint256 amount ) public + nonReentrant + whenNotPaused onlyFromNamed("erc1155_vault") { _mint(account, tokenId, amount, ""); @@ -87,6 +89,8 @@ contract BridgedERC1155 is uint256 amount ) public + nonReentrant + whenNotPaused onlyFromNamed("erc1155_vault") { _burn(account, tokenId, amount); @@ -107,9 +111,11 @@ contract BridgedERC1155 is ) public override(ERC1155Upgradeable, IERC1155Upgradeable) + nonReentrant + whenNotPaused { if (to == address(this)) { - revert BRIDGED_TOKEN_CANNOT_RECEIVE(); + revert BTOKEN_CANNOT_RECEIVE(); } return ERC1155Upgradeable.safeTransferFrom(from, to, tokenId, amount, data); } diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20.sol b/packages/protocol/contracts/tokenvault/BridgedERC20.sol index 21179997b55..d1763e5100a 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20.sol @@ -6,31 +6,25 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import "../common/EssentialContract.sol"; -import "./IMintableERC20.sol"; + import "./LibBridgedToken.sol"; +import "./BridgedERC20Base.sol"; /// @title BridgedERC20 /// @notice An upgradeable ERC20 contract that represents tokens bridged from /// another chain. -contract BridgedERC20 is - EssentialContract, - IMintableERC20, - IERC20MetadataUpgradeable, - ERC20Upgradeable -{ - address public srcToken; - uint256 public srcChainId; +contract BridgedERC20 is BridgedERC20Base, IERC20MetadataUpgradeable, ERC20Upgradeable { + address public srcToken; // slot 1 uint8 private srcDecimals; + uint256 public srcChainId; // slot 2 - uint256[47] private __gap; + uint256[48] private __gap; - error BRIDGED_TOKEN_CANNOT_RECEIVE(); - error BRIDGED_TOKEN_INVALID_PARAMS(); + error BTOKEN_CANNOT_RECEIVE(); + error BTOKEN_INVALID_PARAMS(); /// @notice Initializes the contract. /// @dev Different BridgedERC20 Contract is deployed per unique _srcToken @@ -57,7 +51,7 @@ contract BridgedERC20 is _srcToken == address(0) || _srcChainId == 0 || _srcChainId == block.chainid || bytes(_symbol).length == 0 || bytes(_name).length == 0 ) { - revert BRIDGED_TOKEN_INVALID_PARAMS(); + revert BTOKEN_INVALID_PARAMS(); } // Initialize OwnerUUPSUpgradable and ERC20Upgradeable @@ -70,22 +64,6 @@ contract BridgedERC20 is srcDecimals = _decimals; } - /// @notice Mints tokens to an account. - /// @dev Only an ERC20Vault can call this function. - /// @param account The account to mint tokens to. - /// @param amount The amount of tokens to mint. - function mint(address account, uint256 amount) public onlyFromNamed("erc20_vault") { - _mint(account, amount); - } - - /// @notice Burns tokens from an account. - /// @dev Only an ERC20Vault can call this function. - /// @param account The account to burn tokens from. - /// @param amount The amount of tokens to burn. - function burn(address account, uint256 amount) public onlyFromNamed("erc20_vault") { - _burn(account, amount); - } - /// @notice Transfers tokens from the caller to another account. /// @dev Any address can call this. Caller must have at least 'amount' to /// call this. @@ -97,11 +75,11 @@ contract BridgedERC20 is ) public override(ERC20Upgradeable, IERC20Upgradeable) + nonReentrant + whenNotPaused returns (bool) { - if (to == address(this)) { - revert BRIDGED_TOKEN_CANNOT_RECEIVE(); - } + if (to == address(this)) revert BTOKEN_CANNOT_RECEIVE(); return ERC20Upgradeable.transfer(to, amount); } @@ -118,10 +96,12 @@ contract BridgedERC20 is ) public override(ERC20Upgradeable, IERC20Upgradeable) + nonReentrant + whenNotPaused returns (bool) { if (to == address(this)) { - revert BRIDGED_TOKEN_CANNOT_RECEIVE(); + revert BTOKEN_CANNOT_RECEIVE(); } return ERC20Upgradeable.transferFrom(from, to, amount); } @@ -164,4 +144,12 @@ contract BridgedERC20 is function canonical() public view returns (address, uint256) { return (srcToken, srcChainId); } + + function _mintToken(address account, uint256 amount) internal override { + _mint(account, amount); + } + + function _burnToken(address from, uint256 amount) internal override { + _burn(from, amount); + } } diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol b/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol new file mode 100644 index 00000000000..28276fb29b1 --- /dev/null +++ b/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; +import "../common/EssentialContract.sol"; +import "./IBridgedERC20.sol"; + +abstract contract BridgedERC20Base is EssentialContract, IBridgedERC20 { + address public migratingAddress; // slot 1 + bool public migratingInbound; + uint256[49] private __gap; + + event MigrationStatusChanged(address addr, bool inbound); + + event MigratedTo(address indexed fromToken, address indexed account, uint256 amount); + event MigratedFrom(address indexed toToken, address indexed account, uint256 amount); + + error BB_PERMISSION_DENIED(); + error BB_INVALID_PARAMS(); + error BB_MINT_DISALLOWED(); + + function changeMigrationStatus( + address addr, + bool inbound + ) + external + whenNotPaused + onlyFromOwnerOrNamed("erc20_vault") + { + if (addr == migratingAddress && inbound == migratingInbound) { + revert BB_INVALID_PARAMS(); + } + + migratingAddress = addr; + migratingInbound = inbound; + emit MigrationStatusChanged(addr, inbound); + } + + function mint(address account, uint256 amount) public nonReentrant whenNotPaused { + // mint is disabled while migrating outbound. + if (migratingAddress != address(0) && !migratingInbound) revert BB_MINT_DISALLOWED(); + + if (msg.sender == migratingAddress) { + // Inbound migration + emit MigratedTo(migratingAddress, account, amount); + } else if (msg.sender != resolve("erc20_vault", true)) { + // Bridging from vault + revert BB_PERMISSION_DENIED(); + } + + _mintToken(account, amount); + } + + function burn(address account, uint256 amount) public nonReentrant whenNotPaused { + if (migratingAddress != address(0) && !migratingInbound) { + // Outbond migration + emit MigratedTo(migratingAddress, account, amount); + // Ask the new bridged token to mint token for the user. + IBridgedERC20(migratingAddress).mint(account, amount); + } else if (msg.sender != resolve("erc20_vault", true)) { + // Bridging to vault + revert RESOLVER_DENIED(); + } + + _burnToken(account, amount); + } + + function owner() public view override(IBridgedERC20, OwnableUpgradeable) returns (address) { + return super.owner(); + } + + function _mintToken(address account, uint256 amount) internal virtual; + function _burnToken(address from, uint256 amount) internal virtual; +} diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/tokenvault/BridgedERC721.sol index 661ae5c1351..05bbbd34a53 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC721.sol @@ -19,9 +19,9 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { uint256[48] private __gap; - error BRIDGED_TOKEN_CANNOT_RECEIVE(); - error BRIDGED_TOKEN_INVALID_PARAMS(); - error BRIDGED_TOKEN_INVALID_BURN(); + error BTOKEN_CANNOT_RECEIVE(); + error BTOKEN_INVALID_PARAMS(); + error BTOKEN_INVALID_BURN(); /// @dev Initializer function to be called after deployment. /// @param _addressManager The address of the address manager. @@ -43,7 +43,7 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { _srcToken == address(0) || _srcChainId == 0 || _srcChainId == block.chainid || bytes(_symbol).length == 0 || bytes(_name).length == 0 ) { - revert BRIDGED_TOKEN_INVALID_PARAMS(); + revert BTOKEN_INVALID_PARAMS(); } _Essential_init(_addressManager); __ERC721_init(_name, _symbol); @@ -54,17 +54,33 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { /// @dev Mints tokens. /// @param account Address to receive the minted token. /// @param tokenId ID of the token to mint. - function mint(address account, uint256 tokenId) public onlyFromNamed("erc721_vault") { + function mint( + address account, + uint256 tokenId + ) + public + nonReentrant + whenNotPaused + onlyFromNamed("erc721_vault") + { _mint(account, tokenId); } /// @dev Burns tokens. /// @param account Address from which the token is burned. /// @param tokenId ID of the token to burn. - function burn(address account, uint256 tokenId) public onlyFromNamed("erc721_vault") { + function burn( + address account, + uint256 tokenId + ) + public + nonReentrant + whenNotPaused + onlyFromNamed("erc721_vault") + { // Check if the caller is the owner of the token. if (ownerOf(tokenId) != account) { - revert BRIDGED_TOKEN_INVALID_BURN(); + revert BTOKEN_INVALID_BURN(); } _burn(tokenId); } @@ -80,9 +96,11 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { ) public override(ERC721Upgradeable) + nonReentrant + whenNotPaused { if (to == address(this)) { - revert BRIDGED_TOKEN_CANNOT_RECEIVE(); + revert BTOKEN_CANNOT_RECEIVE(); } return ERC721Upgradeable.transferFrom(from, to, tokenId); } diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/tokenvault/ERC20Vault.sol index d6a1b8eb468..19d8c34e513 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC20Vault.sol @@ -10,7 +10,6 @@ import "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; import "../bridge/IBridge.sol"; import "./BridgedERC20.sol"; -import "./IMintableERC20.sol"; import "./BaseVault.sol"; /// @title ERC20Vault @@ -49,7 +48,9 @@ contract ERC20Vault is BaseVault { // tokens across other chains aside from Ethereum. mapping(uint256 => mapping(address => address)) public canonicalToBridged; - uint256[48] private __gap; + mapping(address btoken => bool blacklisted) public btokenBlacklist; + + uint256[46] private __gap; event BridgedTokenDeployed( uint256 indexed srcChainId, @@ -59,6 +60,17 @@ contract ERC20Vault is BaseVault { string ctokenName, uint8 ctokenDecimal ); + + event BridgedTokenChanged( + uint256 indexed srcChainId, + address indexed ctoken, + address btokenOld, + address btokenNew, + string ctokenSymbol, + string ctokenName, + uint8 ctokenDecimal + ); + event TokenSent( bytes32 indexed msgHash, address indexed from, @@ -79,13 +91,68 @@ contract ERC20Vault is BaseVault { uint256 amount ); + error VAULT_BTOKEN_BLACKLISTED(); + error VAULT_CTOKEN_MISMATCH(); error VAULT_INVALID_TOKEN(); error VAULT_INVALID_AMOUNT(); - error VAULT_INVALID_USER(); - error VAULT_INVALID_FROM(); - error VAULT_INVALID_SRC_CHAIN_ID(); - error VAULT_MESSAGE_NOT_FAILED(); - error VAULT_MESSAGE_RELEASED_ALREADY(); + error VAULT_INVALID_NEW_BTOKEN(); + error VAULT_NOT_SAME_OWNER(); + + function changeBridgedToken( + CanonicalERC20 calldata ctoken, + address btokenNew + ) + external + nonReentrant + whenNotPaused + onlyOwner + returns (address btokenOld) + { + if (btokenNew == address(0) || bridgedToCanonical[btokenNew].addr != address(0)) { + revert VAULT_INVALID_NEW_BTOKEN(); + } + + if (btokenBlacklist[btokenNew]) revert VAULT_BTOKEN_BLACKLISTED(); + + if (IBridgedERC20(btokenNew).owner() != owner()) { + revert VAULT_NOT_SAME_OWNER(); + } + + btokenOld = canonicalToBridged[ctoken.chainId][ctoken.addr]; + + if (btokenOld != address(0)) { + CanonicalERC20 memory _ctoken = bridgedToCanonical[btokenOld]; + + // Check that the ctoken must match the saved one. + if ( + _ctoken.decimals != ctoken.decimals + || keccak256(bytes(_ctoken.symbol)) != keccak256(bytes(ctoken.symbol)) + || keccak256(bytes(_ctoken.name)) != keccak256(bytes(ctoken.name)) + ) revert VAULT_CTOKEN_MISMATCH(); + + delete bridgedToCanonical[btokenOld]; + btokenBlacklist[btokenOld] = true; + + // Start the migration + IBridgedERC20(btokenOld).changeMigrationStatus(btokenNew, false); + IBridgedERC20(btokenNew).changeMigrationStatus(btokenOld, true); + } else { + IBridgedERC20(btokenNew).changeMigrationStatus(address(0), false); + } + + bridgedToCanonical[btokenNew] = ctoken; + canonicalToBridged[ctoken.chainId][ctoken.addr] = btokenNew; + + emit BridgedTokenChanged({ + srcChainId: ctoken.chainId, + ctoken: ctoken.addr, + btokenOld: btokenOld, + btokenNew: btokenNew, + ctokenSymbol: ctoken.symbol, + ctokenName: ctoken.name, + ctokenDecimal: ctoken.decimals + }); + } /// @notice Transfers ERC20 tokens to this vault and sends a message to the /// destination chain so the user can receive the same amount of tokens by @@ -155,7 +222,7 @@ contract ERC20Vault is BaseVault { ERC20(token).safeTransfer(_to, amount); } else { token = _getOrDeployBridgedToken(ctoken); - IMintableERC20(token).mint(_to, amount); + IBridgedERC20(token).mint(_to, amount); } _to.sendEther(msg.value); @@ -189,7 +256,7 @@ contract ERC20Vault is BaseVault { if (amount > 0) { if (bridgedToCanonical[token].addr != address(0)) { - IMintableERC20(token).mint(message.owner, amount); + IBridgedERC20(token).mint(message.owner, amount); } else { ERC20(token).safeTransfer(message.owner, amount); } @@ -228,9 +295,11 @@ contract ERC20Vault is BaseVault { // If it's a bridged token if (bridgedToCanonical[token].addr != address(0)) { ctoken = bridgedToCanonical[token]; - IMintableERC20(token).burn(msg.sender, amount); + IBridgedERC20(token).burn(msg.sender, amount); _balanceChange = amount; } else { + if (btokenBlacklist[token]) revert VAULT_BTOKEN_BLACKLISTED(); + // If it's a canonical token ERC20 t = ERC20(token); ctoken = CanonicalERC20({ diff --git a/packages/protocol/contracts/tokenvault/IMintableERC20.sol b/packages/protocol/contracts/tokenvault/IBridgedERC20.sol similarity index 53% rename from packages/protocol/contracts/tokenvault/IMintableERC20.sol rename to packages/protocol/contracts/tokenvault/IBridgedERC20.sol index 80b2bb96acd..4ddb21aa87c 100644 --- a/packages/protocol/contracts/tokenvault/IMintableERC20.sol +++ b/packages/protocol/contracts/tokenvault/IBridgedERC20.sol @@ -6,11 +6,14 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol"; +import "../common/EssentialContract.sol"; -/// @title IMintableERC20 -/// @notice Interface for ERC20 tokens with mint and burn functionality. -interface IMintableERC20 is IERC20Upgradeable { +/// @title IBridgedERC20 +/// @notice Interface for all bridged tokens. +/// @dev To facilitate compatibility with third-party bridged tokens, such as USDC's native +/// standard, it's necessary to implement an intermediary adapter contract which should conform to +/// this interface, enabling effective interaction with third-party contracts. +interface IBridgedERC20 { /// @notice Mints `amount` tokens and assigns them to the `account` address. /// @param account The account to receive the minted tokens. /// @param amount The amount of tokens to mint. @@ -20,4 +23,10 @@ interface IMintableERC20 is IERC20Upgradeable { /// @param from The account from which the tokens will be burned. /// @param amount The amount of tokens to burn. function burn(address from, uint256 amount) external; + + /// @notice Start or stop migration to/from a specified contract. + function changeMigrationStatus(address addr, bool inbound) external; + + /// @notice Returns the owner + function owner() external view returns (address); } diff --git a/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol b/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol new file mode 100644 index 00000000000..f5b58a551ca --- /dev/null +++ b/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.20; + +import "../BridgedERC20Base.sol"; + +interface IUSDC { + function burn(uint256 amount) external; + function mint(address to, uint256 amount) external; + function transferFrom(address from, address to, uint256 amount) external; +} + +/// @title USDCAdaptor +contract USDCAdaptor is BridgedERC20Base { + IUSDC public usdc; // slot 1 + uint256[49] private __gap; + + function init(address _adressManager, IUSDC _usdc) external initializer { + _Essential_init(_adressManager); + usdc = _usdc; + } + + function _mintToken(address account, uint256 amount) internal override { + usdc.mint(account, amount); + } + + function _burnToken(address from, uint256 amount) internal override { + usdc.transferFrom(from, address(this), amount); + usdc.burn(amount); + } +} diff --git a/packages/protocol/test/tokenvault/BridgedERC20.t.sol b/packages/protocol/test/tokenvault/BridgedERC20.t.sol new file mode 100644 index 00000000000..2999a88806b --- /dev/null +++ b/packages/protocol/test/tokenvault/BridgedERC20.t.sol @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "../TaikoTest.sol"; + +contract TestBridgedERC20 is TaikoTest { + address manager; + address vault = randAddress(); + address owner = randAddress(); + + function setUp() public { + manager = deployProxy({ + name: "address_manager", + impl: address(new AddressManager()), + data: bytes.concat(AddressManager.init.selector) + }); + + register(manager, "erc20_vault", vault); + } + + function test_20Vault_migration__change_migration_status() public { + BridgedERC20 btoken = deployBridgedToken("FOO"); + + vm.expectRevert(); + btoken.changeMigrationStatus(Emma, false); + + vm.startPrank(owner); + btoken.changeMigrationStatus(Emma, false); + btoken.changeMigrationStatus(address(0), false); + btoken.changeMigrationStatus(address(0), true); + btoken.changeMigrationStatus(Emma, true); + vm.expectRevert(); + btoken.changeMigrationStatus(Emma, true); + vm.stopPrank(); + + vm.startPrank(vault); + btoken.changeMigrationStatus(Frank, false); + btoken.changeMigrationStatus(address(0), false); + btoken.changeMigrationStatus(address(0), true); + btoken.changeMigrationStatus(Frank, true); + vm.expectRevert(); + btoken.changeMigrationStatus(Frank, true); + + vm.stopPrank(); + } + + function test_20Vault_migration___only_vault_can_min_burn_when_migration_off() public { + BridgedERC20 btoken = deployBridgedToken("BAR"); + // only erc20_vault can brun and mint + vm.startPrank(vault); + btoken.mint(Bob, 1000); + btoken.burn(Bob, 600); + assertEq(btoken.balanceOf(Bob), 400); + vm.stopPrank(); + + // Owner cannot burn/mint + vm.startPrank(owner); + vm.expectRevert(); + btoken.mint(Bob, 1000); + vm.expectRevert(); + btoken.burn(Bob, 100); + vm.stopPrank(); + } + + function test_20Vault_migration__old_to_new() public { + BridgedERC20 oldToken = deployBridgedToken("OLD"); + BridgedERC20 newToken = deployBridgedToken("NEW"); + + vm.startPrank(vault); + oldToken.mint(Bob, 100); + newToken.mint(Bob, 200); + + oldToken.changeMigrationStatus(address(newToken), false); + newToken.changeMigrationStatus(address(oldToken), true); + vm.stopPrank(); + + // Testing oldToken + // 1. minting is not possible for Bob, owner, or vault + vm.prank(Bob); + vm.expectRevert(); + oldToken.mint(Bob, 10); + + vm.prank(owner); + vm.expectRevert(); + oldToken.mint(Bob, 10); + + vm.prank(vault); + vm.expectRevert(); + oldToken.mint(Bob, 10); + + // 2. burning can be done by anyone + vm.prank(randAddress()); + oldToken.burn(Bob, 10); + assertEq(oldToken.balanceOf(Bob), 90); + assertEq(newToken.balanceOf(Bob), 210); + + // Testing newToken + // 1. Nobody can mint except the vault + vm.prank(Bob); + vm.expectRevert(); + newToken.mint(Bob, 10); + + vm.prank(owner); + vm.expectRevert(); + newToken.mint(Bob, 10); + + vm.prank(vault); + newToken.mint(Bob, 15); + assertEq(newToken.balanceOf(Bob), 225); + + // 2. Nobody can burn except the vault + vm.prank(Bob); + vm.expectRevert(); + newToken.burn(Bob, 10); + + vm.prank(owner); + vm.expectRevert(); + newToken.burn(Bob, 10); + + vm.prank(vault); + newToken.burn(Bob, 25); + assertEq(newToken.balanceOf(Bob), 200); + } + + function deployBridgedToken(string memory name) internal returns (BridgedERC20) { + address srcToken = randAddress(); + uint256 srcChainId = 1000; + uint8 srcDecimals = 11; + return BridgedERC20( + deployProxy({ + name: "bridged_token1", + impl: address(new BridgedERC20()), + data: bytes.concat( + BridgedERC20.init.selector, + abi.encode(address(manager), srcToken, srcChainId, srcDecimals, name, name) + ), + registerTo: manager, + owner: owner + }) + ); + } +} diff --git a/packages/protocol/test/tokenvault/ERC20Vault.t.sol b/packages/protocol/test/tokenvault/ERC20Vault.t.sol index 9dca715b016..8440cb695cd 100644 --- a/packages/protocol/test/tokenvault/ERC20Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC20Vault.t.sol @@ -49,9 +49,8 @@ contract PrankDestBridge { // message.to.call{ value: message.value, gas: gasLimit // }(message.data); // The problem (with foundry) is that this way it is not able to deploy - // a contract - // most probably due to some deployment address nonce issue. (Seems a - // known issue). + // a contract most probably due to some deployment address nonce issue. (Seems a known + // issue). destERC20Vault.receiveToken{ value: mockLibInvokeMsgValue }( canonicalToken, from, to, amount ); @@ -78,6 +77,7 @@ contract TestERC20Vault is TaikoTest { FreeMintERC20 erc20; SignalService signalService; uint64 destChainId = 7; + uint64 srcChainId = uint64(block.chainid); function setUp() public { vm.startPrank(Carol); @@ -273,7 +273,6 @@ contract TestERC20Vault is TaikoTest { { vm.startPrank(Alice); - uint64 srcChainId = uint64(block.chainid); vm.chainId(destChainId); erc20.mint(address(erc20Vault)); @@ -305,7 +304,6 @@ contract TestERC20Vault is TaikoTest { function test_20Vault_receiveTokens_erc20_with_ether_to_dave() public { vm.startPrank(Alice); - uint64 srcChainId = uint64(block.chainid); vm.chainId(destChainId); erc20.mint(address(erc20Vault)); @@ -342,7 +340,6 @@ contract TestERC20Vault is TaikoTest { { vm.startPrank(Alice); - uint64 srcChainId = uint64(block.chainid); vm.chainId(destChainId); uint256 amount = 1; @@ -391,7 +388,6 @@ contract TestERC20Vault is TaikoTest { function test_20Vault_upgrade_bridged_tokens_20() public { vm.startPrank(Alice); - uint64 srcChainId = uint64(block.chainid); vm.chainId(destChainId); uint256 amount = 1; diff --git a/packages/protocol/test/tokenvault/ERC721Vault.t.sol b/packages/protocol/test/tokenvault/ERC721Vault.t.sol index 08dc05796e4..4e74d25f2ce 100644 --- a/packages/protocol/test/tokenvault/ERC721Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC721Vault.t.sol @@ -760,7 +760,7 @@ contract ERC721VaultTest is TaikoTest { ); vm.prank(Alice, Alice); - vm.expectRevert(BridgedERC721.BRIDGED_TOKEN_INVALID_BURN.selector); + vm.expectRevert(BridgedERC721.BTOKEN_INVALID_BURN.selector); destChainErc721Vault.sendToken{ value: 140_000 }(sendOpts); } From c7f96b47436d64f077e0f7a6c5267f69a32aa7d2 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Thu, 30 Nov 2023 22:26:47 +0800 Subject: [PATCH 09/17] Update pnpm-lock.yaml --- pnpm-lock.yaml | 5406 +++++++++++++++++++++++++++--------------------- 1 file changed, 3076 insertions(+), 2330 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 098fe24c389..124f4a7c5e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,20 +20,20 @@ importers: packages/bridge-ui-v2: dependencies: '@wagmi/core': - specifier: ^1.3.6 - version: 1.4.5(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) + specifier: ^1.4.6 + version: 1.4.6(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.18.9) '@web3modal/ethereum': - specifier: ^2.6.2 - version: 2.7.1(@wagmi/core@1.4.5)(viem@1.16.6) + specifier: ^2.7.1 + version: 2.7.1(@wagmi/core@1.4.6)(viem@1.18.9) '@web3modal/html': - specifier: ^2.6.2 + specifier: ^2.7.1 version: 2.7.1(react@18.2.0) '@zerodevx/svelte-toast': specifier: ^0.9.5 - version: 0.9.5(svelte@4.1.0) + version: 0.9.5(svelte@4.2.3) axios: - specifier: ^1.4.0 - version: 1.4.0(debug@4.3.4) + specifier: ^1.6.1 + version: 1.6.1(debug@4.3.4) buffer: specifier: ^6.0.3 version: 6.0.3 @@ -43,48 +43,54 @@ importers: events: specifier: ^3.3.0 version: 3.3.0 + object-hash: + specifier: ^3.0.0 + version: 3.0.0 svelte-i18n: - specifier: ^3.6.0 - version: 3.6.0(svelte@4.1.0) + specifier: ^3.7.4 + version: 3.7.4(svelte@4.2.3) viem: - specifier: ^1.4.1 - version: 1.16.6(typescript@5.2.2) + specifier: ^1.18.9 + version: 1.18.9(typescript@5.2.2)(zod@3.22.4) devDependencies: '@playwright/test': - specifier: ^1.28.1 - version: 1.28.1 + specifier: ^1.39.0 + version: 1.39.0 '@sveltejs/adapter-auto': - specifier: ^2.1.0 - version: 2.1.0(@sveltejs/kit@1.22.3) + specifier: ^2.1.1 + version: 2.1.1(@sveltejs/kit@1.27.4) '@sveltejs/adapter-static': - specifier: ^2.0.2 - version: 2.0.2(@sveltejs/kit@1.22.3) + specifier: ^2.0.3 + version: 2.0.3(@sveltejs/kit@1.27.4) '@sveltejs/kit': - specifier: ^1.22.3 - version: 1.22.3(svelte@4.1.0)(vite@4.4.9) + specifier: ^1.27.4 + version: 1.27.4(svelte@4.2.3)(vite@4.5.0) '@types/debug': - specifier: ^4.1.7 - version: 4.1.7 + specifier: ^4.1.12 + version: 4.1.12 + '@types/object-hash': + specifier: ^3.0.6 + version: 3.0.6 '@typescript-eslint/eslint-plugin': - specifier: ^6.6.0 - version: 6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.10.0 + version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^6.7.0 - version: 6.7.5(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.10.0 + version: 6.10.0(eslint@8.53.0)(typescript@5.2.2) '@vitest/coverage-v8': specifier: ^0.33.0 - version: 0.33.0(vitest@0.32.2) + version: 0.33.0(vitest@0.32.4) '@wagmi/cli': - specifier: ^1.0.1 - version: 1.0.1(@wagmi/core@1.4.5)(typescript@5.2.2) + specifier: ^1.5.2 + version: 1.5.2(@wagmi/core@1.4.6)(typescript@5.2.2) abitype: - specifier: ^0.8.7 - version: 0.8.7(typescript@5.2.2)(zod@3.22.4) + specifier: ^0.8.11 + version: 0.8.11(typescript@5.2.2) ajv: - specifier: ^8.6.4 - version: 8.7.0 + specifier: ^8.12.0 + version: 8.12.0 autoprefixer: - specifier: ^10.4.14 + specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) daisyui: specifier: 3.1.7 @@ -93,17 +99,17 @@ importers: specifier: ^16.3.1 version: 16.3.1 eslint: - specifier: ^8.28.0 - version: 8.51.0 + specifier: ^8.53.0 + version: 8.53.0 eslint-config-prettier: - specifier: ^8.5.0 - version: 8.5.0(eslint@8.51.0) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.53.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.51.0) + version: 10.0.0(eslint@8.53.0) eslint-plugin-svelte: - specifier: ^2.26.0 - version: 2.26.0(eslint@8.51.0)(svelte@4.1.0) + specifier: ^2.35.0 + version: 2.35.0(eslint@8.53.0)(svelte@4.2.3) ethereum-address: specifier: ^0.0.4 version: 0.0.4 @@ -114,44 +120,44 @@ importers: specifier: ^1.5.12 version: 1.5.12 postcss: - specifier: ^8.4.24 + specifier: ^8.4.31 version: 8.4.31 prettier: - specifier: ^3.0.0 + specifier: ^3.0.3 version: 3.0.3 prettier-plugin-svelte: - specifier: ^3.0.0 - version: 3.0.0(prettier@3.0.3)(svelte@4.1.0) + specifier: ^3.1.0 + version: 3.1.0(prettier@3.0.3)(svelte@4.2.3) svelte: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.2.3 + version: 4.2.3 svelte-check: - specifier: ^3.4.6 - version: 3.4.6(postcss@8.4.31)(svelte@4.1.0) + specifier: ^3.6.0 + version: 3.6.0(postcss@8.4.31)(svelte@4.2.3) tailwindcss: - specifier: ^3.3.2 - version: 3.3.3 + specifier: ^3.3.5 + version: 3.3.5 ts-morph: specifier: ^19.0.0 version: 19.0.0 tslib: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^2.6.2 + version: 2.6.2 typescript: - specifier: ^5.1.6 + specifier: ^5.2.2 version: 5.2.2 vite: - specifier: ^4.4.9 - version: 4.4.9(@types/node@20.8.6) + specifier: ^4.5.0 + version: 4.5.0(@types/node@20.9.0) vite-tsconfig-paths: specifier: ^4.2.1 - version: 4.2.1(typescript@5.2.2)(vite@4.4.9) + version: 4.2.1(typescript@5.2.2)(vite@4.5.0) vitest: - specifier: ^0.32.2 - version: 0.32.2(jsdom@22.1.0) + specifier: ^0.32.4 + version: 0.32.4(jsdom@22.1.0) vitest-fetch-mock: specifier: ^0.2.2 - version: 0.2.2(vitest@0.32.2) + version: 0.2.2(vitest@0.32.4) packages/eventindexer: {} @@ -160,59 +166,55 @@ importers: packages/guardian-prover-health-check: {} packages/protocol: - dependencies: - merkletreejs: - specifier: ^0.3.11 - version: 0.3.11 devDependencies: '@defi-wonderland/smock': specifier: ^2.3.4 - version: 2.3.4(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(hardhat@2.18.1) + version: 2.3.5(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(hardhat@2.18.2) '@foundry-rs/hardhat-forge': specifier: ^0.1.17 - version: 0.1.17(@nomiclabs/hardhat-ethers@2.2.3)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.1) + version: 0.1.17(@nomiclabs/hardhat-ethers@2.2.3)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.2) '@nomicfoundation/hardhat-foundry': specifier: ^1.1.1 - version: 1.1.1(hardhat@2.18.1) + version: 1.1.1(hardhat@2.18.2) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.9 - version: 1.0.9(hardhat@2.18.1) + version: 1.0.9(hardhat@2.18.2) '@nomiclabs/hardhat-ethers': specifier: ^2.2.3 - version: 2.2.3(ethers@5.7.2)(hardhat@2.18.1) + version: 2.2.3(ethers@5.7.2)(hardhat@2.18.2) '@nomiclabs/hardhat-etherscan': specifier: ^3.1.7 - version: 3.1.7(hardhat@2.18.1) + version: 3.1.7(hardhat@2.18.2) '@nomiclabs/hardhat-waffle': specifier: ^2.0.6 - version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.10)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.1) + version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.12)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.2) '@openzeppelin/hardhat-upgrades': specifier: ^2.3.3 - version: 2.3.3(@nomicfoundation/hardhat-ethers@3.0.4)(ethers@5.7.2)(hardhat@2.18.1) + version: 2.4.3(@nomicfoundation/hardhat-ethers@3.0.5)(ethers@5.7.2)(hardhat@2.18.2) '@typechain/ethers-v5': specifier: ^11.1.2 version: 11.1.2(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.2)(typescript@5.2.2) '@typechain/hardhat': specifier: ^9.1.0 - version: 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@5.7.2)(hardhat@2.18.1)(typechain@8.3.2) + version: 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@5.7.2)(hardhat@2.18.2)(typechain@8.3.2) '@types/chai': specifier: ^4.3.8 - version: 4.3.8 + version: 4.3.10 '@types/glob': specifier: ^8.1.0 version: 8.1.0 '@types/mocha': specifier: ^10.0.2 - version: 10.0.2 + version: 10.0.6 '@types/node': specifier: ^20.8.6 - version: 20.8.6 + version: 20.9.0 '@typescript-eslint/eslint-plugin': specifier: ^6.7.5 - version: 6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2) + version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/parser': specifier: ^6.7.5 - version: 6.7.5(eslint@8.51.0)(typescript@5.2.2) + version: 6.10.0(eslint@8.53.0)(typescript@5.2.2) chai: specifier: ^4.3.10 version: 4.3.10 @@ -224,25 +226,25 @@ importers: version: 16.3.1 eslint: specifier: ^8.51.0 - version: 8.51.0 + version: 8.53.0 eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0(eslint@8.51.0) + version: 9.0.0(eslint@8.53.0) eslint-config-standard: specifier: ^17.1.0 - version: 17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.51.0) + version: 17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.53.0) eslint-plugin-import: specifier: ^2.28.1 - version: 2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.51.0) + version: 2.28.1(@typescript-eslint/parser@6.10.0)(eslint@8.53.0) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@8.51.0) + version: 11.1.0(eslint@8.53.0) eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3) + version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.53.0)(prettier@3.0.3) eslint-plugin-promise: specifier: ^6.1.1 - version: 6.1.1(eslint@8.51.0) + version: 6.1.1(eslint@8.53.0) ethers: specifier: ^5.7.2 version: 5.7.2 @@ -251,22 +253,22 @@ importers: version: 10.3.10 hardhat: specifier: ^2.18.1 - version: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + version: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) hardhat-abi-exporter: specifier: ^2.10.1 - version: 2.10.1(hardhat@2.18.1) + version: 2.10.1(hardhat@2.18.2) hardhat-contract-sizer: specifier: ^2.10.0 - version: 2.10.0(hardhat@2.18.1) + version: 2.10.0(hardhat@2.18.2) hardhat-docgen: specifier: ^1.3.0 - version: 1.3.0(hardhat@2.18.1)(prettier@3.0.3) + version: 1.3.0(hardhat@2.18.2)(prettier@3.0.3) hardhat-gas-reporter: specifier: ^1.0.9 - version: 1.0.9(hardhat@2.18.1) + version: 1.0.9(hardhat@2.18.2) hardhat-preprocessor: specifier: ^0.1.5 - version: 0.1.5(hardhat@2.18.1) + version: 0.1.5(hardhat@2.18.2) merkle-patricia-tree: specifier: ^4.2.4 version: 4.2.4 @@ -281,13 +283,13 @@ importers: version: 3.6.2(typescript@5.2.2) solidity-coverage: specifier: github:taikoxyz/solidity-coverage - version: github.com/taikoxyz/solidity-coverage/ceb49fd1f6041e4fcd26079dfb0d3b0f58c812e5(hardhat@2.18.1) + version: github.com/taikoxyz/solidity-coverage/ceb49fd1f6041e4fcd26079dfb0d3b0f58c812e5(hardhat@2.18.2) solidity-docgen: specifier: 0.6.0-beta.36 - version: 0.6.0-beta.36(hardhat@2.18.1) + version: 0.6.0-beta.36(hardhat@2.18.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.8.6)(typescript@5.2.2) + version: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) typechain: specifier: ^8.3.2 version: 8.3.2(typescript@5.2.2) @@ -301,7 +303,7 @@ importers: dependencies: '@coinbase/wallet-sdk': specifier: ^3.6.3 - version: 3.6.3(@babel/core@7.23.2) + version: 3.7.2 '@ethersproject/experimental': specifier: ^5.7.0 version: 5.7.0 @@ -313,41 +315,41 @@ importers: version: 1.6.0 '@wagmi/connectors': specifier: ^0.1.1 - version: 0.1.1(@babel/core@7.23.2)(@wagmi/core@0.8.0)(ethers@5.7.1)(typescript@4.6.4) + version: 0.1.10(@wagmi/core@0.8.19)(ethers@5.7.2)(react@18.2.0) '@wagmi/core': specifier: ^0.8.0 - version: 0.8.0(@coinbase/wallet-sdk@3.6.3)(ethers@5.7.1)(react@18.2.0)(typescript@4.6.4) + version: 0.8.19(@coinbase/wallet-sdk@3.7.2)(ethers@5.7.2)(react@18.2.0)(typescript@4.9.5) axios: specifier: ^1.2.0 - version: 1.4.0(debug@4.3.4) + version: 1.5.1 buffer: specifier: ^6.0.3 version: 6.0.3 ethers: specifier: ^5.7.1 - version: 5.7.1 + version: 5.7.2 identicon.js: specifier: ^2.3.3 version: 2.3.3 svelte-i18n: specifier: ^3.5.1 - version: 3.6.0(svelte@3.53.1) + version: 3.7.4(svelte@3.59.2) svelte-spa-router: specifier: ^3.2.0 - version: 3.2.0 + version: 3.3.0 devDependencies: '@babel/preset-env': specifier: ^7.16.0 - version: 7.16.0(@babel/core@7.23.2) + version: 7.23.2(@babel/core@7.23.3) '@sveltejs/vite-plugin-svelte': specifier: ^1.0.1 - version: 1.0.1(svelte@3.53.1)(vite@3.2.7) + version: 1.4.0(svelte@3.59.2)(vite@3.2.7) '@tsconfig/svelte': specifier: ^5.0.2 version: 5.0.2 '@types/eslint': specifier: ^8.2.1 - version: 8.2.1 + version: 8.44.6 '@types/estree': specifier: ^0.0.50 version: 0.0.50 @@ -356,16 +358,16 @@ importers: version: 27.5.2 '@types/mixpanel': specifier: ^2.14.3 - version: 2.14.3 + version: 2.14.7 '@types/sanitize-html': specifier: ^2.6.2 - version: 2.6.2 + version: 2.9.3 '@typescript-eslint/eslint-plugin': specifier: ^6.6.0 - version: 6.7.5(@typescript-eslint/parser@5.16.0)(eslint@8.51.0)(typescript@4.6.4) + version: 6.8.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.16.0 - version: 5.16.0(eslint@8.51.0)(typescript@4.6.4) + version: 5.62.0(eslint@8.53.0)(typescript@4.9.5) '@zerodevx/svelte-toast': specifier: ^0.6.3 version: 0.6.3 @@ -374,7 +376,7 @@ importers: version: 10.4.16(postcss@8.4.31) babel-jest: specifier: ^27.3.1 - version: 27.3.1(@babel/core@7.23.2) + version: 27.5.1(@babel/core@7.23.3) babel-plugin-transform-es2015-modules-commonjs: specifier: ^6.26.2 version: 6.26.2 @@ -386,7 +388,7 @@ importers: version: 27.5.1 node-sass: specifier: ^7.0.1 - version: 7.0.1 + version: 7.0.3 postcss: specifier: ^8.4.19 version: 8.4.31 @@ -395,55 +397,55 @@ importers: version: 7.1.2 postcss-loader: specifier: ^7.3.3 - version: 7.3.3(postcss@8.4.31)(typescript@4.6.4)(webpack@5.89.0) + version: 7.3.3(postcss@8.4.31)(typescript@4.9.5)(webpack@5.89.0) prettier: specifier: 2.7.1 version: 2.7.1 rollup-plugin-node-builtins: specifier: ^2.0.0 - version: 2.0.0 + version: 2.1.2 rollup-plugin-polyfill-node: specifier: ^0.10.2 version: 0.10.2(rollup@2.79.1) svelte: specifier: ^3.53.1 - version: 3.53.1 + version: 3.59.2 svelte-check: specifier: ^2.8.0 - version: 2.8.0(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1) + version: 2.10.3(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2) svelte-heros-v2: specifier: ^0.3.10 - version: 0.3.10 + version: 0.3.21(svelte@3.59.2) svelte-jester: specifier: ^2.1.5 - version: 2.1.5(jest@27.5.1)(svelte@3.53.1) + version: 2.3.2(jest@27.5.1)(svelte@3.59.2) svelte-loader: specifier: ^3.1.2 - version: 3.1.2(svelte@3.53.1) + version: 3.1.9(svelte@3.59.2) svelte-preprocess: specifier: ^4.10.7 - version: 4.10.7(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1)(typescript@4.6.4) + version: 4.10.7(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2)(typescript@4.9.5) tailwindcss: specifier: ^3.2.4 version: 3.3.3 theme-change: specifier: ^2.2.0 - version: 2.2.0 + version: 2.5.0 ts-jest: specifier: ^27.0.7 - version: 27.0.7(@babel/core@7.23.2)(@types/jest@27.5.2)(babel-jest@27.3.1)(jest@27.5.1)(typescript@4.6.4) + version: 27.1.5(@babel/core@7.23.3)(@types/jest@27.5.2)(babel-jest@27.5.1)(jest@27.5.1)(typescript@4.9.5) ts-jest-mock-import-meta: specifier: ^0.12.0 - version: 0.12.0(ts-jest@27.0.7) + version: 0.12.0(ts-jest@27.1.5) ts-loader: specifier: ^9.2.6 - version: 9.2.6(typescript@4.6.4)(webpack@5.89.0) + version: 9.5.0(typescript@4.9.5)(webpack@5.89.0) tslib: specifier: ^2.4.0 - version: 2.4.1 + version: 2.6.2 typescript: specifier: ^4.6.4 - version: 4.6.4 + version: 4.9.5 vite: specifier: ^3.2.7 version: 3.2.7 @@ -455,7 +457,7 @@ importers: dependencies: '@coinbase/wallet-sdk': specifier: ^3.6.3 - version: 3.6.3(@babel/core@7.23.2) + version: 3.7.2 '@ethersproject/experimental': specifier: ^5.7.0 version: 5.7.0 @@ -467,41 +469,41 @@ importers: version: 1.6.0 '@wagmi/connectors': specifier: ^0.1.1 - version: 0.1.1(@babel/core@7.23.2)(@wagmi/core@0.8.0)(ethers@5.7.1)(typescript@4.6.4) + version: 0.1.10(@wagmi/core@0.8.19)(ethers@5.7.2)(react@18.2.0) '@wagmi/core': specifier: ^0.8.0 - version: 0.8.0(@coinbase/wallet-sdk@3.6.3)(ethers@5.7.1)(react@18.2.0)(typescript@4.6.4) + version: 0.8.19(@coinbase/wallet-sdk@3.7.2)(ethers@5.7.2)(react@18.2.0)(typescript@4.9.5) axios: specifier: ^1.2.0 - version: 1.4.0(debug@4.3.4) + version: 1.5.1 buffer: specifier: ^6.0.3 version: 6.0.3 ethers: specifier: ^5.7.1 - version: 5.7.1 + version: 5.7.2 identicon.js: specifier: ^2.3.3 version: 2.3.3 svelte-i18n: specifier: ^3.5.1 - version: 3.6.0(svelte@3.53.1) + version: 3.7.4(svelte@3.59.2) svelte-spa-router: specifier: ^3.2.0 - version: 3.2.0 + version: 3.3.0 devDependencies: '@babel/preset-env': specifier: ^7.16.0 - version: 7.16.0(@babel/core@7.23.2) + version: 7.23.2(@babel/core@7.23.3) '@sveltejs/vite-plugin-svelte': specifier: ^1.0.1 - version: 1.0.1(svelte@3.53.1)(vite@3.2.7) + version: 1.4.0(svelte@3.59.2)(vite@3.2.7) '@tsconfig/svelte': specifier: ^5.0.2 version: 5.0.2 '@types/eslint': specifier: ^8.2.1 - version: 8.2.1 + version: 8.44.6 '@types/estree': specifier: ^0.0.50 version: 0.0.50 @@ -510,16 +512,16 @@ importers: version: 27.5.2 '@types/mixpanel': specifier: ^2.14.3 - version: 2.14.3 + version: 2.14.7 '@types/sanitize-html': specifier: ^2.6.2 - version: 2.6.2 + version: 2.9.3 '@typescript-eslint/eslint-plugin': specifier: ^6.6.0 - version: 6.7.5(@typescript-eslint/parser@5.16.0)(eslint@8.51.0)(typescript@4.6.4) + version: 6.8.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.16.0 - version: 5.16.0(eslint@8.51.0)(typescript@4.6.4) + version: 5.62.0(eslint@8.53.0)(typescript@4.9.5) '@zerodevx/svelte-toast': specifier: ^0.6.3 version: 0.6.3 @@ -528,7 +530,7 @@ importers: version: 10.4.16(postcss@8.4.31) babel-jest: specifier: ^27.3.1 - version: 27.3.1(@babel/core@7.23.2) + version: 27.5.1(@babel/core@7.23.3) babel-plugin-transform-es2015-modules-commonjs: specifier: ^6.26.2 version: 6.26.2 @@ -540,7 +542,7 @@ importers: version: 27.5.1 node-sass: specifier: ^7.0.1 - version: 7.0.1 + version: 7.0.3 postcss: specifier: ^8.4.19 version: 8.4.31 @@ -549,55 +551,55 @@ importers: version: 7.1.2 postcss-loader: specifier: ^7.3.3 - version: 7.3.3(postcss@8.4.31)(typescript@4.6.4)(webpack@5.89.0) + version: 7.3.3(postcss@8.4.31)(typescript@4.9.5)(webpack@5.89.0) prettier: specifier: 2.7.1 version: 2.7.1 rollup-plugin-node-builtins: specifier: ^2.0.0 - version: 2.0.0 + version: 2.1.2 rollup-plugin-polyfill-node: specifier: ^0.10.2 version: 0.10.2(rollup@2.79.1) svelte: specifier: ^3.53.1 - version: 3.53.1 + version: 3.59.2 svelte-check: specifier: ^2.8.0 - version: 2.8.0(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1) + version: 2.10.3(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2) svelte-heros-v2: specifier: ^0.3.10 - version: 0.3.10 + version: 0.3.21(svelte@3.59.2) svelte-jester: specifier: ^2.1.5 - version: 2.1.5(jest@27.5.1)(svelte@3.53.1) + version: 2.3.2(jest@27.5.1)(svelte@3.59.2) svelte-loader: specifier: ^3.1.2 - version: 3.1.2(svelte@3.53.1) + version: 3.1.9(svelte@3.59.2) svelte-preprocess: specifier: ^4.10.7 - version: 4.10.7(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1)(typescript@4.6.4) + version: 4.10.7(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2)(typescript@4.9.5) tailwindcss: specifier: ^3.2.4 version: 3.3.3 theme-change: specifier: ^2.2.0 - version: 2.2.0 + version: 2.5.0 ts-jest: specifier: ^27.0.7 - version: 27.0.7(@babel/core@7.23.2)(@types/jest@27.5.2)(babel-jest@27.3.1)(jest@27.5.1)(typescript@4.6.4) + version: 27.1.5(@babel/core@7.23.3)(@types/jest@27.5.2)(babel-jest@27.5.1)(jest@27.5.1)(typescript@4.9.5) ts-jest-mock-import-meta: specifier: ^0.12.0 - version: 0.12.0(ts-jest@27.0.7) + version: 0.12.0(ts-jest@27.1.5) ts-loader: specifier: ^9.2.6 - version: 9.2.6(typescript@4.6.4)(webpack@5.89.0) + version: 9.5.0(typescript@4.9.5)(webpack@5.89.0) tslib: specifier: ^2.4.0 - version: 2.4.1 + version: 2.6.2 typescript: specifier: ^4.6.4 - version: 4.6.4 + version: 4.9.5 vite: specifier: ^3.2.7 version: 3.2.7 @@ -609,16 +611,16 @@ importers: dependencies: next: specifier: ^13.5.4 - version: 13.5.4(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(react-dom@18.2.0)(react@18.2.0) next-themes: specifier: ^0.2.1 - version: 0.2.1(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) + version: 0.2.1(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) nextra: specifier: ^2.13.2 - version: 2.13.2(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.2(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) nextra-theme-docs: specifier: ^2.13.2 - version: 2.13.2(next@13.5.4)(nextra@2.13.2)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.2(next@13.5.6)(nextra@2.13.2)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -637,28 +639,28 @@ importers: version: 2.0.18(react@18.2.0) '@types/node': specifier: ^20.8.6 - version: 20.8.6 + version: 20.9.0 '@types/react': specifier: ^18.2.28 - version: 18.2.28 + version: 18.2.39 autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) daisyui: specifier: ^3.9.2 - version: 3.9.2 + version: 3.9.4 postcss: specifier: ^8.4.31 version: 8.4.31 tailwindcss: specifier: ^3.3.3 - version: 3.3.3 + version: 3.3.5 typescript: specifier: ^5.2.2 version: 5.2.2 viem: specifier: ^1.16.5 - version: 1.16.6(typescript@5.2.2) + version: 1.18.9(typescript@5.2.2)(zod@3.22.4) packages/whitepaper: {} @@ -669,10 +671,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@adraffy/ens-normalize@1.9.0: - resolution: {integrity: sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==} - dev: true - /@adraffy/ens-normalize@1.9.4: resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} @@ -686,36 +684,36 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 /@aws-crypto/sha256-js@1.2.2: resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} dependencies: '@aws-crypto/util': 1.2.2 - '@aws-sdk/types': 3.428.0 + '@aws-sdk/types': 3.433.0 tslib: 1.14.1 dev: true /@aws-crypto/util@1.2.2: resolution: {integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==} dependencies: - '@aws-sdk/types': 3.428.0 + '@aws-sdk/types': 3.433.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: true - /@aws-sdk/types@3.428.0: - resolution: {integrity: sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==} + /@aws-sdk/types@3.433.0: + resolution: {integrity: sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.3.5 + '@smithy/types': 2.4.0 tslib: 2.6.2 dev: true /@aws-sdk/util-utf8-browser@3.259.0: resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: true /@babel/code-frame@7.22.13: @@ -724,10 +722,12 @@ packages: dependencies: '@babel/highlight': 7.22.20 chalk: 2.4.2 + dev: true /@babel/compat-data@7.23.2: resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/core@7.23.2: resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} @@ -750,6 +750,30 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true + + /@babel/core@7.23.3: + resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.3 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.3 + '@babel/types': 7.23.3 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true /@babel/generator@7.23.0: resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} @@ -757,8 +781,19 @@ packages: dependencies: '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: true + + /@babel/generator@7.23.3: + resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.3 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 + dev: true /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} @@ -783,61 +818,44 @@ packages: browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 + dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2): + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.2): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.2.4(@babel/core@7.23.2): - resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.23.2 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/traverse': 7.23.2 - debug: 4.3.4(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.8 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2): + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.3): resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) @@ -845,11 +863,12 @@ packages: resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: false + dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -857,12 +876,14 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.0 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} @@ -876,6 +897,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} @@ -889,6 +911,35 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.3): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} @@ -900,26 +951,27 @@ packages: /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} + dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.2): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.3): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.3): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -930,6 +982,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} @@ -943,18 +996,22 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-wrap-function@7.22.20: resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} @@ -974,6 +1031,7 @@ packages: '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color + dev: true /@babel/highlight@7.22.20: resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} @@ -982,6 +1040,7 @@ packages: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/parser@7.23.0: resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} @@ -989,229 +1048,187 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.0 + dev: true + + /@babel/parser@7.23.3: + resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.3 + dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.2): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.3) dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.23.2): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + '@babel/core': 7.23.3 dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.23.2): - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead. + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.3): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.23.2): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead. + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.23.2): - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.3): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.3): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.2): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.2): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.2): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.3): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.23.2): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1219,18 +1236,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.3): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1238,17 +1254,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1256,17 +1272,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.3): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1274,17 +1290,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1292,17 +1308,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1310,26 +1326,27 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.3): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.3): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1338,13 +1355,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.3): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -1358,476 +1375,647 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.3): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-imports': 7.22.15 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.3): + resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.3): + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) + dev: true + + /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.3): + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2): + /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.3): resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2): + /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) + dev: true + + /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + dev: true + + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2): + /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.3): resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2): + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.3): resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2): + /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.3): resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + dev: true + + /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + dev: true + + /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.3): + resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + dev: true + + /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2): + /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.3): resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2): + /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.2): - resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.3): + resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-runtime@7.23.2(@babel/core@7.23.2): - resolution: {integrity: sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==} + /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.3): + resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-imports': 7.22.15 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2): + /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.3): resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.3): resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.16.0(@babel/core@7.23.2): - resolution: {integrity: sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==} + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.23.2(@babel/core@7.23.3): + resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.2) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.23.2) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.23.2) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.23.2) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.2) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.2) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.2) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2) - '@babel/preset-modules': 0.1.6(@babel/core@7.23.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.3) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.3) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.3) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.3) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.3) + '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.3) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.3) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.3) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.3) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.3) '@babel/types': 7.23.0 - babel-plugin-polyfill-corejs2: 0.2.3(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.3.0(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.2.3(@babel/core@7.23.2) - core-js-compat: 3.33.0 + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.3) + babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.23.3) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.3) + core-js-compat: 3.33.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6(@babel/core@7.23.2): - resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==} + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.3): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) '@babel/types': 7.23.0 esutils: 2.0.3 dev: true @@ -1849,6 +2037,7 @@ packages: '@babel/code-frame': 7.22.13 '@babel/parser': 7.23.0 '@babel/types': 7.23.0 + dev: true /@babel/traverse@7.23.2: resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} @@ -1866,6 +2055,25 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true + + /@babel/traverse@7.23.3: + resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.3 + '@babel/types': 7.23.3 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true /@babel/types@7.23.0: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} @@ -1874,6 +2082,16 @@ packages: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + dev: true + + /@babel/types@7.23.3: + resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1914,41 +2132,12 @@ packages: case: 1.6.3 dev: true - /@coinbase/wallet-sdk@3.6.3(@babel/core@7.23.2): - resolution: {integrity: sha512-XUR4poOJE+dKzwBTdlM693CdLFitr046oZOVY3iDnbFcRrrQswhbDji7q4CmUcD4HxbfViX7PFoIwl79YQcukg==} - engines: {node: '>= 10.0.0'} - dependencies: - '@metamask/safe-event-emitter': 2.0.0 - '@solana/web3.js': 1.87.1 - bind-decorator: 1.0.11 - bn.js: 5.2.1 - buffer: 6.0.3 - clsx: 1.2.1 - eth-block-tracker: 4.4.3(@babel/core@7.23.2) - eth-json-rpc-filters: 4.2.2 - eth-rpc-errors: 4.0.2 - json-rpc-engine: 6.1.0 - keccak: 3.0.4 - preact: 10.18.1 - qs: 6.11.2 - rxjs: 6.6.7 - sha.js: 2.4.11 - stream-browserify: 3.0.0 - util: 0.12.5 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: false - /@coinbase/wallet-sdk@3.7.2: resolution: {integrity: sha512-lIGvXMsgpsQWci/XOMQIJ2nIZ8JUy/L+bvC0wkRaYarr0YylwpXrJ2gRM3hCXPS477pkyO7N/kSiAoRgEXUdJQ==} engines: {node: '>= 10.0.0'} dependencies: '@metamask/safe-event-emitter': 2.0.0 - '@solana/web3.js': 1.87.1 + '@solana/web3.js': 1.87.2 bind-decorator: 1.0.11 bn.js: 5.2.1 buffer: 6.0.3 @@ -1984,8 +2173,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@defi-wonderland/smock@2.3.4(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(hardhat@2.18.1): - resolution: {integrity: sha512-VYJbsoCOdFRyGkAwvaQhQRrU6V8AjK3five8xdbo41DEE9n3qXzUNBUxyD9HhXB/dWWPFWT21IGw5Ztl6Qw3Ew==} + /@defi-wonderland/smock@2.3.5(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(hardhat@2.18.2): + resolution: {integrity: sha512-klANj1hUpc3cd2ShXdVH/bEGwxJd+LxOngkF5gLcIbg6b37RCgMPMmR/94/hgL62F8bfWtuNKsQD7K+c6M5fWQ==} peerDependencies: '@ethersproject/abi': ^5 '@ethersproject/abstract-provider': ^5 @@ -2000,10 +2189,10 @@ packages: '@nomicfoundation/ethereumjs-evm': 1.3.2 '@nomicfoundation/ethereumjs-util': 8.0.6 '@nomicfoundation/ethereumjs-vm': 6.4.2 - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.1) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.2) diff: 5.1.0 ethers: 5.7.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) lodash.isequal: 4.5.0 lodash.isequalwith: 4.4.0 rxjs: 7.8.1 @@ -2020,7 +2209,7 @@ packages: eth-ens-namehash: 2.0.8 solc: 0.4.26 testrpc: 0.0.1 - web3-utils: 1.10.2 + web3-utils: 1.10.3 dev: true /@ensdomains/resolver@0.2.4: @@ -2028,6 +2217,15 @@ packages: deprecated: Please use @ensdomains/ens-contracts dev: true + /@esbuild/android-arm64@0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -2037,13 +2235,13 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.15.13: - resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==} + /@esbuild/android-arm64@0.19.5: + resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true - dev: true + dev: false optional: true /@esbuild/android-arm@0.15.18: @@ -2055,6 +2253,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -2064,35 +2271,107 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + /@esbuild/android-arm@0.19.5: + resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} engines: {node: '>=12'} - cpu: [x64] + cpu: [arm] os: [android] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + /@esbuild/android-x64@0.16.17: + resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] requiresBuild: true dev: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] - os: [darwin] + os: [android] requiresBuild: true dev: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + /@esbuild/android-x64@0.19.5: + resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.16.17: + resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.5: + resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.16.17: + resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.5: + resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.16.17: + resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2100,6 +2379,24 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.19.5: + resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.16.17: + resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -2109,6 +2406,24 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.19.5: + resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -2118,6 +2433,24 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.19.5: + resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -2127,6 +2460,24 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.19.5: + resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.16.17: + resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -2136,13 +2487,13 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.15.13: - resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==} + /@esbuild/linux-ia32@0.19.5: + resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} engines: {node: '>=12'} - cpu: [loong64] + cpu: [ia32] os: [linux] requiresBuild: true - dev: true + dev: false optional: true /@esbuild/linux-loong64@0.15.18: @@ -2154,6 +2505,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.16.17: + resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -2163,6 +2523,24 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.19.5: + resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.16.17: + resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -2172,6 +2550,24 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.19.5: + resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.16.17: + resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -2181,6 +2577,24 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.19.5: + resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.16.17: + resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -2190,6 +2604,24 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.19.5: + resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.16.17: + resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -2199,6 +2631,24 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.19.5: + resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.16.17: + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -2208,6 +2658,24 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.19.5: + resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.16.17: + resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -2217,6 +2685,24 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.19.5: + resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.16.17: + resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -2226,6 +2712,24 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.19.5: + resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.16.17: + resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -2235,6 +2739,24 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.19.5: + resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.16.17: + resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -2244,10 +2766,46 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + /@esbuild/win32-arm64@0.19.5: + resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.16.17: + resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.5: + resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.16.17: + resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} - cpu: [ia32] + cpu: [x64] os: [win32] requiresBuild: true dev: true @@ -2262,23 +2820,37 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@esbuild/win32-x64@0.19.5: + resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.53.0 eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint-community/regexpp@4.9.1: resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -2294,8 +2866,8 @@ packages: - supports-color dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -2320,7 +2892,7 @@ packages: '@resolver-engine/imports-fs': 0.3.3 '@typechain/ethers-v5': 2.0.0(ethers@5.7.2)(typechain@3.0.0) '@types/mkdirp': 0.5.2 - '@types/node-fetch': 2.6.6 + '@types/node-fetch': 2.6.9 ethers: 5.7.2 mkdirp: 0.5.6 node-fetch: 2.7.0 @@ -2378,6 +2950,7 @@ packages: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true + dev: true /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} @@ -2386,6 +2959,7 @@ packages: '@ethereumjs/rlp': 4.0.1 ethereum-cryptography: 2.1.2 micro-ftch: 0.3.1 + dev: true /@ethersproject/abi@5.0.0-beta.153: resolution: {integrity: sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==} @@ -2491,7 +3065,7 @@ packages: resolution: {integrity: sha512-DWvhuw7Dg8JPyhMbh/CNYOwsTLjXRx/HGkacIL5rBocG8jJC0kmixwoK/J3YblO4vtcyBLMa+sV74RJZK2iyHg==} dependencies: '@ethersproject/web': 5.7.1 - ethers: 5.7.1 + ethers: 5.7.2 scrypt-js: 3.0.1 transitivePeerDependencies: - bufferutil @@ -2569,34 +3143,6 @@ packages: dependencies: '@ethersproject/logger': 5.7.0 - /@ethersproject/providers@5.7.1: - resolution: {integrity: sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - bech32: 1.1.4 - ws: 7.4.6 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@ethersproject/providers@5.7.2: resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} dependencies: @@ -2623,7 +3169,6 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true /@ethersproject/random@5.7.0: resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} @@ -2737,13 +3282,13 @@ packages: resolution: {integrity: sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==} dependencies: '@formatjs/intl-localematcher': 0.2.25 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@formatjs/fast-memoize@1.2.1: resolution: {integrity: sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@formatjs/icu-messageformat-parser@2.1.0: @@ -2751,20 +3296,20 @@ packages: dependencies: '@formatjs/ecma402-abstract': 1.11.4 '@formatjs/icu-skeleton-parser': 1.3.6 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@formatjs/icu-skeleton-parser@1.3.6: resolution: {integrity: sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==} dependencies: '@formatjs/ecma402-abstract': 1.11.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@formatjs/intl-localematcher@0.2.25: resolution: {integrity: sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@foundry-rs/easy-foundryup@0.1.3: @@ -2774,7 +3319,7 @@ packages: ts-interface-checker: 0.1.13 dev: true - /@foundry-rs/hardhat-forge@0.1.17(@nomiclabs/hardhat-ethers@2.2.3)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.1): + /@foundry-rs/hardhat-forge@0.1.17(@nomiclabs/hardhat-ethers@2.2.3)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.2): resolution: {integrity: sha512-2wxzxA12CQmT11PH/KigyVTNm/4vzsVtzVZow6gwCbC41fTyf73a5qbggHZFRR74JXfmvVSkX1BJitTmdzQvxw==} peerDependencies: '@nomiclabs/hardhat-ethers': ^2.0.0 @@ -2783,9 +3328,9 @@ packages: hardhat: ^2.0.0 dependencies: '@foundry-rs/easy-foundryup': 0.1.3 - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.1) - '@nomiclabs/hardhat-waffle': 2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.10)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.1) - '@types/sinon-chai': 3.2.10 + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.2) + '@nomiclabs/hardhat-waffle': 2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.11)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.2) + '@types/sinon-chai': 3.2.11 '@types/web3': 1.0.19 camelcase-keys: 7.0.2 debug: 4.3.4(supports-color@8.1.1) @@ -2793,7 +3338,7 @@ packages: ethers: 5.7.2 fs-extra: 10.1.0 glob: 7.2.3 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) true-case-path: 2.2.1 ts-interface-checker: 0.1.13 transitivePeerDependencies: @@ -2824,11 +3369,11 @@ packages: react: 18.2.0 dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: @@ -2840,8 +3385,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@isaacs/cliui@8.0.2: @@ -2877,7 +3422,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -2898,7 +3443,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -2935,7 +3480,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 jest-mock: 27.5.1 dev: true @@ -2945,7 +3490,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.8.6 + '@types/node': 20.9.0 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -2974,7 +3519,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2998,6 +3543,13 @@ packages: - supports-color dev: true + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jest/source-map@27.5.1: resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3013,7 +3565,7 @@ packages: dependencies: '@jest/console': 27.5.1 '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.5 collect-v8-coverage: 1.0.2 dev: true @@ -3056,10 +3608,10 @@ packages: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.2 - '@types/node': 20.8.6 - '@types/yargs': 16.0.6 + '@types/istanbul-lib-coverage': 2.0.5 + '@types/istanbul-reports': 3.0.3 + '@types/node': 20.9.0 + '@types/yargs': 16.0.7 chalk: 4.1.2 dev: true @@ -3069,7 +3621,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -3083,14 +3635,14 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -3153,7 +3705,7 @@ packages: resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /@lottiefiles/svelte-lottie-player@0.2.0: @@ -3165,8 +3717,8 @@ packages: /@mdx-js/mdx@2.3.0: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: - '@types/estree-jsx': 1.0.1 - '@types/mdx': 2.0.8 + '@types/estree-jsx': 1.0.3 + '@types/mdx': 2.0.10 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -3191,8 +3743,8 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.8 - '@types/react': 18.2.28 + '@types/mdx': 2.0.10 + '@types/react': 18.2.39 react: 18.2.0 dev: false @@ -3214,7 +3766,7 @@ packages: resolution: {integrity: sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==} engines: {node: '>=14.0.0'} dependencies: - '@types/debug': 4.1.7 + '@types/debug': 4.1.12 debug: 4.3.4(supports-color@8.1.1) semver: 7.5.4 superstruct: 1.0.3 @@ -3390,12 +3942,12 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.9 dev: false - /@next/env@13.5.4: - resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} + /@next/env@13.5.6: + resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==} dev: false - /@next/swc-darwin-arm64@13.5.4: - resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==} + /@next/swc-darwin-arm64@13.5.6: + resolution: {integrity: sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3403,8 +3955,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@13.5.4: - resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==} + /@next/swc-darwin-x64@13.5.6: + resolution: {integrity: sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3412,8 +3964,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@13.5.4: - resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==} + /@next/swc-linux-arm64-gnu@13.5.6: + resolution: {integrity: sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3421,8 +3973,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@13.5.4: - resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==} + /@next/swc-linux-arm64-musl@13.5.6: + resolution: {integrity: sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3430,8 +3982,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@13.5.4: - resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==} + /@next/swc-linux-x64-gnu@13.5.6: + resolution: {integrity: sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3439,8 +3991,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@13.5.4: - resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==} + /@next/swc-linux-x64-musl@13.5.6: + resolution: {integrity: sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3448,8 +4000,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@13.5.4: - resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==} + /@next/swc-win32-arm64-msvc@13.5.6: + resolution: {integrity: sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3457,8 +4009,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@13.5.4: - resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==} + /@next/swc-win32-ia32-msvc@13.5.6: + resolution: {integrity: sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3466,8 +4018,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@13.5.4: - resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==} + /@next/swc-win32-x64-msvc@13.5.6: + resolution: {integrity: sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3475,16 +4027,11 @@ packages: dev: false optional: true - /@noble/curves@1.0.0: - resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} - dependencies: - '@noble/hashes': 1.3.0 - dev: true - /@noble/curves@1.1.0: resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} dependencies: '@noble/hashes': 1.3.1 + dev: true /@noble/curves@1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -3495,13 +4042,10 @@ packages: resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} dev: true - /@noble/hashes@1.3.0: - resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} - dev: true - /@noble/hashes@1.3.1: resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} engines: {node: '>= 16'} + dev: true /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} @@ -3650,7 +4194,7 @@ packages: dependencies: '@nomicfoundation/ethereumjs-common': 3.1.2 '@nomicfoundation/ethereumjs-util': 8.0.6 - '@types/async-eventemitter': 0.2.2 + '@types/async-eventemitter': 0.2.3 async-eventemitter: 0.2.4 debug: 4.3.4(supports-color@8.1.1) ethereum-cryptography: 0.1.3 @@ -3795,7 +4339,7 @@ packages: '@nomicfoundation/ethereumjs-trie': 5.0.5 '@nomicfoundation/ethereumjs-tx': 4.1.2 '@nomicfoundation/ethereumjs-util': 8.0.6 - '@types/async-eventemitter': 0.2.2 + '@types/async-eventemitter': 0.2.3 async-eventemitter: 0.2.4 debug: 4.3.4(supports-color@8.1.1) ethereum-cryptography: 0.1.3 @@ -3829,36 +4373,36 @@ packages: - utf-8-validate dev: true - /@nomicfoundation/hardhat-ethers@3.0.4(ethers@5.7.2)(hardhat@2.18.1): - resolution: {integrity: sha512-k9qbLoY7qn6C6Y1LI0gk2kyHXil2Tauj4kGzQ8pgxYXIGw8lWn8tuuL72E11CrlKaXRUvOgF0EXrv/msPI2SbA==} + /@nomicfoundation/hardhat-ethers@3.0.5(ethers@5.7.2)(hardhat@2.18.2): + resolution: {integrity: sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==} peerDependencies: ethers: ^6.1.0 hardhat: ^2.0.0 dependencies: debug: 4.3.4(supports-color@8.1.1) ethers: 5.7.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color dev: true - /@nomicfoundation/hardhat-foundry@1.1.1(hardhat@2.18.1): + /@nomicfoundation/hardhat-foundry@1.1.1(hardhat@2.18.2): resolution: {integrity: sha512-cXGCBHAiXas9Pg9MhMOpBVQCkWRYoRFG7GJJAph+sdQsfd22iRs5U5Vs9XmpGEQd1yEvYISQZMeE68Nxj65iUQ==} peerDependencies: hardhat: ^2.17.2 dependencies: chalk: 2.4.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) dev: true - /@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.18.1): + /@nomicfoundation/hardhat-network-helpers@1.0.9(hardhat@2.18.2): resolution: {integrity: sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==} peerDependencies: hardhat: ^2.9.5 dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) dev: true /@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1: @@ -3967,17 +4511,17 @@ packages: '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 dev: true - /@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.18.1): + /@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.18.2): resolution: {integrity: sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==} peerDependencies: ethers: ^5.0.0 hardhat: ^2.0.0 dependencies: ethers: 5.7.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) dev: true - /@nomiclabs/hardhat-etherscan@3.1.7(hardhat@2.18.1): + /@nomiclabs/hardhat-etherscan@3.1.7(hardhat@2.18.2): resolution: {integrity: sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==} peerDependencies: hardhat: ^2.0.4 @@ -3988,16 +4532,32 @@ packages: chalk: 2.4.2 debug: 4.3.4(supports-color@8.1.1) fs-extra: 7.0.1 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) lodash: 4.17.21 semver: 6.3.1 table: 6.8.1 - undici: 5.26.3 + undici: 5.26.4 transitivePeerDependencies: - supports-color dev: true - /@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.10)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.1): + /@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.11)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.2): + resolution: {integrity: sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==} + peerDependencies: + '@nomiclabs/hardhat-ethers': ^2.0.0 + '@types/sinon-chai': ^3.2.3 + ethereum-waffle: '*' + ethers: ^5.0.0 + hardhat: ^2.0.0 + dependencies: + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.2) + '@types/sinon-chai': 3.2.11 + ethereum-waffle: 3.4.4(typescript@5.2.2) + ethers: 5.7.2 + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) + dev: true + + /@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.12)(ethereum-waffle@3.4.4)(ethers@5.7.2)(hardhat@2.18.2): resolution: {integrity: sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==} peerDependencies: '@nomiclabs/hardhat-ethers': ^2.0.0 @@ -4006,11 +4566,11 @@ packages: ethers: ^5.0.0 hardhat: ^2.0.0 dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.1) - '@types/sinon-chai': 3.2.10 + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.18.2) + '@types/sinon-chai': 3.2.12 ethereum-waffle: 3.4.4(typescript@5.2.2) ethers: 5.7.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) dev: true /@npmcli/fs@1.1.1: @@ -4029,11 +4589,11 @@ packages: rimraf: 3.0.2 dev: true - /@openzeppelin/defender-admin-client@1.49.0(debug@4.3.4): - resolution: {integrity: sha512-ka+GTbsnGO6j1R2AGj027uu29es/EBVs3VjJStb+7u/1lNhx1xSRS11JBD0a0GNhrwqsKU4czIemlIKMlUzhhQ==} + /@openzeppelin/defender-admin-client@1.52.0(debug@4.3.4): + resolution: {integrity: sha512-CKs5mMLL7+nXyugsHaAw0aPfLwFNA+vq7ftuJ3sWUKdbQRZsJ+/189HAwp2/BJC64yUbarEeWqOh3jNpaKRJLw==} dependencies: - '@openzeppelin/defender-base-client': 1.49.0(debug@4.3.4) - axios: 1.4.0(debug@4.3.4) + '@openzeppelin/defender-base-client': 1.52.0(debug@4.3.4) + axios: 1.6.1(debug@4.3.4) ethers: 5.7.2 lodash: 4.17.21 node-fetch: 2.7.0 @@ -4044,12 +4604,12 @@ packages: - utf-8-validate dev: true - /@openzeppelin/defender-base-client@1.49.0(debug@4.3.4): - resolution: {integrity: sha512-nG2jslaAUbo2ZW9yBStstxTPscAchN/vRdJ16M34whuZRtUp1bccCBVLdv3oiPOdjwFaa1OBXJkheN+eF8alzA==} + /@openzeppelin/defender-base-client@1.52.0(debug@4.3.4): + resolution: {integrity: sha512-VFNu/pjVpAnFKIfuKT1cn9dRpbcO8FO8EAmVZ2XrrAsKXEWDZ3TNBtACxmj7fAu0ad/TzRkb66o5rMts7Fv7jw==} dependencies: amazon-cognito-identity-js: 6.3.6 async-retry: 1.3.3 - axios: 1.4.0(debug@4.3.4) + axios: 1.6.1(debug@4.3.4) lodash: 4.17.21 node-fetch: 2.7.0 transitivePeerDependencies: @@ -4057,8 +4617,8 @@ packages: - encoding dev: true - /@openzeppelin/defender-sdk-base-client@1.3.0: - resolution: {integrity: sha512-OMMt7NaAL8C95ralF9nMeKZpg96COLZT9FPpGpPsI7aB8fVZfCM8+6k99gTF44hMS6IsRdN2WthS3m7VzQeeoA==} + /@openzeppelin/defender-sdk-base-client@1.6.0: + resolution: {integrity: sha512-LUhSVdmN4XapWzrfdl5+38IOtwVoBQL+9Nq/4bLfx7IwTDB9fwGYSGhGTDETkVQPN4zqJ7m8I7CNowilL4Ta6A==} dependencies: amazon-cognito-identity-js: 6.3.6 async-retry: 1.3.3 @@ -4066,20 +4626,20 @@ packages: - encoding dev: true - /@openzeppelin/defender-sdk-deploy-client@1.3.0(debug@4.3.4): - resolution: {integrity: sha512-RTYM3HnVvD2d5NoYfTug8UwT41e0Jjwb13lk9v0Jl8z7mcclUVvAnKD4DHJ4b8RhKpg4B15oLQK/Igzjg1HHRA==} + /@openzeppelin/defender-sdk-deploy-client@1.6.0(debug@4.3.4): + resolution: {integrity: sha512-JTcy97ZktnkhBmPdSYmF8qB5OpWRDm0thKz98JDOJA/qeT/t8uJOnmRzpG2u5LypCOL9fRfL2HzhvmTy6qhGEQ==} dependencies: '@ethersproject/abi': 5.7.0 - '@openzeppelin/defender-sdk-base-client': 1.3.0 - axios: 1.4.0(debug@4.3.4) + '@openzeppelin/defender-sdk-base-client': 1.6.0 + axios: 1.6.1(debug@4.3.4) lodash: 4.17.21 transitivePeerDependencies: - debug - encoding dev: true - /@openzeppelin/hardhat-upgrades@2.3.3(@nomicfoundation/hardhat-ethers@3.0.4)(ethers@5.7.2)(hardhat@2.18.1): - resolution: {integrity: sha512-rF87xYSz6Q2WFq5zcUF1T1tx3Kiq83hmke0xOBn5Qgrl++osseiDwS5oXfDK3NSWvj06oYGLERRGHcXnpQ31FQ==} + /@openzeppelin/hardhat-upgrades@2.4.3(@nomicfoundation/hardhat-ethers@3.0.5)(ethers@5.7.2)(hardhat@2.18.2): + resolution: {integrity: sha512-MYLbG6E3llFOOfphDSrFtjGmSRelfWc1hW0wcK1ANR2t0ZEetahGx4dAARPKev5R4WsckKT1wlxb8pmabczc2Q==} hasBin: true peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.0 @@ -4090,19 +4650,19 @@ packages: '@nomicfoundation/hardhat-verify': optional: true dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.4(ethers@5.7.2)(hardhat@2.18.1) - '@openzeppelin/defender-admin-client': 1.49.0(debug@4.3.4) - '@openzeppelin/defender-base-client': 1.49.0(debug@4.3.4) - '@openzeppelin/defender-sdk-base-client': 1.3.0 - '@openzeppelin/defender-sdk-deploy-client': 1.3.0(debug@4.3.4) - '@openzeppelin/upgrades-core': 1.30.1 + '@nomicfoundation/hardhat-ethers': 3.0.5(ethers@5.7.2)(hardhat@2.18.2) + '@openzeppelin/defender-admin-client': 1.52.0(debug@4.3.4) + '@openzeppelin/defender-base-client': 1.52.0(debug@4.3.4) + '@openzeppelin/defender-sdk-base-client': 1.6.0 + '@openzeppelin/defender-sdk-deploy-client': 1.6.0(debug@4.3.4) + '@openzeppelin/upgrades-core': 1.31.3 chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) ethereumjs-util: 7.1.5 ethers: 5.7.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) proper-lockfile: 4.1.2 - undici: 5.26.3 + undici: 5.26.5 transitivePeerDependencies: - bufferutil - encoding @@ -4110,8 +4670,8 @@ packages: - utf-8-validate dev: true - /@openzeppelin/upgrades-core@1.30.1: - resolution: {integrity: sha512-mFUsZibpiWJv1DR2K89cjbFIseTc2CUV4D2kvPPK5xYke6m7+M87qcr/Xk24mMrdCmG7RWNxQohhVnzESI6Eeg==} + /@openzeppelin/upgrades-core@1.31.3: + resolution: {integrity: sha512-i7q0IuItKS4uO0clJwm4CARmt98aA9dLfKh38HFRbX+aFLGXwF0sOvB2iwr6f87ShH7d3DNuLrVgnnXUrYb7CA==} hasBin: true dependencies: cbor: 9.0.1 @@ -4142,20 +4702,19 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 - fast-glob: 3.3.1 + fast-glob: 3.3.2 is-glob: 4.0.3 open: 9.1.0 picocolors: 1.0.0 tslib: 2.6.2 dev: true - /@playwright/test@1.28.1: - resolution: {integrity: sha512-xN6spdqrNlwSn9KabIhqfZR7IWjPpFK1835tFNgjrlysaSezuX8PYUwaz38V/yI8TJLG9PkAMEXoHRXYXlpTPQ==} - engines: {node: '>=14'} + /@playwright/test@1.39.0: + resolution: {integrity: sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==} + engines: {node: '>=16'} hasBin: true dependencies: - '@types/node': 20.8.6 - playwright-core: 1.28.1 + playwright: 1.39.0 dev: true /@polka/url@1.0.0-next.23: @@ -4230,14 +4789,6 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils@4.2.1: - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true - /@safe-global/safe-apps-provider@0.17.1(typescript@5.2.2): resolution: {integrity: sha512-lYfRqrbbK1aKU1/UGkYWc/X7PgySYcumXKc5FB2uuwAs2Ghj8uETuW5BrwPqyjBknRxutFbTv+gth/JzjxAhdQ==} dependencies: @@ -4252,8 +4803,8 @@ packages: /@safe-global/safe-apps-sdk@8.0.0(typescript@5.2.2): resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.12.0 - viem: 1.16.6(typescript@5.2.2) + '@safe-global/safe-gateway-typescript-sdk': 3.13.2 + viem: 1.18.9(typescript@5.2.2)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript @@ -4263,16 +4814,16 @@ packages: /@safe-global/safe-apps-sdk@8.1.0(typescript@5.2.2): resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.12.0 - viem: 1.16.6(typescript@5.2.2) + '@safe-global/safe-gateway-typescript-sdk': 3.13.2 + viem: 1.18.9(typescript@5.2.2)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - /@safe-global/safe-gateway-typescript-sdk@3.12.0: - resolution: {integrity: sha512-hExCo62lScVC9/ztVqYEYL2pFxcqLTvB8fj0WtdP5FWrvbtEgD0pbVolchzD5bf85pbzvEwdAxSVS7EdCZxTNw==} + /@safe-global/safe-gateway-typescript-sdk@3.13.2: + resolution: {integrity: sha512-kGlJecJHBzGrGTq/yhLANh56t+Zur6Ubpt+/w03ARX1poDb4TM8vKU3iV8tuYpk359PPWp+Qvjnqb9oW2YQcYw==} engines: {node: '>=16'} /@scure/base@1.1.3: @@ -4286,20 +4837,13 @@ packages: '@scure/base': 1.1.3 dev: true - /@scure/bip32@1.3.0: - resolution: {integrity: sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==} - dependencies: - '@noble/curves': 1.0.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.3 - dev: true - /@scure/bip32@1.3.1: resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: '@noble/curves': 1.1.0 '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 + dev: true /@scure/bip32@1.3.2: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} @@ -4315,13 +4859,6 @@ packages: '@scure/base': 1.1.3 dev: true - /@scure/bip39@1.2.0: - resolution: {integrity: sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==} - dependencies: - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.3 - dev: true - /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: @@ -4398,6 +4935,10 @@ packages: tslib: 1.14.1 dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@0.14.0: resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} @@ -4424,8 +4965,8 @@ packages: '@sinonjs/commons': 1.8.6 dev: true - /@smithy/types@2.3.5: - resolution: {integrity: sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==} + /@smithy/types@2.4.0: + resolution: {integrity: sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 @@ -4437,8 +4978,8 @@ packages: dependencies: buffer: 6.0.3 - /@solana/web3.js@1.87.1: - resolution: {integrity: sha512-E8Y9bNlZ8TQlhOvCx1b7jG+TjA4SJLVwufmIk1+tcQctUhK5HiB1Q8ljd4yQDkFlk6OOeAlAeqvW0YntWJU94Q==} + /@solana/web3.js@1.87.2: + resolution: {integrity: sha512-TZNhS+tvJbYjm0LAvIkUy/3Aqgt2l6/3X6XsVUpvj5MGOl2Q6Ch8hYSxcUUtMbAFNN3sUXmV8NhhMLNJEvI6TA==} dependencies: '@babel/runtime': 7.23.2 '@noble/curves': 1.2.0 @@ -4453,7 +4994,7 @@ packages: fast-stable-stringify: 1.0.0 jayson: 4.1.0 node-fetch: 2.7.0 - rpc-websockets: 7.6.0 + rpc-websockets: 7.6.1 superstruct: 0.14.2 transitivePeerDependencies: - bufferutil @@ -4576,51 +5117,52 @@ packages: '@stablelib/random': 1.0.2 '@stablelib/wipe': 1.0.1 - /@sveltejs/adapter-auto@2.1.0(@sveltejs/kit@1.22.3): - resolution: {integrity: sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==} + /@sveltejs/adapter-auto@2.1.1(@sveltejs/kit@1.27.4): + resolution: {integrity: sha512-nzi6x/7/3Axh5VKQ8Eed3pYxastxoa06Y/bFhWb7h3Nu+nGRVxKAy3+hBJgmPCwWScy8n0TsstZjSVKfyrIHkg==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.22.3(svelte@4.1.0)(vite@4.4.9) - import-meta-resolve: 3.0.0 + '@sveltejs/kit': 1.27.4(svelte@4.2.3)(vite@4.5.0) + import-meta-resolve: 4.0.0 dev: true - /@sveltejs/adapter-static@2.0.2(@sveltejs/kit@1.22.3): - resolution: {integrity: sha512-9wYtf6s6ew7DHUHMrt55YpD1FgV7oWql2IGsW5BXquLxqcY9vjrqCFo0TzzDpo+ZPZkW/v77k0eOP6tsAb8HmQ==} + /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.27.4): + resolution: {integrity: sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==} peerDependencies: '@sveltejs/kit': ^1.5.0 dependencies: - '@sveltejs/kit': 1.22.3(svelte@4.1.0)(vite@4.4.9) + '@sveltejs/kit': 1.27.4(svelte@4.2.3)(vite@4.5.0) dev: true - /@sveltejs/kit@1.22.3(svelte@4.1.0)(vite@4.4.9): - resolution: {integrity: sha512-IpHD5wvuoOIHYaHQUBJ1zERD2Iz+fB/rBXhXjl8InKw6X4VKE9BSus+ttHhE7Ke+Ie9ecfilzX8BnWE3FeQyng==} + /@sveltejs/kit@1.27.4(svelte@4.2.3)(vite@4.5.0): + resolution: {integrity: sha512-Vxl8Jf0C1+/8i/slsxFOnwJntCBDLueO/O6GJ0390KUnyW3Zs+4ZiIinD+cEcYnJPQQ9CRzVSr9Bn6DbmTn4Dw==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true peerDependencies: - svelte: ^3.54.0 || ^4.0.0-next.0 + svelte: ^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.1.0)(vite@4.4.9) - '@types/cookie': 0.5.2 + '@sveltejs/vite-plugin-svelte': 2.5.2(svelte@4.2.3)(vite@4.5.0) + '@types/cookie': 0.5.4 cookie: 0.5.0 devalue: 4.3.2 esm-env: 1.0.0 kleur: 4.1.5 magic-string: 0.30.5 - mime: 3.0.0 + mrmime: 1.0.1 sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.3 - svelte: 4.1.0 - undici: 5.22.1 - vite: 4.4.9(@types/node@20.8.6) + svelte: 4.2.3 + tiny-glob: 0.2.9 + undici: 5.26.5 + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.1.0)(vite@4.4.9): + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.2)(svelte@4.2.3)(vite@4.5.0): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -4628,53 +5170,49 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.1.0)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte': 2.5.2(svelte@4.2.3)(vite@4.5.0) debug: 4.3.4(supports-color@8.1.1) - svelte: 4.1.0 - vite: 4.4.9(@types/node@20.8.6) + svelte: 4.2.3 + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@1.0.1(svelte@3.53.1)(vite@3.2.7): - resolution: {integrity: sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==} + /@sveltejs/vite-plugin-svelte@1.4.0(svelte@3.59.2)(vite@3.2.7): + resolution: {integrity: sha512-6QupI/jemMfK+yI2pMtJcu5iO2gtgTfcBdGwMZZt+lgbFELhszbDl6Qjh000HgAV8+XUA+8EY8DusOFk8WhOIg==} engines: {node: ^14.18.0 || >= 16} peerDependencies: - diff-match-patch: ^1.0.5 svelte: ^3.44.0 vite: ^3.0.0 - peerDependenciesMeta: - diff-match-patch: - optional: true dependencies: - '@rollup/pluginutils': 4.2.1 debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.26.7 - svelte: 3.53.1 - svelte-hmr: 0.14.12(svelte@3.53.1) + svelte: 3.59.2 + svelte-hmr: 0.15.3(svelte@3.59.2) vite: 3.2.7 + vitefu: 0.2.5(vite@3.2.7) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.1.0)(vite@4.4.9): - resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==} + /@sveltejs/vite-plugin-svelte@2.5.2(svelte@4.2.3)(vite@4.5.0): + resolution: {integrity: sha512-Dfy0Rbl+IctOVfJvWGxrX/3m6vxPLH8o0x+8FA5QEyMUQMo4kGOVIojjryU7YomBAexOTAuYf1RT7809yDziaA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: - svelte: ^3.54.0 || ^4.0.0 + svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.1.0)(vite@4.4.9) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.2)(svelte@4.2.3)(vite@4.5.0) debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 - svelte: 4.1.0 - svelte-hmr: 0.15.3(svelte@4.1.0) - vite: 4.4.9(@types/node@20.8.6) - vitefu: 0.2.5(vite@4.4.9) + svelte: 4.2.3 + svelte-hmr: 0.15.3(svelte@4.2.3) + vite: 4.5.0(@types/node@20.9.0) + vitefu: 0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color dev: true @@ -4691,7 +5229,7 @@ packages: /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: false /@szmarczak/http-timer@1.1.2: @@ -4717,7 +5255,7 @@ packages: peerDependencies: react: ^18.2.0 dependencies: - mermaid: 10.5.0 + mermaid: 10.6.1 react: 18.2.0 unist-util-visit: 5.0.0 transitivePeerDependencies: @@ -4744,7 +5282,7 @@ packages: /@ts-morph/common@0.20.0: resolution: {integrity: sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q==} dependencies: - fast-glob: 3.3.1 + fast-glob: 3.3.2 minimatch: 7.4.6 mkdirp: 2.1.6 path-browserify: 1.0.1 @@ -4812,7 +5350,7 @@ packages: typescript: 5.2.2 dev: true - /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@5.7.2)(hardhat@2.18.1)(typechain@8.3.2): + /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@5.7.2)(hardhat@2.18.2)(typechain@8.3.2): resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} peerDependencies: '@typechain/ethers-v6': ^0.5.1 @@ -4823,12 +5361,12 @@ packages: '@typechain/ethers-v6': 0.5.1(ethers@5.7.2)(typechain@8.3.2)(typescript@5.2.2) ethers: 5.7.2 fs-extra: 9.1.0 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) typechain: 8.3.2(typescript@5.2.2) dev: true - /@types/abstract-leveldown@7.2.3: - resolution: {integrity: sha512-YAdL8tIYbiKoFjAf/0Ir3mvRJ/iFvBP/FK0I8Xa5rGWgVcq0xWOEInzlJfs6TIPWFweEOTKgNSBdxneUcHRvaw==} + /@types/abstract-leveldown@7.2.4: + resolution: {integrity: sha512-ygy0hYyHdKnAtvCGUFEFvr3YV7Y6Q4akyRkZpM3RSUMYGSr35ZGRCT9Div+la4DpRUiwYUhJ6l75JBz6EORmpg==} dev: true /@types/acorn@4.0.6: @@ -4837,35 +5375,37 @@ packages: '@types/estree': 0.0.50 dev: false - /@types/async-eventemitter@0.2.2: - resolution: {integrity: sha512-cUFkZN+0TXQ2HYX/vbVUa/0+3/kXtuVrojjzq4Yo8X68UDvwngMf7uOZWT7BcA5P6MhCNd/zOCuczgPAQxsNIQ==} + /@types/async-eventemitter@0.2.3: + resolution: {integrity: sha512-QHcih+LsYHY+ODMMTh1BoBC2f95HqkFzf7aEnre9xxkroCglpix7ZGKZI56AnwAipNoHLbIs4Ft9xTB5LFYslQ==} + dependencies: + '@types/events': 3.0.2 dev: true - /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} + /@types/babel__core@7.20.3: + resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==} dependencies: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 - '@types/babel__generator': 7.6.5 - '@types/babel__template': 7.4.2 - '@types/babel__traverse': 7.20.2 + '@types/babel__generator': 7.6.6 + '@types/babel__template': 7.4.3 + '@types/babel__traverse': 7.20.3 dev: true - /@types/babel__generator@7.6.5: - resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} + /@types/babel__generator@7.6.6: + resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==} dependencies: '@babel/types': 7.23.0 dev: true - /@types/babel__template@7.4.2: - resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} + /@types/babel__template@7.4.3: + resolution: {integrity: sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==} dependencies: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 dev: true - /@types/babel__traverse@7.20.2: - resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} + /@types/babel__traverse@7.20.3: + resolution: {integrity: sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==} dependencies: '@babel/types': 7.23.0 dev: true @@ -4873,85 +5413,86 @@ packages: /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 + dev: true - /@types/bn.js@5.1.2: - resolution: {integrity: sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg==} + /@types/bn.js@5.1.3: + resolution: {integrity: sha512-wT1B4iIO82ecXkdN6waCK8Ou7E71WU+mP1osDA5Q8c6Ur+ozU2vIKUIhSpUr6uE5L2YHocKS1Z2jG2fBC1YVeg==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} requiresBuild: true dependencies: - '@types/http-cache-semantics': 4.0.2 + '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.8.6 - '@types/responselike': 1.0.1 + '@types/node': 20.9.0 + '@types/responselike': 1.0.3 dev: true optional: true - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + /@types/chai-subset@1.3.5: + resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} dependencies: - '@types/chai': 4.3.8 + '@types/chai': 4.3.10 dev: true - /@types/chai@4.3.8: - resolution: {integrity: sha512-yW/qTM4mRBBcsA9Xw9FbcImYtFPY7sgr+G/O5RDYVmxiy9a+pE5FyoFUi8JYCZY5nicj8atrr1pcfPiYpeNGOA==} + /@types/chai@4.3.10: + resolution: {integrity: sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==} dev: true /@types/concat-stream@1.6.1: resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true - /@types/connect@3.4.36: - resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + /@types/connect@3.4.37: + resolution: {integrity: sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 - /@types/cookie@0.5.2: - resolution: {integrity: sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==} + /@types/cookie@0.5.4: + resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==} dev: true - /@types/d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} + /@types/d3-scale-chromatic@3.0.3: + resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} dev: false - /@types/d3-scale@4.0.5: - resolution: {integrity: sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==} + /@types/d3-scale@4.0.8: + resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} dependencies: - '@types/d3-time': 3.0.1 + '@types/d3-time': 3.0.3 dev: false - /@types/d3-time@3.0.1: - resolution: {integrity: sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==} + /@types/d3-time@3.0.3: + resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} dev: false - /@types/debug@4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/ms': 0.7.32 + '@types/ms': 0.7.34 - /@types/eslint-scope@3.7.5: - resolution: {integrity: sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==} + /@types/eslint-scope@3.7.6: + resolution: {integrity: sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==} dependencies: - '@types/eslint': 8.2.1 + '@types/eslint': 8.44.6 '@types/estree': 0.0.50 dev: true - /@types/eslint@8.2.1: - resolution: {integrity: sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==} + /@types/eslint@8.44.6: + resolution: {integrity: sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==} dependencies: '@types/estree': 0.0.50 - '@types/json-schema': 7.0.13 + '@types/json-schema': 7.0.14 dev: true - /@types/estree-jsx@1.0.1: - resolution: {integrity: sha512-sHyakZlAezNFxmYRo0fopDZW+XvK6ipeZkkp5EAOLjdPfZp8VjZBJ67vSRI99RSCAoqXVmXOHS4fnWoxpuGQtQ==} + /@types/estree-jsx@1.0.3: + resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} dependencies: '@types/estree': 0.0.50 dev: false @@ -4963,71 +5504,82 @@ packages: /@types/estree@0.0.50: resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} - /@types/estree@1.0.2: - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + /@types/estree@1.0.3: + resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/events@3.0.2: + resolution: {integrity: sha512-v4Mr60wJuF069iZZCdY5DKhfj0l6eXNJtbSM/oMDNdRLoBEUsktmKnswkz0X3OAic5W8Qy/YU6owKE4A66Y46A==} + dev: true /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true - /@types/graceful-fs@4.1.7: - resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + /@types/graceful-fs@4.1.8: + resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true - /@types/hast@2.3.6: - resolution: {integrity: sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==} + /@types/hast@2.3.8: + resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 dev: false - /@types/hast@3.0.1: - resolution: {integrity: sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==} + /@types/hast@3.0.3: + resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 dev: false /@types/html-minifier-terser@6.1.0: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: true - /@types/http-cache-semantics@4.0.2: - resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} requiresBuild: true dev: true optional: true - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + /@types/istanbul-lib-coverage@2.0.5: + resolution: {integrity: sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==} + dev: true + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true - /@types/istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} + /@types/istanbul-lib-report@3.0.2: + resolution: {integrity: sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.5 dev: true - /@types/istanbul-reports@3.0.2: - resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} + /@types/istanbul-reports@3.0.3: + resolution: {integrity: sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==} dependencies: - '@types/istanbul-lib-report': 3.0.1 + '@types/istanbul-lib-report': 3.0.2 dev: true /@types/jest@27.5.2: @@ -5037,91 +5589,95 @@ packages: pretty-format: 27.5.1 dev: true - /@types/js-yaml@4.0.7: - resolution: {integrity: sha512-RJZP9WAMMr1514KbdSXkLRrKvYQacjr1+HWnY8pui/uBTBoSgD9ZGR17u/d4nb9NpERp0FkdLBe7hq8NIPBgkg==} + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} dev: false - /@types/json-schema@7.0.13: - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + /@types/json-schema@7.0.14: + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/katex@0.16.3: - resolution: {integrity: sha512-CeVMX9EhVUW8MWnei05eIRks4D5Wscw/W9Byz1s3PA+yJvcdvq9SaDjiUKvRvEgjpdTyJMjQA43ae4KTwsvOPg==} + /@types/katex@0.16.7: + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} dev: false /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} requiresBuild: true dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true optional: true - /@types/level-errors@3.0.0: - resolution: {integrity: sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==} + /@types/level-errors@3.0.1: + resolution: {integrity: sha512-eFJZWaOUhgjSqgEsPKJZrqXS9aEDUQh/5F9saFhhkR5uEVKlYb4GSG8XyoVC7APklcQKPGDVenTointTZBGIQg==} dev: true /@types/levelup@4.3.3: resolution: {integrity: sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==} dependencies: - '@types/abstract-leveldown': 7.2.3 - '@types/level-errors': 3.0.0 - '@types/node': 20.8.6 + '@types/abstract-leveldown': 7.2.4 + '@types/level-errors': 3.0.1 + '@types/node': 20.9.0 dev: true /@types/lru-cache@5.1.1: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: true - /@types/mdast@3.0.13: - resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 dev: false - /@types/mdast@4.0.1: - resolution: {integrity: sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==} + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 dev: false - /@types/mdx@2.0.8: - resolution: {integrity: sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==} + /@types/mdx@2.0.10: + resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} dev: false /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist@1.2.3: - resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} + /@types/minimist@1.2.4: + resolution: {integrity: sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ==} dev: true - /@types/mixpanel@2.14.3: - resolution: {integrity: sha512-pc/3bFJNX74nCVFyx4jd606k9hNi6rdeU9qyqbiws5/Q8YwoExdzpOl1qp7oLbSigl1jju1b/f0XcP/b/THj2A==} + /@types/mixpanel@2.14.7: + resolution: {integrity: sha512-cpAqrEGvVGO0AV5iKp2AxLnV60OAuFsOF8N3x0SpUIkg6cWjiqjBRmIvO3DXnFPMBo3wBegFNpYshyh8PhKrxw==} dev: true /@types/mkdirp@0.5.2: resolution: {integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true - /@types/mocha@10.0.2: - resolution: {integrity: sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==} + /@types/mocha@10.0.6: + resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/ms@0.7.32: - resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - /@types/node-fetch@2.6.6: - resolution: {integrity: sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==} + /@types/node-fetch@2.6.9: + resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 form-data: 4.0.0 dev: true @@ -5132,152 +5688,183 @@ packages: /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - /@types/node@20.8.6: - resolution: {integrity: sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==} + /@types/node@20.9.0: + resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} dependencies: - undici-types: 5.25.3 + undici-types: 5.26.5 /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true - /@types/normalize-package-data@2.4.2: - resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} + /@types/normalize-package-data@2.4.3: + resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} + dev: true + + /@types/object-hash@3.0.6: + resolution: {integrity: sha512-fOBV8C1FIu2ELinoILQ+ApxcUKz4ngq+IWUYrxSGjXzzjUALijilampwkMgEtJ+h2njAW3pi853QpzNVCHB73w==} dev: true - /@types/pbkdf2@3.1.0: - resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} + /@types/pbkdf2@3.1.1: + resolution: {integrity: sha512-4HCoGwR3221nOc7G0Z/6KgTNGgaaFGkbGrtUJsB+zlKX2LBVjFHHIUkieMBgHHXgBH5Gq6dZHJKdBYdtlhBQvw==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 + dev: true /@types/prettier@2.7.3: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true - /@types/prop-types@15.7.8: - resolution: {integrity: sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==} + /@types/prop-types@15.7.11: + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + + /@types/pug@2.0.8: + resolution: {integrity: sha512-QzhsZ1dMGyJbn/D9V80zp4GIA4J4rfAjCCxc3MP+new0E8dyVdSkR735Lx+n3LIaHNFcjHL5+TbziccuT+fdoQ==} + dev: true - /@types/pug@2.0.7: - resolution: {integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw==} + /@types/pug@2.0.9: + resolution: {integrity: sha512-Yg4LkgFYvn1faISbDNWmcAC1XoDT8IoMUFspp5mnagKk+UvD2N0IWt5A7GRdMubsNWqgCLmrkf8rXkzNqb4szA==} dev: true - /@types/qs@6.9.8: - resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + /@types/qs@6.9.9: + resolution: {integrity: sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==} dev: true - /@types/react@18.2.28: - resolution: {integrity: sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==} + /@types/react@18.2.39: + resolution: {integrity: sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==} dependencies: - '@types/prop-types': 15.7.8 - '@types/scheduler': 0.16.4 + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 csstype: 3.1.2 /@types/readable-stream@2.3.15: resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 safe-buffer: 5.1.2 dev: true /@types/resolve@0.0.8: resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true - /@types/responselike@1.0.1: - resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} requiresBuild: true dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true optional: true - /@types/sanitize-html@2.6.2: - resolution: {integrity: sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ==} + /@types/sanitize-html@2.9.3: + resolution: {integrity: sha512-1rsSdEJLV7utAG+Fms2uP+nSmmYmOhUUSSZvUz4wF2wlA0M5/A/gVgnpWZ7EKaPWsrrxWiSuNJqSBW8dh2isBA==} dependencies: - htmlparser2: 6.1.0 + htmlparser2: 8.0.2 dev: true /@types/sass@1.45.0: resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. dependencies: - sass: 1.69.3 + sass: 1.69.4 + dev: true + + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + + /@types/secp256k1@4.0.5: + resolution: {integrity: sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==} + dependencies: + '@types/node': 20.9.0 dev: true - /@types/scheduler@0.16.4: - resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + dev: true + + /@types/semver@7.5.5: + resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} + dev: true - /@types/secp256k1@4.0.4: - resolution: {integrity: sha512-oN0PFsYxDZnX/qSJ5S5OwaEDTYfekhvaM5vqui2bu1AA39pKofmgL104Q29KiOXizXS2yLjSzc5YdTyMKdcy4A==} + /@types/sinon-chai@3.2.11: + resolution: {integrity: sha512-1C5SBFzwn9hjiMr1xfqbULcSI9qXVpkGZT/LYbbd3jWiTo2MSvA+iFfwODlSoAXGeCgBw6S509dxy8zSIacr3Q==} dependencies: - '@types/node': 20.8.6 + '@types/chai': 4.3.10 + '@types/sinon': 10.0.20 + dev: true - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + /@types/sinon-chai@3.2.12: + resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} + dependencies: + '@types/chai': 4.3.10 + '@types/sinon': 17.0.1 dev: true - /@types/sinon-chai@3.2.10: - resolution: {integrity: sha512-D+VFqUjMqeku/FGl4Ioo+fDeWOaIfbZ6Oj+glgFUgz5m5RJ4kgCER3FdV1uvhmEt0A+FRz+juPdybFlg5Hxfow==} + /@types/sinon@10.0.20: + resolution: {integrity: sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==} dependencies: - '@types/chai': 4.3.8 - '@types/sinon': 10.0.19 + '@types/sinonjs__fake-timers': 8.1.4 dev: true - /@types/sinon@10.0.19: - resolution: {integrity: sha512-MWZNGPSchIdDfb5FL+VFi4zHsHbNOTQEgjqFQk7HazXSXwUU9PAX3z9XBqb3AJGYr9YwrtCtaSMsT3brYsN/jQ==} + /@types/sinon@17.0.1: + resolution: {integrity: sha512-Q2Go6TJetYn5Za1+RJA1Aik61Oa2FS8SuJ0juIqUuJ5dZR4wvhKfmSdIqWtQ3P6gljKWjW0/R7FZkA4oXVL6OA==} dependencies: - '@types/sinonjs__fake-timers': 8.1.3 + '@types/sinonjs__fake-timers': 8.1.5 + dev: true + + /@types/sinonjs__fake-timers@8.1.4: + resolution: {integrity: sha512-GDV68H0mBSN449sa5HEj51E0wfpVQb8xNSMzxf/PrypMFcLTMwJMOM/cgXiv71Mq5drkOQmUGvL1okOZcu6RrQ==} dev: true - /@types/sinonjs__fake-timers@8.1.3: - resolution: {integrity: sha512-4g+2YyWe0Ve+LBh+WUm1697PD0Kdi6coG1eU0YjQbwx61AZ8XbEpL1zIT6WjuUKrCMCROpEaYQPDjBnDouBVAQ==} + /@types/sinonjs__fake-timers@8.1.5: + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} dev: true - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + /@types/stack-utils@2.0.2: + resolution: {integrity: sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==} dev: true - /@types/trusted-types@2.0.4: - resolution: {integrity: sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==} + /@types/trusted-types@2.0.5: + resolution: {integrity: sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==} - /@types/underscore@1.11.11: - resolution: {integrity: sha512-J/ZgSP9Yv0S+wfUfeRh9ynktcCvycfW4S9NbzkFdiHLBth+Ctdy5nYg3ZAqUKq7v3gcJce6rXo41zJV6IqsXsQ==} + /@types/underscore@1.11.12: + resolution: {integrity: sha512-beX81q12OQo809WJ/UYCvUDvJR3YQ4wtehYYQ6eNw5VLyd+KUNBRV4FgzZCHBmACbdPulH9F9ifhxzFFU9TWvQ==} dev: true - /@types/unist@2.0.8: - resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: false - /@types/unist@3.0.0: - resolution: {integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==} + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false /@types/web3@1.0.19: resolution: {integrity: sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==} dependencies: - '@types/bn.js': 5.1.2 - '@types/underscore': 1.11.11 + '@types/bn.js': 5.1.3 + '@types/underscore': 1.11.12 dev: true /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 - /@types/yargs-parser@21.0.1: - resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} + /@types/yargs-parser@21.0.2: + resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} dev: true - /@types/yargs@16.0.6: - resolution: {integrity: sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A==} + /@types/yargs@16.0.7: + resolution: {integrity: sha512-lQcYmxWuOfJq4IncK88/nwud9rwr1F04CFc5xzk0k4oKVyz/AI35TfsXmhjf6t8zp8mpCOi17BfvuNWx+zrYkg==} dependencies: - '@types/yargs-parser': 21.0.1 + '@types/yargs-parser': 21.0.2 dev: true - /@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@5.16.0)(eslint@8.51.0)(typescript@4.6.4): - resolution: {integrity: sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==} + /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -5287,26 +5874,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 5.16.0(eslint@8.51.0)(typescript@4.6.4) - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/type-utils': 6.7.5(eslint@8.51.0)(typescript@4.6.4) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@4.6.4) - '@typescript-eslint/visitor-keys': 6.7.5 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.10.0 + '@typescript-eslint/type-utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@4.6.4) - typescript: 4.6.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==} + /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@4.9.5): + resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -5317,25 +5904,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/type-utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/parser': 5.62.0(eslint@8.53.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/type-utils': 6.8.0(eslint@8.53.0)(typescript@4.9.5) + '@typescript-eslint/utils': 6.8.0(eslint@8.53.0)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.16.0(eslint@8.51.0)(typescript@4.6.4): - resolution: {integrity: sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==} + /@typescript-eslint/parser@5.62.0(eslint@8.53.0)(typescript@4.9.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5344,18 +5931,18 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.16.0 - '@typescript-eslint/types': 5.16.0 - '@typescript-eslint/typescript-estree': 5.16.0(typescript@4.6.4) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 - typescript: 4.6.4 + eslint: 8.53.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==} + /@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -5364,35 +5951,43 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/scope-manager': 6.10.0 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.53.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.16.0: - resolution: {integrity: sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==} + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.16.0 - '@typescript-eslint/visitor-keys': 5.16.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/scope-manager@6.10.0: + resolution: {integrity: sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/visitor-keys': 6.10.0 dev: true - /@typescript-eslint/scope-manager@6.7.5: - resolution: {integrity: sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==} + /@typescript-eslint/scope-manager@6.8.0: + resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 dev: true - /@typescript-eslint/type-utils@6.7.5(eslint@8.51.0)(typescript@4.6.4): - resolution: {integrity: sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==} + /@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -5401,18 +5996,18 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.5(typescript@4.6.4) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@4.6.4) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 - ts-api-utils: 1.0.3(typescript@4.6.4) - typescript: 4.6.4 + eslint: 8.53.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==} + /@typescript-eslint/type-utils@6.8.0(eslint@8.53.0)(typescript@4.9.5): + resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -5421,28 +6016,33 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.8.0(typescript@4.9.5) + '@typescript-eslint/utils': 6.8.0(eslint@8.53.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + eslint: 8.53.0 + ts-api-utils: 1.0.3(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.16.0: - resolution: {integrity: sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==} + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.7.5: - resolution: {integrity: sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==} + /@typescript-eslint/types@6.10.0: + resolution: {integrity: sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.16.0(typescript@4.6.4): - resolution: {integrity: sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==} + /@typescript-eslint/types@6.8.0: + resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -5450,20 +6050,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.16.0 - '@typescript-eslint/visitor-keys': 5.16.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@4.6.4) - typescript: 4.6.4 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.7.5(typescript@4.6.4): - resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==} + /@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2): + resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -5471,20 +6071,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@4.6.4) - typescript: 4.6.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.7.5(typescript@5.2.2): - resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==} + /@typescript-eslint/typescript-estree@6.8.0(typescript@4.9.5): + resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -5492,84 +6092,91 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.7.5(eslint@8.51.0)(typescript@4.6.4): - resolution: {integrity: sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==} + /@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@4.6.4) - eslint: 8.51.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.10.0 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) + eslint: 8.53.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==} + /@typescript-eslint/utils@6.8.0(eslint@8.53.0)(typescript@4.9.5): + resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - eslint: 8.51.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(typescript@4.9.5) + eslint: 8.53.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.16.0: - resolution: {integrity: sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==} + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.16.0 + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@6.10.0: + resolution: {integrity: sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.10.0 eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.7.5: - resolution: {integrity: sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==} + /@typescript-eslint/visitor-keys@6.8.0: + resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.5 + '@typescript-eslint/types': 6.8.0 eslint-visitor-keys: 3.4.3 dev: true /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: false - /@vitest/coverage-v8@0.33.0(vitest@0.32.2): + /@vitest/coverage-v8@0.33.0(vitest@0.32.4): resolution: {integrity: sha512-Rj5IzoLF7FLj6yR7TmqsfRDSeaFki6NAJ/cQexqhbWkHEV2htlVGrmuOde3xzvFsCbLCagf4omhcIaVmfU8Okg==} peerDependencies: vitest: '>=0.32.0 <1' dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.6 @@ -5578,48 +6185,47 @@ packages: std-env: 3.4.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.3 - vitest: 0.32.2(jsdom@22.1.0) + vitest: 0.32.4(jsdom@22.1.0) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@0.32.2: - resolution: {integrity: sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q==} + /@vitest/expect@0.32.4: + resolution: {integrity: sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==} dependencies: - '@vitest/spy': 0.32.2 - '@vitest/utils': 0.32.2 + '@vitest/spy': 0.32.4 + '@vitest/utils': 0.32.4 chai: 4.3.10 dev: true - /@vitest/runner@0.32.2: - resolution: {integrity: sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw==} + /@vitest/runner@0.32.4: + resolution: {integrity: sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==} dependencies: - '@vitest/utils': 0.32.2 - concordance: 5.0.4 + '@vitest/utils': 0.32.4 p-limit: 4.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.32.2: - resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} + /@vitest/snapshot@0.32.4: + resolution: {integrity: sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==} dependencies: magic-string: 0.30.5 pathe: 1.1.1 - pretty-format: 27.5.1 + pretty-format: 29.7.0 dev: true - /@vitest/spy@0.32.2: - resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} + /@vitest/spy@0.32.4: + resolution: {integrity: sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==} dependencies: tinyspy: 2.2.0 dev: true - /@vitest/utils@0.32.2: - resolution: {integrity: sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ==} + /@vitest/utils@0.32.4: + resolution: {integrity: sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==} dependencies: diff-sequences: 29.6.3 loupe: 2.3.7 - pretty-format: 27.5.1 + pretty-format: 29.7.0 dev: true /@vue/compiler-sfc@2.7.14: @@ -5703,36 +6309,14 @@ packages: resolution: {integrity: sha512-hSzb6Ni/PejVzliKkc5T3ehzRJxr5k4fZMGYuouqwArWQ8z7R4jrIlm2j2nNOD7Epz6ZucdiVluU1YH0d/EEyw==} dev: false - /@wagmi/chains@0.2.22(typescript@5.2.2): - resolution: {integrity: sha512-TdiOzJT6TO1JrztRNjTA5Quz+UmQlbvWFG8N41u9tta0boHA1JCAzGGvU6KuIcOmJfRJkKOUIt67wlbopCpVHg==} - peerDependencies: - typescript: '>=4.9.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - typescript: 5.2.2 - dev: true - - /@wagmi/chains@1.0.0(typescript@5.2.2): - resolution: {integrity: sha512-eNbqRWyHbivcMNq5tbXJks4NaOzVLHnNQauHPeE/EDT9AlpqzcrMc+v2T1/2Iw8zN4zgqB86NCsxeJHJs7+xng==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - typescript: 5.2.2 - dev: true - - /@wagmi/cli@1.0.1(@wagmi/core@1.4.5)(typescript@5.2.2): - resolution: {integrity: sha512-SZwT7RglyVDipDTPL/dEKfrAJ3GdSKfdhaF6CFoseIgSiOLkj3xbakvAqdjYSkYnnpjrqLXc3WKZCnszQryctA==} + /@wagmi/cli@1.5.2(@wagmi/core@1.4.6)(typescript@5.2.2): + resolution: {integrity: sha512-UfLMYhW6mQBCjR8A5s01Chf9GpHzdpcuuBuzJ36QGXcMSJAxylz5ImVZWfCRV0ct1UruydjKVSW1QSI6azNxRQ==} engines: {node: '>=14'} hasBin: true peerDependencies: - '@wagmi/core': '>=1.0.0-next.0' - typescript: '>=4.9.4' - wagmi: '>=1.0.0-next.0' + '@wagmi/core': '>=1.0.0' + typescript: '>=5.0.4' + wagmi: '>=1.0.0' peerDependenciesMeta: '@wagmi/core': optional: true @@ -5741,11 +6325,10 @@ packages: wagmi: optional: true dependencies: - '@wagmi/chains': 0.2.22(typescript@5.2.2) - '@wagmi/core': 1.4.5(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) - abitype: 0.8.1(typescript@5.2.2)(zod@3.22.4) + '@wagmi/core': 1.4.6(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.18.9) + abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) abort-controller: 3.0.0 - bundle-require: 3.1.2(esbuild@0.15.13) + bundle-require: 3.1.2(esbuild@0.16.17) cac: 6.7.14 change-case: 4.1.2 chokidar: 3.5.3 @@ -5753,7 +6336,7 @@ packages: detect-package-manager: 2.0.1 dotenv: 16.3.1 dotenv-expand: 10.0.0 - esbuild: 0.15.13 + esbuild: 0.16.17 execa: 6.1.0 find-up: 6.3.0 fs-extra: 10.1.0 @@ -5764,15 +6347,15 @@ packages: picocolors: 1.0.0 prettier: 2.8.8 typescript: 5.2.2 - viem: 0.3.50(typescript@5.2.2)(zod@3.22.4) + viem: 1.18.9(typescript@5.2.2)(zod@3.22.4) zod: 3.22.4 transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@wagmi/connectors@0.1.1(@babel/core@7.23.2)(@wagmi/core@0.8.0)(ethers@5.7.1)(typescript@4.6.4): - resolution: {integrity: sha512-W9w73o9HCYzuBsDHuujwBT/nGGIu5qLBSqVqslXf/S1Q9OiWoudmuIs3opuYqxgw5MpWbMqhq6QaxA7Qcd6NrA==} + /@wagmi/connectors@0.1.10(@wagmi/core@0.8.19)(ethers@5.7.2)(react@18.2.0): + resolution: {integrity: sha512-kEFzqNlB+EEl4gcvTMYZOSGlWXn53YGIiAsvXnqo3MEim4ZfTqcNZ71NV+DVmQu+N+F09wvq2FkbLO4lLVB78g==} peerDependencies: '@wagmi/core': 0.8.x ethers: ^5.0.0 @@ -5780,25 +6363,27 @@ packages: '@wagmi/core': optional: true dependencies: - '@coinbase/wallet-sdk': 3.6.3(@babel/core@7.23.2) + '@coinbase/wallet-sdk': 3.7.2 '@ledgerhq/connect-kit-loader': 1.1.2 - '@wagmi/core': 0.8.0(@coinbase/wallet-sdk@3.6.3)(ethers@5.7.1)(react@18.2.0)(typescript@4.6.4) + '@wagmi/core': 0.8.19(@coinbase/wallet-sdk@3.7.2)(ethers@5.7.2)(react@18.2.0)(typescript@4.9.5) '@walletconnect/ethereum-provider': 1.8.0 - abitype: 0.1.8(typescript@4.6.4) - ethers: 5.7.1 + '@walletconnect/universal-provider': 2.10.2(lokijs@1.5.12) + '@web3modal/standalone': 2.4.3(react@18.2.0) + ethers: 5.7.2 eventemitter3: 4.0.7 transitivePeerDependencies: - - '@babel/core' + - '@react-native-async-storage/async-storage' - bufferutil - debug - encoding + - lokijs + - react - supports-color - - typescript - utf-8-validate dev: false - /@wagmi/connectors@3.1.3(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): - resolution: {integrity: sha512-UgwsQKQDFObJVJMf9pDfFoXTv710o4zrTHyhIWKBTMMkLpCMsMxN5+ZaDhBYt/BgoRinfRYQo8uwuwLhxE6Log==} + /@wagmi/connectors@3.1.4(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.18.9): + resolution: {integrity: sha512-DrYPXByoP9o+xko9R6whKz1cjaJ7HZ+9P27WkW7bhYUWU/sPeDZAvWiLmPwNAhQy8U7A/teAxyUtbExaOdc8zw==} peerDependencies: typescript: '>=5.0.4' viem: '>=0.3.35' @@ -5817,7 +6402,7 @@ packages: abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) eventemitter3: 4.0.7 typescript: 5.2.2 - viem: 1.16.6(typescript@5.2.2) + viem: 1.18.9(typescript@5.2.2)(zod@3.22.4) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - '@types/react' @@ -5829,8 +6414,8 @@ packages: - utf-8-validate - zod - /@wagmi/core@0.8.0(@coinbase/wallet-sdk@3.6.3)(ethers@5.7.1)(react@18.2.0)(typescript@4.6.4): - resolution: {integrity: sha512-249Iph7Z289ym2WQGtUHXSzUK4w/n33IYSAAIDpL4/csB7sOoAYAEAOH5bxH/x2KT7gPd1pNSgOWDzfoG3hI4w==} + /@wagmi/core@0.8.19(@coinbase/wallet-sdk@3.7.2)(ethers@5.7.2)(react@18.2.0)(typescript@4.9.5): + resolution: {integrity: sha512-B1iXB4MRjxgoybZATRmBI7YEfUhpIl3aZGUjo5GXPU1SNtlXIA4/3wePlmLD64XzICXVBp99kynrrdlvJxc4gw==} peerDependencies: '@coinbase/wallet-sdk': '>=3.6.0' '@walletconnect/ethereum-provider': '>=1.7.5' @@ -5841,21 +6426,30 @@ packages: '@walletconnect/ethereum-provider': optional: true dependencies: - '@coinbase/wallet-sdk': 3.6.3(@babel/core@7.23.2) + '@coinbase/wallet-sdk': 3.7.2 '@wagmi/chains': 0.1.14 - abitype: 0.1.8(typescript@4.6.4) - ethers: 5.7.1 + '@wagmi/connectors': 0.1.10(@wagmi/core@0.8.19)(ethers@5.7.2)(react@18.2.0) + abitype: 0.2.5(typescript@4.9.5) + ethers: 5.7.2 eventemitter3: 4.0.7 - zustand: 4.4.3(react@18.2.0) + zustand: 4.4.4(react@18.2.0) transitivePeerDependencies: + - '@react-native-async-storage/async-storage' - '@types/react' + - bufferutil + - debug + - encoding - immer + - lokijs - react + - supports-color - typescript + - utf-8-validate + - zod dev: false - /@wagmi/core@1.4.5(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): - resolution: {integrity: sha512-N9luRb1Uk4tBN9kaYcQSWKE9AsRt/rvZaFt5IZech4JPzNN2sQlfhKd9GEjOXYRDqEPHdDvos7qyBKiDNTz4GA==} + /@wagmi/core@1.4.6(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.18.9): + resolution: {integrity: sha512-6SYcRZulzVNXCZ77EtJ7WfqirmMR+Svb5H/3Lqh0sDGwuW9kdH9G3hBDLf8LMJ1ImiWFsSDR5cl2qo7ZreYllA==} peerDependencies: typescript: '>=5.0.4' viem: '>=0.3.35' @@ -5863,12 +6457,12 @@ packages: typescript: optional: true dependencies: - '@wagmi/connectors': 3.1.3(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) + '@wagmi/connectors': 3.1.4(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.18.9) abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) eventemitter3: 4.0.7 typescript: 5.2.2 - viem: 1.16.6(typescript@5.2.2) - zustand: 4.4.3(react@18.2.0) + viem: 1.18.9(typescript@5.2.2)(zod@3.22.4) + zustand: 4.4.6(react@18.2.0) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - '@types/react' @@ -6104,7 +6698,7 @@ packages: '@walletconnect/legacy-types': 2.0.0 '@walletconnect/legacy-utils': 2.0.0 copy-to-clipboard: 3.3.3 - preact: 10.18.1 + preact: 10.19.0 qrcode: 1.5.3 /@walletconnect/legacy-provider@2.0.0: @@ -6359,6 +6953,15 @@ packages: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + /@web3modal/core@2.4.3(react@18.2.0): + resolution: {integrity: sha512-7Z/sDe9RIYQ2k9ITcxgEa/u7FvlI76vcVVZn9UY4ISivefqrH4JAS3GX4JmVNUUlovwuiZdyqBv4llAQOMK6Rg==} + dependencies: + buffer: 6.0.3 + valtio: 1.10.5(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + /@web3modal/core@2.7.1(react@18.2.0): resolution: {integrity: sha512-eFWR1tK1qN4FguhaZq2VW0AVr8DC/Fox2eJnK1eTfk32hxSgUtl8wr5fVM8EoLeoapQ7Zcc0SNg/QLuLQ9t2tA==} dependencies: @@ -6367,15 +6970,15 @@ packages: - react dev: false - /@web3modal/ethereum@2.7.1(@wagmi/core@1.4.5)(viem@1.16.6): + /@web3modal/ethereum@2.7.1(@wagmi/core@1.4.6)(viem@1.18.9): resolution: {integrity: sha512-1x3qhYh9qgtvw1MDQD4VeDf2ZOsVANKRPtUty4lF+N4L8xnAIwvNKUAMA4j6T5xSsjqUfq5Tdy5mYsNxLmsWMA==} deprecated: Please use new @web3modal/wagmi package peerDependencies: '@wagmi/core': '>=1' viem: '>=1' dependencies: - '@wagmi/core': 1.4.5(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) - viem: 1.16.6(typescript@5.2.2) + '@wagmi/core': 1.4.6(lokijs@1.5.12)(react@18.2.0)(typescript@5.2.2)(viem@1.18.9) + viem: 1.18.9(typescript@5.2.2)(zod@3.22.4) dev: false /@web3modal/html@2.7.1(react@18.2.0): @@ -6388,6 +6991,27 @@ packages: - react dev: false + /@web3modal/standalone@2.4.3(react@18.2.0): + resolution: {integrity: sha512-5ATXBoa4GGm+TIUSsKWsfWCJunv1XevOizpgTFhqyeGgRDmWhqsz9UIPzH/1mk+g0iJ/xqMKs5F6v9D2QeKxag==} + deprecated: This package has been deprecated in favor of @walletconnect/modal. Please read more at https://docs.walletconnect.com + dependencies: + '@web3modal/core': 2.4.3(react@18.2.0) + '@web3modal/ui': 2.4.3(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@web3modal/ui@2.4.3(react@18.2.0): + resolution: {integrity: sha512-J989p8CdtEhI9gZHf/rZ/WFqYlrAHWw9GmAhFoiNODwjAp0BoG/uoaPiijJMchXdngihZOjLGCQwDXU16DHiKg==} + dependencies: + '@web3modal/core': 2.4.3(react@18.2.0) + lit: 2.7.5 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - react + dev: false + /@web3modal/ui@2.7.1(react@18.2.0): resolution: {integrity: sha512-JpGJbLAl/Wmuyyn+JwuwtlPD8mUW2HV/gsSxKWZoElgjbfDY4vjHo9PH2G++2HhugISfzjawp43r8lP/hWgWOQ==} dependencies: @@ -6521,12 +7145,12 @@ packages: resolution: {integrity: sha512-k0W1JFoqHIcIQaP9ij99+Rv0ugaQSSNwOuNwwmTGRjWtIqrQr+ExLDE8LQGXLlJIprqDyMWB4lJkUql/r0RAtA==} dev: true - /@zerodevx/svelte-toast@0.9.5(svelte@4.1.0): + /@zerodevx/svelte-toast@0.9.5(svelte@4.2.3): resolution: {integrity: sha512-JLeB/oRdJfT+dz9A5bgd3Z7TuQnBQbeUtXrGIrNWMGqWbabpepBF2KxtWVhL2qtxpRqhae2f6NAOzH7xs4jUSw==} peerDependencies: svelte: ^3.57.0 || ^4.0.0 dependencies: - svelte: 4.1.0 + svelte: 4.2.3 dev: false /JSONStream@1.3.5: @@ -6548,26 +7172,29 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /abitype@0.1.8(typescript@4.6.4): - resolution: {integrity: sha512-2pde0KepTzdfu19ZrzYTYVIWo69+6UbBCY4B1RDiwWgo2XZtFSJhF6C+XThuRXbbZ823J0Rw1Y5cP0NXYVcCdQ==} + /abitype@0.2.5(typescript@4.9.5): + resolution: {integrity: sha512-t1iiokWYpkrziu4WL2Gb6YdGvaP9ZKs7WnA39TI8TsW2E99GVRgDPW/xOKhzoCdyxOYt550CNYEFluCwGaFHaA==} engines: {pnpm: '>=7'} peerDependencies: typescript: '>=4.7.4' + zod: '>=3.19.1' + peerDependenciesMeta: + zod: + optional: true dependencies: - typescript: 4.6.4 + typescript: 4.9.5 dev: false - /abitype@0.8.1(typescript@5.2.2)(zod@3.22.4): - resolution: {integrity: sha512-n8Di6AWb3i7HnEkBvecU6pG0a5nj5YwMvdAIwPLsQK95ulRy/XS113s/RXvSfTX1iOQJYFrEO3/q4SMWu7OwTA==} + /abitype@0.8.11(typescript@5.2.2): + resolution: {integrity: sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A==} peerDependencies: - typescript: '>=4.9.4' + typescript: '>=5.0.4' zod: ^3 >=3.19.1 peerDependenciesMeta: zod: optional: true dependencies: typescript: 5.2.2 - zod: 3.22.4 dev: true /abitype@0.8.7(typescript@5.2.2)(zod@3.22.4): @@ -6582,7 +7209,7 @@ packages: typescript: 5.2.2 zod: 3.22.4 - /abitype@0.9.8(typescript@5.2.2): + /abitype@0.9.8(typescript@5.2.2)(zod@3.22.4): resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} peerDependencies: typescript: '>=5.0.4' @@ -6594,6 +7221,7 @@ packages: optional: true dependencies: typescript: 5.2.2 + zod: 3.22.4 /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -6615,6 +7243,12 @@ packages: queue-microtask: 1.2.3 dev: true + /abstract-leveldown@0.12.4: + resolution: {integrity: sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==} + dependencies: + xtend: 3.0.0 + dev: true + /abstract-leveldown@2.6.3: resolution: {integrity: sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==} dependencies: @@ -6688,12 +7322,12 @@ packages: acorn: 8.10.0 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.2 /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} @@ -6705,6 +7339,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk@8.3.0: + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} @@ -6715,6 +7354,12 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -6772,8 +7417,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.7.0: - resolution: {integrity: sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==} + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -6988,7 +7633,7 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-array-buffer: 3.0.2 dev: true @@ -7002,10 +7647,10 @@ packages: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true @@ -7028,51 +7673,51 @@ packages: resolution: {integrity: sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true /array.prototype.findlastindex@1.2.3: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true /array.prototype.reduce@1.0.6: resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -7082,10 +7727,10 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 dev: true @@ -7159,7 +7804,7 @@ packages: /async-mutex@0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 /async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -7209,7 +7854,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.22.1 - caniuse-lite: 1.0.30001549 + caniuse-lite: 1.0.30001561 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -7237,24 +7882,24 @@ packages: - debug dev: false - /axios@1.4.0(debug@4.3.4): - resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} + /axios@1.5.1: + resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} dependencies: follow-redirects: 1.15.3(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + dev: false - /axios@1.5.1: - resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} + /axios@1.6.1(debug@4.3.4): + resolution: {integrity: sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==} dependencies: follow-redirects: 1.15.3(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -7429,8 +8074,8 @@ packages: - supports-color dev: true - /babel-jest@27.3.1(@babel/core@7.23.2): - resolution: {integrity: sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==} + /babel-jest@27.5.1(@babel/core@7.23.2): + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 @@ -7438,7 +8083,7 @@ packages: '@babel/core': 7.23.2 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__core': 7.20.2 + '@types/babel__core': 7.20.3 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 27.5.1(@babel/core@7.23.2) chalk: 4.1.2 @@ -7448,18 +8093,18 @@ packages: - supports-color dev: true - /babel-jest@27.5.1(@babel/core@7.23.2): + /babel-jest@27.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__core': 7.20.2 + '@types/babel__core': 7.20.3 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.23.2) + babel-preset-jest: 27.5.1(@babel/core@7.23.3) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -7493,86 +8138,50 @@ packages: dev: true /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - '@types/babel__core': 7.20.2 - '@types/babel__traverse': 7.20.2 - dev: true - - /babel-plugin-polyfill-corejs2@0.2.3(@babel/core@7.23.2): - resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.23.2) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + '@types/babel__core': 7.20.3 + '@types/babel__traverse': 7.20.3 dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2): + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.3): resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: false - - /babel-plugin-polyfill-corejs3@0.3.0(@babel/core@7.23.2): - resolution: {integrity: sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.23.2) - core-js-compat: 3.33.0 - transitivePeerDependencies: - - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.5(@babel/core@7.23.2): + /babel-plugin-polyfill-corejs3@0.8.5(@babel/core@7.23.3): resolution: {integrity: sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) - core-js-compat: 3.33.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator@0.2.3(@babel/core@7.23.2): - resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) + core-js-compat: 3.33.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.2): + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.3): resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) transitivePeerDependencies: - supports-color - dev: false + dev: true /babel-plugin-syntax-async-functions@6.13.0: resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==} @@ -7827,6 +8436,26 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) dev: true + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.3): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) + dev: true + /babel-preset-env@1.7.0: resolution: {integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==} dependencies: @@ -7875,6 +8504,17 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) dev: true + /babel-preset-jest@27.5.1(@babel/core@7.23.3): + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.3) + dev: true + /babel-register@6.26.0: resolution: {integrity: sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==} dependencies: @@ -7992,8 +8632,8 @@ packages: /bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} dev: true @@ -8016,6 +8656,8 @@ packages: /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} requiresBuild: true + dev: true + optional: true /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -8040,6 +8682,12 @@ packages: unorm: 1.6.0 dev: true + /bl@0.8.2: + resolution: {integrity: sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==} + dependencies: + readable-stream: 1.0.34 + dev: true + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -8058,17 +8706,15 @@ packages: /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + dev: true /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: true - /blueimp-md5@2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - dev: true - /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + dev: true /bn.js@4.11.8: resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==} @@ -8139,7 +8785,7 @@ packages: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: true /brace-expansion@1.1.11: @@ -8209,6 +8855,7 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true /browserify-cipher@1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} @@ -8227,6 +8874,14 @@ packages: safe-buffer: 5.2.1 dev: true + /browserify-fs@1.0.0: + resolution: {integrity: sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==} + dependencies: + level-filesystem: 1.2.0 + level-js: 2.2.4 + levelup: 0.18.6 + dev: true + /browserify-rsa@4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: @@ -8252,8 +8907,8 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001549 - electron-to-chromium: 1.4.554 + caniuse-lite: 1.0.30001561 + electron-to-chromium: 1.4.581 dev: true /browserslist@4.22.1: @@ -8261,10 +8916,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001549 - electron-to-chromium: 1.4.554 + caniuse-lite: 1.0.30001553 + electron-to-chromium: 1.4.563 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -8284,6 +8940,7 @@ packages: bs58: 4.0.1 create-hash: 1.2.0 safe-buffer: 5.2.1 + dev: true /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -8291,12 +8948,6 @@ packages: node-int64: 0.4.0 dev: true - /btoa@1.2.1: - resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} - engines: {node: '>= 0.4.0'} - hasBin: true - dev: false - /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} dev: false @@ -8323,10 +8974,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - /buffer-reverse@1.0.1: - resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} - dev: false - /buffer-to-arraybuffer@0.0.5: resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} requiresBuild: true @@ -8335,6 +8982,7 @@ packages: /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true /buffer-xor@2.0.2: resolution: {integrity: sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==} @@ -8369,6 +9017,11 @@ packages: dependencies: node-gyp-build: 4.6.1 + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: @@ -8382,13 +9035,13 @@ packages: run-applescript: 5.0.0 dev: true - /bundle-require@3.1.2(esbuild@0.15.13): + /bundle-require@3.1.2(esbuild@0.16.17): resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.13' dependencies: - esbuild: 0.15.13 + esbuild: 0.16.17 load-tsconfig: 0.2.5 dev: true @@ -8397,6 +9050,7 @@ packages: engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 + dev: false /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} @@ -8506,11 +9160,12 @@ packages: lru-cache: 3.2.0 dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: function-bind: 1.1.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 /caller-callsite@2.0.0: resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} @@ -8540,7 +9195,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /camelcase-css@2.0.1: @@ -8581,14 +9236,18 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001549: - resolution: {integrity: sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==} + /caniuse-lite@1.0.30001553: + resolution: {integrity: sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==} + dev: true + + /caniuse-lite@1.0.30001561: + resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 upper-case-first: 2.0.2 dev: true @@ -8664,6 +9323,7 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -8692,7 +9352,7 @@ packages: path-case: 3.0.4 sentence-case: 3.0.4 snake-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /char-regex@1.0.2: @@ -8803,6 +9463,7 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true /cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} @@ -8949,6 +9610,10 @@ packages: dev: true optional: true + /clone@0.1.19: + resolution: {integrity: sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==} + dev: true + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -8957,6 +9622,7 @@ packages: /clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} + dev: true /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -8985,8 +9651,8 @@ packages: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.2 - acorn: 8.10.0 + '@types/estree': 1.0.5 + acorn: 8.11.2 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -9143,20 +9809,6 @@ packages: typedarray: 0.0.6 dev: true - /concordance@5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} - dependencies: - date-time: 3.1.0 - esutils: 2.0.3 - fast-diff: 1.3.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - md5-hex: 3.0.1 - semver: 7.5.4 - well-known-symbols: 2.0.0 - dev: true - /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true @@ -9334,7 +9986,7 @@ packages: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 upper-case: 2.0.2 dev: true @@ -9370,6 +10022,7 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -9403,13 +10056,14 @@ packages: dependencies: toggle-selection: 1.0.6 - /core-js-compat@3.33.0: - resolution: {integrity: sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==} + /core-js-compat@3.33.1: + resolution: {integrity: sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==} dependencies: browserslist: 4.22.1 + dev: true - /core-js-pure@3.33.0: - resolution: {integrity: sha512-FKSIDtJnds/YFIEaZ4HszRX7hkxGpNKM7FC9aJ9WLJbSd3lD4vOltFuVIBLR8asSx9frkTSqL0dw90SKQxgKrg==} + /core-js-pure@3.33.2: + resolution: {integrity: sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q==} requiresBuild: true dev: true @@ -9459,7 +10113,7 @@ packages: parse-json: 4.0.0 dev: true - /cosmiconfig@8.3.6(typescript@4.6.4): + /cosmiconfig@8.3.6(typescript@4.9.5): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -9472,7 +10126,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 4.6.4 + typescript: 4.9.5 dev: true /cosmiconfig@8.3.6(typescript@5.2.2): @@ -9512,6 +10166,7 @@ packages: md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 + dev: true /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} @@ -9522,6 +10177,7 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 + dev: true /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -9595,10 +10251,6 @@ packages: resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} dev: true - /crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - dev: false - /css-loader@6.8.1(webpack@5.89.0): resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} engines: {node: '>= 12.13.0'} @@ -9676,26 +10328,26 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - /cytoscape-cose-bilkent@4.1.0(cytoscape@3.26.0): + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.27.0): resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 1.0.3 - cytoscape: 3.26.0 + cytoscape: 3.27.0 dev: false - /cytoscape-fcose@2.2.0(cytoscape@3.26.0): + /cytoscape-fcose@2.2.0(cytoscape@3.27.0): resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 2.2.0 - cytoscape: 3.26.0 + cytoscape: 3.27.0 dev: false - /cytoscape@3.26.0: - resolution: {integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==} + /cytoscape@3.27.0: + resolution: {integrity: sha512-pPZJilfX9BxESwujODz5pydeGi+FBrXq1rcaB1mfhFXXFJ9GjE6CNndAk+8jPzoXGD+16LtSS4xlYEIUiW4Abg==} engines: {node: '>=0.10'} dependencies: heap: 0.2.7 @@ -10000,20 +10652,20 @@ packages: css-selector-tokenizer: 0.8.0 postcss: 8.4.31 postcss-js: 4.0.1(postcss@8.4.31) - tailwindcss: 3.3.3 + tailwindcss: 3.3.5 transitivePeerDependencies: - ts-node dev: true - /daisyui@3.9.2: - resolution: {integrity: sha512-yJZ1QjHUaL+r9BkquTdzNHb7KIgAJVFh0zbOXql2Wu0r7zx5qZNLxclhjN0WLoIpY+o2h/8lqXg7ijj8oTigOw==} + /daisyui@3.9.4: + resolution: {integrity: sha512-fvi2RGH4YV617/6DntOVGcOugOPym9jTGWW2XySb5ZpvdWO4L7bEG77VHirrnbRUEWvIEVXkBpxUz2KFj0rVnA==} engines: {node: '>=16.9.0'} dependencies: colord: 2.9.3 css-selector-tokenizer: 0.8.0 postcss: 8.4.31 postcss-js: 4.0.1(postcss@8.4.31) - tailwindcss: 3.3.3 + tailwindcss: 3.3.5 transitivePeerDependencies: - ts-node dev: true @@ -10048,13 +10700,6 @@ packages: whatwg-url: 12.0.1 dev: true - /date-time@3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} - dependencies: - time-zone: 1.0.0 - dev: true - /dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} dev: false @@ -10171,8 +10816,9 @@ packages: type-detect: 4.0.8 dev: true - /deep-equal@1.1.1: - resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} + /deep-equal@1.1.2: + resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} + engines: {node: '>= 0.4'} dependencies: is-arguments: 1.1.1 is-date-object: 1.0.5 @@ -10231,6 +10877,12 @@ packages: dev: true optional: true + /deferred-leveldown@0.2.0: + resolution: {integrity: sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==} + dependencies: + abstract-leveldown: 0.12.4 + dev: true + /deferred-leveldown@1.2.2: resolution: {integrity: sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==} dependencies: @@ -10257,10 +10909,9 @@ packages: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.0 - dev: true + has-property-descriptors: 1.0.1 /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} @@ -10272,7 +10923,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -10280,21 +10931,21 @@ packages: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: - is-descriptor: 0.1.6 + is-descriptor: 0.1.7 dev: true /define-property@1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: - is-descriptor: 1.0.2 + is-descriptor: 1.0.3 dev: true /define-property@2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: - is-descriptor: 1.0.2 + is-descriptor: 1.0.3 isobject: 3.0.1 dev: true @@ -10504,6 +11155,14 @@ packages: entities: 2.2.0 dev: true + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: true + /dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} dev: true @@ -10533,6 +11192,13 @@ packages: domelementtype: 2.3.0 dev: true + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /dompurify@3.0.6: resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==} dev: false @@ -10545,11 +11211,19 @@ packages: domhandler: 4.3.1 dev: true + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: true + /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /dotenv-expand@10.0.0: @@ -10611,8 +11285,13 @@ packages: - utf-8-validate dev: false - /electron-to-chromium@1.4.554: - resolution: {integrity: sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==} + /electron-to-chromium@1.4.563: + resolution: {integrity: sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==} + dev: true + + /electron-to-chromium@1.4.581: + resolution: {integrity: sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==} + dev: true /elkjs@0.8.2: resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} @@ -10737,26 +11416,26 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.4 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -10765,7 +11444,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.13.0 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.1 @@ -10779,7 +11458,7 @@ packages: typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 dev: true /es-array-method-boxes-properly@1.0.0: @@ -10790,19 +11469,19 @@ packages: resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 + get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.4 + hasown: 2.0.0 dev: true /es-to-primitive@1.2.1: @@ -10857,15 +11536,6 @@ packages: es6-symbol: 3.1.3 dev: false - /esbuild-android-64@0.15.13: - resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /esbuild-android-64@0.15.18: resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} @@ -10875,15 +11545,6 @@ packages: dev: true optional: true - /esbuild-android-arm64@0.15.13: - resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /esbuild-android-arm64@0.15.18: resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} engines: {node: '>=12'} @@ -10893,15 +11554,6 @@ packages: dev: true optional: true - /esbuild-darwin-64@0.15.13: - resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /esbuild-darwin-64@0.15.18: resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} engines: {node: '>=12'} @@ -10911,15 +11563,6 @@ packages: dev: true optional: true - /esbuild-darwin-arm64@0.15.13: - resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /esbuild-darwin-arm64@0.15.18: resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} engines: {node: '>=12'} @@ -10929,15 +11572,6 @@ packages: dev: true optional: true - /esbuild-freebsd-64@0.15.13: - resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /esbuild-freebsd-64@0.15.18: resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} engines: {node: '>=12'} @@ -10947,15 +11581,6 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64@0.15.13: - resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /esbuild-freebsd-arm64@0.15.18: resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} engines: {node: '>=12'} @@ -10965,15 +11590,6 @@ packages: dev: true optional: true - /esbuild-linux-32@0.15.13: - resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-32@0.15.18: resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} engines: {node: '>=12'} @@ -10983,15 +11599,6 @@ packages: dev: true optional: true - /esbuild-linux-64@0.15.13: - resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-64@0.15.18: resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} engines: {node: '>=12'} @@ -11001,15 +11608,6 @@ packages: dev: true optional: true - /esbuild-linux-arm64@0.15.13: - resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-arm64@0.15.18: resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} engines: {node: '>=12'} @@ -11019,15 +11617,6 @@ packages: dev: true optional: true - /esbuild-linux-arm@0.15.13: - resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-arm@0.15.18: resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} engines: {node: '>=12'} @@ -11037,15 +11626,6 @@ packages: dev: true optional: true - /esbuild-linux-mips64le@0.15.13: - resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-mips64le@0.15.18: resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} engines: {node: '>=12'} @@ -11055,15 +11635,6 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le@0.15.13: - resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-ppc64le@0.15.18: resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} engines: {node: '>=12'} @@ -11073,15 +11644,6 @@ packages: dev: true optional: true - /esbuild-linux-riscv64@0.15.13: - resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-riscv64@0.15.18: resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} engines: {node: '>=12'} @@ -11091,15 +11653,6 @@ packages: dev: true optional: true - /esbuild-linux-s390x@0.15.13: - resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-s390x@0.15.18: resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} engines: {node: '>=12'} @@ -11109,15 +11662,6 @@ packages: dev: true optional: true - /esbuild-netbsd-64@0.15.13: - resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /esbuild-netbsd-64@0.15.18: resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} engines: {node: '>=12'} @@ -11127,15 +11671,6 @@ packages: dev: true optional: true - /esbuild-openbsd-64@0.15.13: - resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /esbuild-openbsd-64@0.15.18: resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} engines: {node: '>=12'} @@ -11145,15 +11680,6 @@ packages: dev: true optional: true - /esbuild-sunos-64@0.15.13: - resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /esbuild-sunos-64@0.15.18: resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} @@ -11163,28 +11689,10 @@ packages: dev: true optional: true - /esbuild-windows-32@0.15.13: - resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /esbuild-windows-32@0.15.18: resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64@0.15.13: - resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==} - engines: {node: '>=12'} - cpu: [x64] + cpu: [ia32] os: [win32] requiresBuild: true dev: true @@ -11199,15 +11707,6 @@ packages: dev: true optional: true - /esbuild-windows-arm64@0.15.13: - resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /esbuild-windows-arm64@0.15.18: resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} engines: {node: '>=12'} @@ -11217,36 +11716,6 @@ packages: dev: true optional: true - /esbuild@0.15.13: - resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.15.13 - '@esbuild/linux-loong64': 0.15.13 - esbuild-android-64: 0.15.13 - esbuild-android-arm64: 0.15.13 - esbuild-darwin-64: 0.15.13 - esbuild-darwin-arm64: 0.15.13 - esbuild-freebsd-64: 0.15.13 - esbuild-freebsd-arm64: 0.15.13 - esbuild-linux-32: 0.15.13 - esbuild-linux-64: 0.15.13 - esbuild-linux-arm: 0.15.13 - esbuild-linux-arm64: 0.15.13 - esbuild-linux-mips64le: 0.15.13 - esbuild-linux-ppc64le: 0.15.13 - esbuild-linux-riscv64: 0.15.13 - esbuild-linux-s390x: 0.15.13 - esbuild-netbsd-64: 0.15.13 - esbuild-openbsd-64: 0.15.13 - esbuild-sunos-64: 0.15.13 - esbuild-windows-32: 0.15.13 - esbuild-windows-64: 0.15.13 - esbuild-windows-arm64: 0.15.13 - dev: true - /esbuild@0.15.18: resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} @@ -11277,6 +11746,36 @@ packages: esbuild-windows-arm64: 0.15.18 dev: true + /esbuild@0.16.17: + resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.16.17 + '@esbuild/android-arm64': 0.16.17 + '@esbuild/android-x64': 0.16.17 + '@esbuild/darwin-arm64': 0.16.17 + '@esbuild/darwin-x64': 0.16.17 + '@esbuild/freebsd-arm64': 0.16.17 + '@esbuild/freebsd-x64': 0.16.17 + '@esbuild/linux-arm': 0.16.17 + '@esbuild/linux-arm64': 0.16.17 + '@esbuild/linux-ia32': 0.16.17 + '@esbuild/linux-loong64': 0.16.17 + '@esbuild/linux-mips64el': 0.16.17 + '@esbuild/linux-ppc64': 0.16.17 + '@esbuild/linux-riscv64': 0.16.17 + '@esbuild/linux-s390x': 0.16.17 + '@esbuild/linux-x64': 0.16.17 + '@esbuild/netbsd-x64': 0.16.17 + '@esbuild/openbsd-x64': 0.16.17 + '@esbuild/sunos-x64': 0.16.17 + '@esbuild/win32-arm64': 0.16.17 + '@esbuild/win32-ia32': 0.16.17 + '@esbuild/win32-x64': 0.16.17 + dev: true + /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -11307,9 +11806,40 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true + /esbuild@0.19.5: + resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.5 + '@esbuild/android-arm64': 0.19.5 + '@esbuild/android-x64': 0.19.5 + '@esbuild/darwin-arm64': 0.19.5 + '@esbuild/darwin-x64': 0.19.5 + '@esbuild/freebsd-arm64': 0.19.5 + '@esbuild/freebsd-x64': 0.19.5 + '@esbuild/linux-arm': 0.19.5 + '@esbuild/linux-arm64': 0.19.5 + '@esbuild/linux-ia32': 0.19.5 + '@esbuild/linux-loong64': 0.19.5 + '@esbuild/linux-mips64el': 0.19.5 + '@esbuild/linux-ppc64': 0.19.5 + '@esbuild/linux-riscv64': 0.19.5 + '@esbuild/linux-s390x': 0.19.5 + '@esbuild/linux-x64': 0.19.5 + '@esbuild/netbsd-x64': 0.19.5 + '@esbuild/openbsd-x64': 0.19.5 + '@esbuild/sunos-x64': 0.19.5 + '@esbuild/win32-arm64': 0.19.5 + '@esbuild/win32-ia32': 0.19.5 + '@esbuild/win32-x64': 0.19.5 + dev: false + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + dev: true /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -11361,25 +11891,34 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@8.5.0(eslint@8.51.0): - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + /eslint-compat-utils@0.1.2(eslint@8.53.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.53.0 + dev: true + + /eslint-config-prettier@8.10.0(eslint@8.53.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.53.0 dev: true - /eslint-config-prettier@9.0.0(eslint@8.51.0): + /eslint-config-prettier@9.0.0(eslint@8.53.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.53.0 dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.51.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.28.1)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.53.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -11388,23 +11927,23 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.51.0 - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.51.0) - eslint-plugin-n: 16.2.0(eslint@8.51.0) - eslint-plugin-promise: 6.1.1(eslint@8.51.0) + eslint: 8.53.0 + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.10.0)(eslint@8.53.0) + eslint-plugin-n: 16.3.1(eslint@8.53.0) + eslint-plugin-promise: 6.1.1(eslint@8.53.0) dev: true /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.0 + is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -11425,37 +11964,38 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.2.0(eslint@8.51.0): - resolution: {integrity: sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==} + /eslint-plugin-es-x@7.5.0(eslint@8.53.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@eslint-community/regexpp': 4.9.1 - eslint: 8.51.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 8.53.0 + eslint-compat-utils: 0.1.2(eslint@8.53.0) dev: true - /eslint-plugin-es@3.0.1(eslint@8.51.0): + /eslint-plugin-es@3.0.1(eslint@8.53.0): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.51.0 + eslint: 8.53.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.51.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.10.0)(eslint@8.53.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -11465,18 +12005,18 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0) has: 1.0.4 - is-core-module: 2.13.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.7 @@ -11490,32 +12030,33 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.2.0(eslint@8.51.0): - resolution: {integrity: sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==} + /eslint-plugin-n@16.3.1(eslint@8.53.0): + resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) builtins: 5.0.1 - eslint: 8.51.0 - eslint-plugin-es-x: 7.2.0(eslint@8.51.0) + eslint: 8.53.0 + eslint-plugin-es-x: 7.5.0(eslint@8.53.0) get-tsconfig: 4.7.2 ignore: 5.2.4 - is-core-module: 2.13.0 + is-builtin-module: 3.2.1 + is-core-module: 2.13.1 minimatch: 3.1.2 resolve: 1.22.8 semver: 7.5.4 dev: true - /eslint-plugin-node@11.1.0(eslint@8.51.0): + /eslint-plugin-node@11.1.0(eslint@8.53.0): resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.51.0 - eslint-plugin-es: 3.0.1(eslint@8.51.0) + eslint: 8.53.0 + eslint-plugin-es: 3.0.1(eslint@8.53.0) eslint-utils: 2.1.0 ignore: 5.2.4 minimatch: 3.1.2 @@ -11523,7 +12064,7 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3): + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.53.0)(prettier@3.0.3): resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -11537,51 +12078,54 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.51.0 - eslint-config-prettier: 9.0.0(eslint@8.51.0) + eslint: 8.53.0 + eslint-config-prettier: 9.0.0(eslint@8.53.0) prettier: 3.0.3 prettier-linter-helpers: 1.0.0 synckit: 0.8.5 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.51.0): + /eslint-plugin-promise@6.1.1(eslint@8.53.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.53.0 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.51.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.53.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.53.0 dev: true - /eslint-plugin-svelte@2.26.0(eslint@8.51.0)(svelte@4.1.0): - resolution: {integrity: sha512-EMcHDOMfMvjxoB5aCGASwDhVHOb/yy0Syer5aPm4GDQpjbPMceacs7LdSDL4xsCIHuOGPdOnc0YIjGpmmuKOlQ==} + /eslint-plugin-svelte@2.35.0(eslint@8.53.0)(svelte@4.2.3): + resolution: {integrity: sha512-3WDFxNrkXaMlpqoNo3M1ZOQuoFLMO9+bdnN6oVVXaydXC7nzCJuGy9a0zqoNDHMSRPYt0Rqo6hIdHMEaI5sQnw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 - svelte: ^3.37.0 + svelte: ^3.37.0 || ^4.0.0 peerDependenciesMeta: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.53.0 + eslint-compat-utils: 0.1.2(eslint@8.53.0) esutils: 2.0.3 - known-css-properties: 0.27.0 + known-css-properties: 0.29.0 postcss: 8.4.31 postcss-load-config: 3.1.4(postcss@8.4.31) postcss-safe-parser: 6.0.0(postcss@8.4.31) - svelte: 4.1.0 - svelte-eslint-parser: 0.26.1(svelte@4.1.0) + postcss-selector-parser: 6.0.13 + semver: 7.5.4 + svelte: 4.2.3 + svelte-eslint-parser: 0.33.1(svelte@4.2.3) transitivePeerDependencies: - supports-color - ts-node @@ -11620,18 +12164,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.53.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -11674,8 +12219,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) eslint-visitor-keys: 3.4.3 dev: true @@ -11722,13 +12267,13 @@ packages: /estree-util-attach-comments@2.1.1: resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 dev: false /estree-util-build-jsx@2.2.2: resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} dependencies: - '@types/estree-jsx': 1.0.1 + '@types/estree-jsx': 1.0.3 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 dev: false @@ -11740,7 +12285,7 @@ packages: /estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: - '@types/estree-jsx': 1.0.1 + '@types/estree-jsx': 1.0.3 astring: 1.8.6 source-map: 0.7.4 dev: false @@ -11755,8 +12300,8 @@ packages: /estree-util-visit@1.2.1: resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} dependencies: - '@types/estree-jsx': 1.0.1 - '@types/unist': 2.0.8 + '@types/estree-jsx': 1.0.3 + '@types/unist': 2.0.10 dev: false /estree-walker@1.0.1: @@ -11769,7 +12314,7 @@ packages: /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.3 /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -11797,20 +12342,6 @@ packages: - supports-color dev: true - /eth-block-tracker@4.4.3(@babel/core@7.23.2): - resolution: {integrity: sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==} - dependencies: - '@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.2) - '@babel/runtime': 7.23.2 - eth-query: 2.1.2 - json-rpc-random-id: 1.0.1 - pify: 3.0.0 - safe-event-emitter: 1.0.1 - transitivePeerDependencies: - - '@babel/core' - - supports-color - dev: false - /eth-block-tracker@6.1.0: resolution: {integrity: sha512-K9SY8+/xMBi4M5HHTDdxnpEqEEGjbNpzHFqvxyjMZej8InV/B+CkFRKM6W+uvrFJ7m8Zd1E0qUkseU3vdIDFYQ==} engines: {node: '>=14.0.0'} @@ -11838,7 +12369,7 @@ packages: optional: true dependencies: '@solidity-parser/parser': 0.14.5 - axios: 1.5.1 + axios: 1.6.1(debug@4.3.4) cli-table3: 0.5.1 colors: 1.4.0 ethereum-cryptography: 1.2.0 @@ -11856,19 +12387,6 @@ packages: - utf-8-validate dev: true - /eth-json-rpc-filters@4.2.2: - resolution: {integrity: sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==} - dependencies: - '@metamask/safe-event-emitter': 2.0.0 - async-mutex: 0.2.6 - eth-json-rpc-middleware: 6.0.0 - eth-query: 2.1.2 - json-rpc-engine: 6.1.0 - pify: 5.0.0 - transitivePeerDependencies: - - encoding - dev: false - /eth-json-rpc-filters@5.1.0: resolution: {integrity: sha512-fos+9xmoa1A2Ytsc9eYof17r81BjdJOUcGcgZn4K/tKdCCTb+a8ytEtwlu1op5qsXFDlgGmstTELFrDEc89qEQ==} engines: {node: '>=14.0.0'} @@ -11912,24 +12430,6 @@ packages: - supports-color dev: true - /eth-json-rpc-middleware@6.0.0: - resolution: {integrity: sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==} - dependencies: - btoa: 1.2.1 - clone: 2.1.2 - eth-query: 2.1.2 - eth-rpc-errors: 3.0.0 - eth-sig-util: 1.4.2 - ethereumjs-util: 5.2.1 - json-rpc-engine: 5.4.0 - json-stable-stringify: 1.0.2 - node-fetch: 2.7.0 - pify: 3.0.0 - safe-event-emitter: 1.0.1 - transitivePeerDependencies: - - encoding - dev: false - /eth-lib@0.1.29: resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} requiresBuild: true @@ -11963,12 +12463,6 @@ packages: json-rpc-random-id: 1.0.1 xtend: 4.0.2 - /eth-rpc-errors@3.0.0: - resolution: {integrity: sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==} - dependencies: - fast-safe-stringify: 2.1.1 - dev: false - /eth-rpc-errors@4.0.2: resolution: {integrity: sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ==} dependencies: @@ -11980,6 +12474,7 @@ packages: dependencies: ethereumjs-abi: github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0 ethereumjs-util: 5.2.1 + dev: true /eth-sig-util@3.0.0: resolution: {integrity: sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ==} @@ -12029,6 +12524,7 @@ packages: resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: js-sha3: 0.8.0 + dev: true /ethereum-common@0.0.18: resolution: {integrity: sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==} @@ -12041,8 +12537,8 @@ packages: /ethereum-cryptography@0.1.3: resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} dependencies: - '@types/pbkdf2': 3.1.0 - '@types/secp256k1': 4.0.4 + '@types/pbkdf2': 3.1.1 + '@types/secp256k1': 4.0.5 blakejs: 1.2.1 browserify-aes: 1.2.0 bs58check: 2.1.2 @@ -12056,6 +12552,7 @@ packages: scrypt-js: 3.0.1 secp256k1: 4.0.3 setimmediate: 1.0.5 + dev: true /ethereum-cryptography@1.2.0: resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} @@ -12073,6 +12570,7 @@ packages: '@noble/hashes': 1.3.1 '@scure/bip32': 1.3.1 '@scure/bip39': 1.2.1 + dev: true /ethereum-waffle@3.4.4(typescript@5.2.2): resolution: {integrity: sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==} @@ -12202,6 +12700,7 @@ packages: ethjs-util: 0.1.6 rlp: 2.2.7 safe-buffer: 5.2.1 + dev: true /ethereumjs-util@6.2.1: resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} @@ -12213,12 +12712,13 @@ packages: ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 + dev: true /ethereumjs-util@7.1.5: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} engines: {node: '>=10.0.0'} dependencies: - '@types/bn.js': 5.1.2 + '@types/bn.js': 5.1.3 bn.js: 5.2.1 create-hash: 1.2.0 ethereum-cryptography: 0.1.3 @@ -12248,7 +12748,7 @@ packages: dependencies: async: 2.6.4 async-eventemitter: 0.2.4 - core-js-pure: 3.33.0 + core-js-pure: 3.33.2 ethereumjs-account: 3.0.0 ethereumjs-block: 2.2.2 ethereumjs-blockchain: 4.0.4 @@ -12279,44 +12779,6 @@ packages: dev: true optional: true - /ethers@5.7.1: - resolution: {integrity: sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q==} - dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/contracts': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/providers': 5.7.1 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/solidity': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/units': 5.7.0 - '@ethersproject/wallet': 5.7.0 - '@ethersproject/web': 5.7.1 - '@ethersproject/wordlists': 5.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /ethers@5.7.2: resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} dependencies: @@ -12353,7 +12815,6 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true /ethjs-unit@0.1.6: resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} @@ -12361,6 +12822,7 @@ packages: dependencies: bn.js: 4.11.6 number-to-bn: 1.7.0 + dev: true /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -12368,6 +12830,7 @@ packages: dependencies: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 + dev: true /event-emitter@0.3.5: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} @@ -12399,6 +12862,7 @@ packages: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 + dev: true /execa@0.8.0: resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} @@ -12614,6 +13078,17 @@ packages: micromatch: 4.0.5 dev: true + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -12848,6 +13323,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: true + /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -12951,7 +13430,7 @@ packages: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true /fs-extra@4.0.3: @@ -12987,7 +13466,7 @@ packages: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true /fs-minipass@1.2.7: @@ -13022,6 +13501,14 @@ packages: dev: true optional: true + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -13037,9 +13524,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: true @@ -13051,6 +13538,12 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /fwd-stream@1.0.4: + resolution: {integrity: sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==} + dependencies: + readable-stream: 1.0.34 + dev: true + /ganache-core@2.13.2: resolution: {integrity: sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==} engines: {node: '>=8.9.0'} @@ -13134,6 +13627,7 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: true /get-caller-file@1.0.3: resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} @@ -13147,13 +13641,13 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: function-bind: 1.1.2 - has: 1.0.4 has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -13207,8 +13701,8 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true /get-tsconfig@4.7.2: @@ -13243,8 +13737,8 @@ packages: parse-url: 8.1.0 dev: false - /git-url-parse@13.1.0: - resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==} + /git-url-parse@13.1.1: + resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==} dependencies: git-up: 7.0.0 dev: false @@ -13282,7 +13776,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.3 - minipass: 7.0.4 + minipass: 5.0.0 path-scurry: 1.10.1 dev: true @@ -13388,6 +13882,7 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /globals@13.23.0: resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} @@ -13410,7 +13905,6 @@ packages: /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: false /globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} @@ -13419,7 +13913,7 @@ packages: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob: 7.2.3 ignore: 5.2.4 merge2: 1.4.1 @@ -13432,7 +13926,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -13443,7 +13937,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -13464,7 +13958,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -13474,7 +13968,7 @@ packages: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.1 + '@types/responselike': 1.0.3 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -13493,7 +13987,7 @@ packages: '@sindresorhus/is': 0.14.0 '@szmarczak/http-timer': 1.1.2 '@types/keyv': 3.1.4 - '@types/responselike': 1.0.1 + '@types/responselike': 1.0.3 cacheable-request: 6.1.0 decompress-response: 3.3.0 duplexer3: 0.1.5 @@ -13560,7 +14054,7 @@ packages: engines: {node: '>=6'} dev: true - /hardhat-abi-exporter@2.10.1(hardhat@2.18.1): + /hardhat-abi-exporter@2.10.1(hardhat@2.18.2): resolution: {integrity: sha512-X8GRxUTtebMAd2k4fcPyVnCdPa6dYK4lBsrwzKP5yiSq4i+WadWPIumaLfce53TUf/o2TnLpLOduyO1ylE2NHQ==} engines: {node: '>=14.14.0'} peerDependencies: @@ -13568,31 +14062,31 @@ packages: dependencies: '@ethersproject/abi': 5.7.0 delete-empty: 3.0.0 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) dev: true - /hardhat-contract-sizer@2.10.0(hardhat@2.18.1): + /hardhat-contract-sizer@2.10.0(hardhat@2.18.2): resolution: {integrity: sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==} peerDependencies: hardhat: ^2.0.0 dependencies: chalk: 4.1.2 cli-table3: 0.6.3 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) strip-ansi: 6.0.1 dev: true - /hardhat-docgen@1.3.0(hardhat@2.18.1)(prettier@3.0.3): + /hardhat-docgen@1.3.0(hardhat@2.18.2)(prettier@3.0.3): resolution: {integrity: sha512-paaiOHjJFLCLz2/qM1TQ7ZEG+Vy+LBvJL+SW4A64ZhBnVnyoZ/zv9DvEuawaWhqP5P7AOM6r22reVz4ecWgW7A==} engines: {node: '>=14.14.0'} peerDependencies: hardhat: ^2.0.0 dependencies: css-loader: 6.8.1(webpack@5.89.0) - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) html-webpack-plugin: 5.5.3(webpack@5.89.0) vue: 2.7.14 - vue-loader: 15.10.2(css-loader@6.8.1)(prettier@3.0.3)(vue-template-compiler@2.7.14)(webpack@5.89.0) + vue-loader: 15.11.1(css-loader@6.8.1)(prettier@3.0.3)(vue-template-compiler@2.7.14)(webpack@5.89.0) vue-router: 3.6.5(vue@2.7.14) vue-template-compiler: 2.7.14 webpack: 5.89.0 @@ -13659,14 +14153,14 @@ packages: - whiskers dev: true - /hardhat-gas-reporter@1.0.9(hardhat@2.18.1): + /hardhat-gas-reporter@1.0.9(hardhat@2.18.2): resolution: {integrity: sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==} peerDependencies: hardhat: ^2.0.2 dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -13675,17 +14169,17 @@ packages: - utf-8-validate dev: true - /hardhat-preprocessor@0.1.5(hardhat@2.18.1): + /hardhat-preprocessor@0.1.5(hardhat@2.18.2): resolution: {integrity: sha512-j8m44mmPxpxAAd0G8fPHRHOas/INZdzptSur0TNJvMEGcFdLDhbHHxBcqZVQ/bmiW42q4gC60AP4CXn9EF018g==} peerDependencies: hardhat: ^2.0.5 dependencies: - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) murmur-128: 0.2.1 dev: true - /hardhat@2.18.1(ts-node@10.9.1)(typescript@5.2.2): - resolution: {integrity: sha512-b55rW7Ka+fvJeg6oWuBTXoYQEUurevCCankjGNTwczwD3GnkhV9GEei7KUT+9IKmWx3lC+zyxlFxeDbg0gUoHw==} + /hardhat@2.18.2(ts-node@10.9.1)(typescript@5.2.2): + resolution: {integrity: sha512-lUVmJg7DsKcUCDpqv57CJl6vHqo/1PeHSfM3+WIa8UtRKmXyVTj1qQK01TDiuetkZBVg9Dn52qU+ZwaJQynaKA==} hasBin: true peerDependencies: ts-node: '*' @@ -13710,7 +14204,7 @@ packages: '@nomicfoundation/ethereumjs-vm': 7.0.2 '@nomicfoundation/solidity-analyzer': 0.1.1 '@sentry/node': 5.30.0 - '@types/bn.js': 5.1.2 + '@types/bn.js': 5.1.3 '@types/lru-cache': 5.1.1 adm-zip: 0.4.16 aggregate-error: 3.1.0 @@ -13740,10 +14234,10 @@ packages: solc: 0.7.3(debug@4.3.4) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 - ts-node: 10.9.1(@types/node@20.8.6)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) tsort: 0.0.1 typescript: 5.2.2 - undici: 5.26.3 + undici: 5.26.5 uuid: 8.3.2 ws: 7.5.9 transitivePeerDependencies: @@ -13776,16 +14270,16 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.1 - dev: true + get-intrinsic: 1.2.2 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -13839,6 +14333,7 @@ packages: /has@1.0.4: resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} + dev: true /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} @@ -13847,6 +14342,7 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 + dev: true /hash-obj@4.0.0: resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} @@ -13867,10 +14363,16 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + /hast-util-from-dom@5.0.0: resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 hastscript: 8.0.0 web-namespaces: 2.0.1 dev: false @@ -13878,7 +14380,7 @@ packages: /hast-util-from-html-isomorphic@2.0.0: resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 hast-util-from-dom: 5.0.0 hast-util-from-html: 2.0.1 unist-util-remove-position: 5.0.0 @@ -13887,7 +14389,7 @@ packages: /hast-util-from-html@2.0.1: resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 @@ -13898,11 +14400,11 @@ packages: /hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} dependencies: - '@types/hast': 3.0.1 - '@types/unist': 3.0.0 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 devlop: 1.1.0 hastscript: 8.0.0 - property-information: 6.3.0 + property-information: 6.4.0 vfile: 6.0.1 vfile-location: 5.0.2 web-namespaces: 2.0.1 @@ -13911,20 +14413,20 @@ packages: /hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 dev: false /hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 dev: false /hast-util-raw@9.0.1: resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} dependencies: - '@types/hast': 3.0.1 - '@types/unist': 3.0.0 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.1 hast-util-to-parse5: 8.0.0 @@ -13941,17 +14443,17 @@ packages: /hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: - '@types/estree': 1.0.2 - '@types/estree-jsx': 1.0.1 - '@types/hast': 2.3.6 - '@types/unist': 2.0.8 + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 estree-util-attach-comments: 2.1.1 estree-util-is-identifier-name: 2.1.0 hast-util-whitespace: 2.0.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.3.0 + property-information: 6.4.0 space-separated-tokens: 2.0.2 style-to-object: 0.4.4 unist-util-position: 4.0.4 @@ -13963,10 +14465,10 @@ packages: /hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 - property-information: 6.3.0 + property-information: 6.4.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 @@ -13975,8 +14477,8 @@ packages: /hast-util-to-text@4.0.0: resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==} dependencies: - '@types/hast': 3.0.1 - '@types/unist': 3.0.0 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 dev: false @@ -13988,10 +14490,10 @@ packages: /hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 6.3.0 + property-information: 6.4.0 space-separated-tokens: 2.0.2 dev: false @@ -14004,7 +14506,7 @@ packages: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} dependencies: capital-case: 1.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /heap@0.2.6: @@ -14102,6 +14604,15 @@ packages: entities: 2.2.0 dev: true + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: true + /http-basic@8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} @@ -14167,7 +14678,7 @@ packages: dependencies: assert-plus: 1.0.0 jsprim: 1.4.2 - sshpk: 1.17.0 + sshpk: 1.18.0 dev: true /http2-wrapper@1.0.3: @@ -14232,6 +14743,10 @@ packages: postcss: 8.4.31 dev: true + /idb-wrapper@1.7.2: + resolution: {integrity: sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==} + dev: true + /identicon.js@2.3.3: resolution: {integrity: sha512-/qgOkXKZ7YbeCYbawJ9uQQ3XJ3uBg9VDpvHjabCAPp6aRMhjLaFAxG90+1TxzrhKaj6AYpVGrx6UXQfQA41UEA==} dev: false @@ -14239,6 +14754,7 @@ packages: /idna-uts46-hx@2.3.1: resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} engines: {node: '>=4.0.0'} + requiresBuild: true dependencies: punycode: 2.1.0 dev: true @@ -14302,8 +14818,8 @@ packages: resolve-cwd: 3.0.0 dev: true - /import-meta-resolve@3.0.0: - resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} dev: true /imul@1.0.1: @@ -14321,6 +14837,10 @@ packages: engines: {node: '>=8'} dev: true + /indexof@0.0.1: + resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} + dev: true + /infer-owner@1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} dev: true @@ -14342,12 +14862,12 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 dev: true @@ -14375,7 +14895,7 @@ packages: '@formatjs/ecma402-abstract': 1.11.4 '@formatjs/fast-memoize': 1.2.1 '@formatjs/icu-messageformat-parser': 2.1.0 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /invariant@2.2.4: @@ -14406,18 +14926,11 @@ packages: dev: true optional: true - /is-accessor-descriptor@0.1.6: - resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-accessor-descriptor@1.0.0: - resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} - engines: {node: '>=0.10.0'} + /is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} dependencies: - kind-of: 6.0.3 + hasown: 2.0.0 dev: true /is-alphabetical@2.0.1: @@ -14435,14 +14948,14 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 dev: true @@ -14471,7 +14984,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true @@ -14483,6 +14996,13 @@ packages: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -14494,23 +15014,17 @@ packages: ci-info: 2.0.0 dev: true - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.4 - - /is-data-descriptor@0.1.4: - resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} - engines: {node: '>=0.10.0'} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - kind-of: 3.2.2 + hasown: 2.0.0 dev: true - /is-data-descriptor@1.0.0: - resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} - engines: {node: '>=0.10.0'} + /is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} dependencies: - kind-of: 6.0.3 + hasown: 2.0.0 dev: true /is-date-object@1.0.5: @@ -14524,22 +15038,20 @@ packages: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: false - /is-descriptor@0.1.6: - resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} - engines: {node: '>=0.10.0'} + /is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} dependencies: - is-accessor-descriptor: 0.1.6 - is-data-descriptor: 0.1.4 - kind-of: 5.1.0 + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 dev: true - /is-descriptor@1.0.2: - resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} - engines: {node: '>=0.10.0'} + /is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} dependencies: - is-accessor-descriptor: 1.0.0 - is-data-descriptor: 1.0.0 - kind-of: 6.0.3 + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 dev: true /is-directory@0.3.1: @@ -14625,6 +15137,7 @@ packages: /is-hex-prefixed@1.0.0: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} + dev: true /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -14676,6 +15189,10 @@ packages: engines: {node: '>=12'} dev: false + /is-object@0.1.2: + resolution: {integrity: sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==} + dev: true + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -14725,14 +15242,14 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-ssh@1.4.0: @@ -14773,7 +15290,7 @@ packages: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -14799,7 +15316,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-windows@1.0.2: @@ -14814,6 +15331,10 @@ packages: is-docker: 2.2.1 dev: true + /is@0.2.7: + resolution: {integrity: sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==} + dev: true + /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} dev: true @@ -14825,6 +15346,10 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + /isbuffer@0.0.0: + resolution: {integrity: sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -14856,14 +15381,6 @@ packages: dependencies: ws: 7.5.9 - /isomorphic-ws@5.0.0(ws@8.12.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' - dependencies: - ws: 8.12.0 - dev: true - /isows@1.0.3(ws@8.13.0): resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: @@ -14880,6 +15397,11 @@ packages: engines: {node: '>=8'} dev: true + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} @@ -14935,7 +15457,7 @@ packages: engines: {node: '>=8'} hasBin: true dependencies: - '@types/connect': 3.4.36 + '@types/connect': 3.4.37 '@types/node': 12.20.55 '@types/ws': 7.4.7 JSONStream: 1.3.5 @@ -14967,7 +15489,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -15092,7 +15614,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -15110,7 +15632,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -15125,8 +15647,8 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.7 - '@types/node': 20.8.6 + '@types/graceful-fs': 4.1.8 + '@types/node': 20.9.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15148,7 +15670,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -15189,7 +15711,7 @@ packages: dependencies: '@babel/code-frame': 7.22.13 '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.2 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 @@ -15203,7 +15725,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 dev: true /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -15259,7 +15781,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -15316,7 +15838,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 graceful-fs: 4.2.11 dev: true @@ -15331,7 +15853,7 @@ packages: '@babel/types': 7.23.0 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__traverse': 7.20.2 + '@types/babel__traverse': 7.20.3 '@types/prettier': 2.7.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) chalk: 4.1.2 @@ -15355,7 +15877,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -15380,7 +15902,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.8.6 + '@types/node': 20.9.0 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -15391,7 +15913,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -15422,6 +15944,11 @@ packages: hasBin: true dev: true + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + /js-base64@2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: true @@ -15436,16 +15963,12 @@ packages: /js-sha3@0.5.7: resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + requiresBuild: true dev: true /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - /js-string-escape@1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} - dev: true - /js-tokens@3.0.2: resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} dev: true @@ -15488,7 +16011,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.10.0 + acorn: 8.11.2 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -15572,6 +16095,7 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true /json-buffer@3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} @@ -15604,13 +16128,6 @@ packages: - supports-color dev: true - /json-rpc-engine@5.4.0: - resolution: {integrity: sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==} - dependencies: - eth-rpc-errors: 3.0.0 - safe-event-emitter: 1.0.1 - dev: false - /json-rpc-engine@6.1.0: resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} engines: {node: '>=10.0.0'} @@ -15647,6 +16164,7 @@ packages: resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} dependencies: jsonify: 0.0.1 + dev: true /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -15667,6 +16185,7 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + dev: true /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -15686,13 +16205,14 @@ packages: /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 dev: true /jsonify@0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: true /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -15763,11 +16283,6 @@ packages: is-buffer: 1.1.6 dev: true - /kind-of@5.1.0: - resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} - engines: {node: '>=0.10.0'} - dev: true - /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -15793,8 +16308,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - /known-css-properties@0.27.0: - resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==} + /known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} dev: true /layout-base@1.0.2: @@ -15891,6 +16406,14 @@ packages: lefthook-windows-x64: 1.5.2 dev: true + /level-blobs@0.1.7: + resolution: {integrity: sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==} + dependencies: + level-peek: 1.0.6 + once: 1.4.0 + readable-stream: 1.1.14 + dev: true + /level-codec@7.0.1: resolution: {integrity: sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==} dev: true @@ -15920,12 +16443,42 @@ packages: errno: 0.1.8 dev: true + /level-filesystem@1.2.0: + resolution: {integrity: sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==} + dependencies: + concat-stream: 1.6.2 + errno: 0.1.8 + fwd-stream: 1.0.4 + level-blobs: 0.1.7 + level-peek: 1.0.6 + level-sublevel: 5.2.3 + octal: 1.0.0 + once: 1.4.0 + xtend: 2.2.0 + dev: true + + /level-fix-range@1.0.2: + resolution: {integrity: sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==} + dev: true + + /level-fix-range@2.0.0: + resolution: {integrity: sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==} + dependencies: + clone: 0.1.19 + dev: true + + /level-hooks@4.5.0: + resolution: {integrity: sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==} + dependencies: + string-range: 1.2.2 + dev: true + /level-iterator-stream@1.3.1: resolution: {integrity: sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==} dependencies: inherits: 2.0.4 level-errors: 1.0.5 - readable-stream: 1.0.34 + readable-stream: 1.1.14 xtend: 4.0.2 dev: true @@ -15956,6 +16509,17 @@ packages: xtend: 4.0.2 dev: true + /level-js@2.2.4: + resolution: {integrity: sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==} + dependencies: + abstract-leveldown: 0.12.4 + idb-wrapper: 1.7.2 + isbuffer: 0.0.0 + ltgt: 2.2.1 + typedarray-to-buffer: 1.0.4 + xtend: 2.1.2 + dev: true + /level-mem@3.0.1: resolution: {integrity: sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==} engines: {node: '>=6'} @@ -15988,12 +16552,27 @@ packages: levelup: 4.4.0 dev: true + /level-peek@1.0.6: + resolution: {integrity: sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==} + dependencies: + level-fix-range: 1.0.2 + dev: true + /level-post@1.0.7: resolution: {integrity: sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==} dependencies: ltgt: 2.2.1 dev: true + /level-sublevel@5.2.3: + resolution: {integrity: sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==} + dependencies: + level-fix-range: 2.0.0 + level-hooks: 4.5.0 + string-range: 1.2.2 + xtend: 2.0.6 + dev: true + /level-sublevel@6.6.4: resolution: {integrity: sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA==} dependencies: @@ -16062,6 +16641,18 @@ packages: classic-level: 1.3.0 dev: true + /levelup@0.18.6: + resolution: {integrity: sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==} + dependencies: + bl: 0.8.2 + deferred-leveldown: 0.2.0 + errno: 0.1.8 + prr: 0.0.0 + readable-stream: 1.0.34 + semver: 2.3.2 + xtend: 3.0.0 + dev: true + /levelup@1.3.9: resolution: {integrity: sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==} dependencies: @@ -16135,7 +16726,15 @@ packages: /lit-html@2.8.0: resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} dependencies: - '@types/trusted-types': 2.0.4 + '@types/trusted-types': 2.0.5 + + /lit@2.7.5: + resolution: {integrity: sha512-i/cH7Ye6nBDUASMnfwcictBnsTN91+aBjXoTHF2xARghXScKxpD4F4WYI+VLXg9lqbMinDfvoI7VnZXjyHgdfQ==} + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + dev: false /lit@2.7.6: resolution: {integrity: sha512-1amFHA7t4VaaDe+vdQejSVBklwtH9svGoG6/dZi9JhxtJBBlqY5D1RV7iLUYY0trCqQc4NfhYYZilZiVHt7Hxg==} @@ -16248,6 +16847,7 @@ packages: /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} @@ -16343,7 +16943,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: true /lowercase-keys@1.0.1: @@ -16360,8 +16960,8 @@ packages: dev: true optional: true - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} dev: true @@ -16381,6 +16981,7 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -16521,32 +17122,26 @@ packages: engines: {node: '>=8.9.0'} dev: true - /md5-hex@3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} - dependencies: - blueimp-md5: 2.19.0 - dev: true - /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: true /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: - '@types/mdast': 3.0.13 - '@types/unist': 2.0.8 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 unist-util-visit: 4.1.2 dev: false /mdast-util-find-and-replace@2.2.2: resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 escape-string-regexp: 5.0.0 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 @@ -16555,8 +17150,8 @@ packages: /mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: - '@types/mdast': 3.0.13 - '@types/unist': 2.0.8 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 micromark: 3.2.0 @@ -16574,7 +17169,7 @@ packages: /mdast-util-gfm-autolink-literal@1.0.3: resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 ccount: 2.0.1 mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.2.0 @@ -16583,7 +17178,7 @@ packages: /mdast-util-gfm-footnote@1.0.2: resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-util-normalize-identifier: 1.1.0 dev: false @@ -16591,14 +17186,14 @@ packages: /mdast-util-gfm-strikethrough@1.0.3: resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 dev: false /mdast-util-gfm-table@1.0.7: resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 markdown-table: 3.0.3 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 @@ -16609,7 +17204,7 @@ packages: /mdast-util-gfm-task-list-item@1.0.2: resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 dev: false @@ -16630,7 +17225,7 @@ packages: /mdast-util-math@2.0.2: resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 longest-streak: 3.1.0 mdast-util-to-markdown: 1.5.0 dev: false @@ -16638,9 +17233,9 @@ packages: /mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: - '@types/estree-jsx': 1.0.1 - '@types/hast': 2.3.6 - '@types/mdast': 3.0.13 + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: @@ -16650,10 +17245,10 @@ packages: /mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: - '@types/estree-jsx': 1.0.1 - '@types/hast': 2.3.6 - '@types/mdast': 3.0.13 - '@types/unist': 2.0.8 + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 ccount: 2.0.1 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 @@ -16681,9 +17276,9 @@ packages: /mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: - '@types/estree-jsx': 1.0.1 - '@types/hast': 2.3.6 - '@types/mdast': 3.0.13 + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: @@ -16693,15 +17288,15 @@ packages: /mdast-util-phrasing@3.0.1: resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 unist-util-is: 5.2.1 dev: false /mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: - '@types/hast': 2.3.6 - '@types/mdast': 3.0.13 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 mdast-util-definitions: 5.1.2 micromark-util-sanitize-uri: 1.2.0 trim-lines: 3.0.1 @@ -16713,8 +17308,8 @@ packages: /mdast-util-to-hast@13.0.2: resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} dependencies: - '@types/hast': 3.0.1 - '@types/mdast': 4.0.1 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.0 @@ -16726,8 +17321,8 @@ packages: /mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: - '@types/mdast': 3.0.13 - '@types/unist': 2.0.8 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 mdast-util-to-string: 3.2.0 @@ -16739,7 +17334,7 @@ packages: /mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 dev: false /mdn-data@2.0.30: @@ -16818,7 +17413,7 @@ packages: resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} engines: {node: '>=10'} dependencies: - '@types/minimist': 1.2.3 + '@types/minimist': 1.2.4 camelcase-keys: 6.2.2 decamelize: 1.2.0 decamelize-keys: 1.1.1 @@ -16889,26 +17484,15 @@ packages: semaphore-async-await: 1.5.1 dev: true - /merkletreejs@0.3.11: - resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} - engines: {node: '>= 7.6.0'} - dependencies: - bignumber.js: 9.1.2 - buffer-reverse: 1.0.1 - crypto-js: 4.2.0 - treeify: 1.1.0 - web3-utils: 1.10.2 - dev: false - - /mermaid@10.5.0: - resolution: {integrity: sha512-9l0o1uUod78D3/FVYPGSsgV+Z0tSnzLBDiC9rVzvelPxuO80HbN1oDr9ofpPETQy9XpypPQa26fr09VzEPfvWA==} + /mermaid@10.6.1: + resolution: {integrity: sha512-Hky0/RpOw/1il9X8AvzOEChfJtVvmXm+y7JML5C//ePYMy0/9jCEmW1E1g86x9oDfW9+iVEdTV/i+M6KWRNs4A==} dependencies: '@braintree/sanitize-url': 6.0.4 - '@types/d3-scale': 4.0.5 - '@types/d3-scale-chromatic': 3.0.0 - cytoscape: 3.26.0 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.26.0) - cytoscape-fcose: 2.2.0(cytoscape@3.26.0) + '@types/d3-scale': 4.0.8 + '@types/d3-scale-chromatic': 3.0.3 + cytoscape: 3.27.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.27.0) + cytoscape-fcose: 2.2.0(cytoscape@3.27.0) d3: 7.8.5 d3-sankey: 0.12.3 dagre-d3-es: 7.0.10 @@ -16936,6 +17520,7 @@ packages: /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + dev: true /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -17033,7 +17618,7 @@ packages: /micromark-extension-math@2.1.2: resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==} dependencies: - '@types/katex': 0.16.3 + '@types/katex': 0.16.7 katex: 0.16.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -17045,7 +17630,7 @@ packages: /micromark-extension-mdx-expression@1.0.8: resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -17059,7 +17644,7 @@ packages: resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -17079,7 +17664,7 @@ packages: /micromark-extension-mdxjs-esm@1.0.5: resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -17093,8 +17678,8 @@ packages: /micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -17123,7 +17708,7 @@ packages: /micromark-factory-mdx-expression@1.0.9: resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -17220,8 +17805,8 @@ packages: resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.2 - '@types/unist': 2.0.8 + '@types/estree': 1.0.5 + '@types/unist': 2.0.10 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 @@ -17289,7 +17874,7 @@ packages: /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.7 + '@types/debug': 4.1.12 debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 @@ -17365,12 +17950,6 @@ packages: dev: true optional: true - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -17527,11 +18106,6 @@ packages: engines: {node: '>=8'} dev: true - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /minizlib@1.3.3: resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} requiresBuild: true @@ -17607,7 +18181,7 @@ packages: /mlly@1.4.2: resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: - acorn: 8.10.0 + acorn: 8.11.2 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.3.1 @@ -17684,15 +18258,15 @@ packages: dev: true optional: true - /mock-property@1.0.2: - resolution: {integrity: sha512-GHVKHd3bFiXtvZtp23+8+EQLMeDJWcEVrSA2pOBs1KB5Uh2ww8Q+9fYDljS67k3GzU4DIDBa6+qRIgfZ2Bp+gQ==} + /mock-property@1.0.3: + resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 gopd: 1.0.1 - has: 1.0.4 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 + hasown: 2.0.0 isarray: 2.0.5 dev: true @@ -17818,8 +18392,8 @@ packages: hasBin: true dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -17880,26 +18454,26 @@ packages: - supports-color dev: false - /next-seo@6.1.0(next@13.5.4)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-iMBpFoJsR5zWhguHJvsoBDxDSmdYTHtnVPB1ij+CD0NReQCP78ZxxbdL9qkKIf4oEuZEqZkrjAQLB0bkII7RYA==} + /next-seo@6.4.0(next@13.5.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-XQFxkOL2hw0YE+P100HbI3EAvcludlHPxuzMgaIjKb7kPK0CvjGvLFjd9hszZFEDc5oiQkGFA8+cuWcnip7eYA==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.5.4(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-themes@0.2.1(next@13.5.4)(react-dom@18.2.0)(react@18.2.0): + /next-themes@0.2.1(next@13.5.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 13.5.4(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -17907,8 +18481,8 @@ packages: /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - /next@13.5.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==} + /next@13.5.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==} engines: {node: '>=16.14.0'} hasBin: true peerDependencies: @@ -17922,31 +18496,31 @@ packages: sass: optional: true dependencies: - '@next/env': 13.5.4 + '@next/env': 13.5.6 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001549 + caniuse-lite: 1.0.30001561 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0) watchpack: 2.4.0 optionalDependencies: - '@next/swc-darwin-arm64': 13.5.4 - '@next/swc-darwin-x64': 13.5.4 - '@next/swc-linux-arm64-gnu': 13.5.4 - '@next/swc-linux-arm64-musl': 13.5.4 - '@next/swc-linux-x64-gnu': 13.5.4 - '@next/swc-linux-x64-musl': 13.5.4 - '@next/swc-win32-arm64-msvc': 13.5.4 - '@next/swc-win32-ia32-msvc': 13.5.4 - '@next/swc-win32-x64-msvc': 13.5.4 + '@next/swc-darwin-arm64': 13.5.6 + '@next/swc-darwin-x64': 13.5.6 + '@next/swc-linux-arm64-gnu': 13.5.6 + '@next/swc-linux-arm64-musl': 13.5.6 + '@next/swc-linux-x64-gnu': 13.5.6 + '@next/swc-linux-x64-musl': 13.5.6 + '@next/swc-win32-arm64-msvc': 13.5.6 + '@next/swc-win32-ia32-msvc': 13.5.6 + '@next/swc-win32-x64-msvc': 13.5.6 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /nextra-theme-docs@2.13.2(next@13.5.4)(nextra@2.13.2)(react-dom@18.2.0)(react@18.2.0): + /nextra-theme-docs@2.13.2(next@13.5.6)(nextra@2.13.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yE4umXaImp1/kf/sFciPj2+EFrNSwd9Db26hi98sIIiujzGf3+9eUgAz45vF9CwBw50FSXxm1QGRcY+slQ4xQQ==} peerDependencies: next: '>=9.5.3' @@ -17960,20 +18534,20 @@ packages: escape-string-regexp: 5.0.0 flexsearch: 0.7.31 focus-visible: 5.2.0 - git-url-parse: 13.1.0 + git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.1 - next: 13.5.4(react-dom@18.2.0)(react@18.2.0) - next-seo: 6.1.0(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) - next-themes: 0.2.1(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) - nextra: 2.13.2(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(react-dom@18.2.0)(react@18.2.0) + next-seo: 6.4.0(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.2.1(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) + nextra: 2.13.2(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 zod: 3.22.4 dev: false - /nextra@2.13.2(next@13.5.4)(react-dom@18.2.0)(react@18.2.0): + /nextra@2.13.2(next@13.5.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pIgOSXNUqTz1laxV4ChFZOU7lzJAoDHHaBPj8L09PuxrLKqU1BU/iZtXAG6bQeKCx8EPdBsoXxEuENnL9QGnGA==} engines: {node: '>=16'} peerDependencies: @@ -17993,7 +18567,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.9 lodash.get: 4.4.2 - next: 13.5.4(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -18022,11 +18596,11 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.4.1 + tslib: 2.6.2 dev: true - /node-abi@3.50.0: - resolution: {integrity: sha512-2Gxu7Eq7vnBIRfYSmqPruEllMM14FjOQFJSoqdGWthVn+tmwEXzmdPpya6cvvwf0uZA3F5N1fMFr9mijZBplFA==} + /node-abi@3.51.0: + resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} engines: {node: '>=10'} dependencies: semver: 7.5.4 @@ -18114,9 +18688,10 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true - /node-sass@7.0.1: - resolution: {integrity: sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==} + /node-sass@7.0.3: + resolution: {integrity: sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -18133,7 +18708,7 @@ packages: node-gyp: 8.4.1 npmlog: 5.0.1 request: 2.88.2 - sass-graph: 4.0.0 + sass-graph: 4.0.1 stdout-stream: 1.4.1 true-case-path: 1.0.3 transitivePeerDependencies: @@ -18179,7 +18754,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.0 + is-core-module: 2.13.1 semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true @@ -18270,6 +18845,7 @@ packages: dependencies: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 + dev: true /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} @@ -18296,23 +18872,31 @@ packages: /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-inspect@1.13.0: - resolution: {integrity: sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 dev: true + /object-keys@0.2.0: + resolution: {integrity: sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==} + deprecated: Please update to the latest object-keys + dependencies: + foreach: 2.0.6 + indexof: 0.0.1 + is: 0.2.7 + dev: true + /object-keys@0.4.0: resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} dev: true @@ -18343,7 +18927,7 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -18353,9 +18937,9 @@ packages: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /object.getownpropertydescriptors@2.1.7: @@ -18363,19 +18947,19 @@ packages: engines: {node: '>= 0.8'} dependencies: array.prototype.reduce: 1.0.6 - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 safe-array-concat: 1.0.1 dev: true /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 dev: true /object.pick@1.3.0: @@ -18389,9 +18973,9 @@ packages: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /obliterator@2.0.4: @@ -18406,6 +18990,10 @@ packages: dev: true optional: true + /octal@1.0.0: + resolution: {integrity: sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==} + dev: true + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} @@ -18609,7 +19197,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /parent-module@1.0.1: @@ -18636,7 +19224,7 @@ packages: /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 @@ -18711,7 +19299,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /pascalcase@0.1.1: @@ -18769,7 +19357,7 @@ packages: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} dependencies: dot-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /path-exists@2.1.0: @@ -18813,13 +19401,14 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true /path-scurry@1.10.1: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.1 - minipass: 7.0.4 + lru-cache: 10.1.0 + minipass: 5.0.0 dev: true /path-starts-with@2.0.1: @@ -18864,6 +19453,7 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 + dev: true /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -18872,7 +19462,7 @@ packages: /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.3 estree-walker: 3.0.3 is-reference: 3.0.2 @@ -18963,10 +19553,20 @@ packages: pathe: 1.1.1 dev: true - /playwright-core@1.28.1: - resolution: {integrity: sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag==} - engines: {node: '>=14'} + /playwright-core@1.39.0: + resolution: {integrity: sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==} + engines: {node: '>=16'} + hasBin: true + dev: true + + /playwright@1.39.0: + resolution: {integrity: sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==} + engines: {node: '>=16'} hasBin: true + dependencies: + playwright-core: 1.39.0 + optionalDependencies: + fsevents: 2.3.2 dev: true /pluralize@8.0.0: @@ -19071,14 +19671,14 @@ packages: yaml: 2.3.3 dev: true - /postcss-loader@7.3.3(postcss@8.4.31)(typescript@4.6.4)(webpack@5.89.0): + /postcss-loader@7.3.3(postcss@8.4.31)(typescript@4.9.5)(webpack@5.89.0): resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} engines: {node: '>= 14.15.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 dependencies: - cosmiconfig: 8.3.6(typescript@4.6.4) + cosmiconfig: 8.3.6(typescript@4.9.5) jiti: 1.20.0 postcss: 8.4.31 semver: 7.5.4 @@ -19157,6 +19757,15 @@ packages: postcss: 8.4.31 dev: true + /postcss-scss@4.0.9(postcss@8.4.31): + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + dependencies: + postcss: 8.4.31 + dev: true + /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} @@ -19181,7 +19790,7 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 @@ -19193,6 +19802,9 @@ packages: /preact@10.18.1: resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==} + /preact@10.19.0: + resolution: {integrity: sha512-klJSys/ljj/Z97DrYogoUE2R2qQCtHQD9kJAEDzn/sTDx7dXAfGEbGKvLLVLs2Mhy3t5RDRGrDcWPNAky6KsUw==} + /preact@10.4.1: resolution: {integrity: sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==} dev: false @@ -19208,7 +19820,7 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.50.0 + node-abi: 3.51.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -19245,14 +19857,14 @@ packages: fast-diff: 1.3.0 dev: true - /prettier-plugin-svelte@3.0.0(prettier@3.0.3)(svelte@4.1.0): - resolution: {integrity: sha512-l3RQcPty2UBCoRh3yb9c5XCAmxkrc4BptAnbd5acO1gmSJtChOWkiEjnOvh7hvmtT4V80S8gXCOKAq8RNeIzSw==} + /prettier-plugin-svelte@3.1.0(prettier@3.0.3)(svelte@4.2.3): + resolution: {integrity: sha512-96+AZxs2ESqIFA9j+o+DHqY+BsUglezfl553LQd6VOtTyJq5GPuBEb3ElxF2cerFzKlYKttlH/VcVmRNj5oc3A==} peerDependencies: prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 dependencies: prettier: 3.0.3 - svelte: 4.1.0 + svelte: 4.2.3 dev: true /prettier@2.7.1: @@ -19289,6 +19901,15 @@ packages: react-is: 17.0.2 dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -19362,8 +19983,8 @@ packages: signal-exit: 3.0.7 dev: true - /property-information@6.3.0: - resolution: {integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==} + /property-information@6.4.0: + resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} dev: false /protocols@2.0.1: @@ -19386,6 +20007,10 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + /prr@0.0.0: + resolution: {integrity: sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==} + dev: true + /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} dev: true @@ -19462,6 +20087,7 @@ packages: /punycode@2.1.0: resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} engines: {node: '>=6'} + requiresBuild: true dev: true /punycode@2.3.0: @@ -19469,6 +20095,11 @@ packages: engines: {node: '>=6'} dev: true + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + /qrcode@1.4.4: resolution: {integrity: sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==} engines: {node: '>=4'} @@ -19641,6 +20272,10 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -19683,7 +20318,7 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: - '@types/normalize-package-data': 2.4.2 + '@types/normalize-package-data': 2.4.3 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 @@ -19698,6 +20333,15 @@ packages: string_decoder: 0.10.31 dev: true + /readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: @@ -19811,13 +20455,13 @@ packages: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 dev: true - /regexparam@2.0.0: - resolution: {integrity: sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==} + /regexparam@2.0.1: + resolution: {integrity: sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==} engines: {node: '>=8'} dev: false @@ -19867,8 +20511,8 @@ packages: /rehype-katex@7.0.0: resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==} dependencies: - '@types/hast': 3.0.1 - '@types/katex': 0.16.3 + '@types/hast': 3.0.3 + '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.0 katex: 0.16.9 @@ -19882,7 +20526,7 @@ packages: peerDependencies: shiki: '*' dependencies: - '@types/hast': 2.3.6 + '@types/hast': 2.3.8 hash-obj: 4.0.0 parse-numeric-range: 1.3.0 shiki: 0.14.5 @@ -19891,7 +20535,7 @@ packages: /rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} dependencies: - '@types/hast': 3.0.1 + '@types/hast': 3.0.3 hast-util-raw: 9.0.1 vfile: 6.0.1 dev: false @@ -19904,7 +20548,7 @@ packages: /remark-gfm@3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 mdast-util-gfm: 2.0.2 micromark-extension-gfm: 2.0.3 unified: 10.1.2 @@ -19915,7 +20559,7 @@ packages: /remark-math@5.1.1: resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 mdast-util-math: 2.0.2 micromark-extension-math: 2.1.2 unified: 10.1.2 @@ -19924,7 +20568,7 @@ packages: /remark-mdx-disable-explicit-jsx@0.1.0: resolution: {integrity: sha512-NC7NUbu4bExZnsWDTJE3UhBRZujW3gyqMufhTHn2GHhZ5LetWzyieyuZerBPdSniLx4d7QKDbf+d3u/qmMGyaQ==} dependencies: - '@types/hast': 2.3.6 + '@types/hast': 2.3.8 unified: 10.1.2 unist-util-visit: 4.1.2 dev: false @@ -19941,7 +20585,7 @@ packages: /remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: - '@types/mdast': 3.0.13 + '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 unified: 10.1.2 transitivePeerDependencies: @@ -19960,8 +20604,8 @@ packages: /remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} dependencies: - '@types/hast': 2.3.6 - '@types/mdast': 3.0.13 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 dev: false @@ -20119,9 +20763,10 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /responselike@1.0.2: resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} @@ -20186,12 +20831,14 @@ packages: dependencies: hash-base: 3.1.0 inherits: 2.0.4 + dev: true /rlp@2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true dependencies: bn.js: 5.2.1 + dev: true /rlp@3.0.0: resolution: {integrity: sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw==} @@ -20202,9 +20849,10 @@ packages: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false - /rollup-plugin-node-builtins@2.0.0: - resolution: {integrity: sha512-jvsEYNf5U95YttEQbs5c6H7YSMYGs3SWA8/MfnlQ9ddijsgYbq8uKx4WQ1J8Zyrq+tgPF0Quu48PURrlcMZWoQ==} + /rollup-plugin-node-builtins@2.1.2: + resolution: {integrity: sha512-bxdnJw8jIivr2yEyt8IZSGqZkygIJOGAWypXvHXnwKAbUcN4Q/dGTx7K0oAJryC/m6aq6tKutltSeXtuogU6sw==} dependencies: + browserify-fs: 1.0.0 buffer-es6: 4.9.3 crypto-browserify: 3.12.0 process-es6: 0.11.6 @@ -20235,8 +20883,8 @@ packages: fsevents: 2.3.3 dev: true - /rpc-websockets@7.6.0: - resolution: {integrity: sha512-Jgcs8q6t8Go98dEulww1x7RysgTkzpCMelVxZW4hvuyFtOGpeUz9prpr2KjUa/usqxgFCd9Tu3+yhHEP9GVmiQ==} + /rpc-websockets@7.6.1: + resolution: {integrity: sha512-MmRGaJJvxTHSRxYPjJJqcj2zWnCetw7YbYbKlD0Yc7qVw6PsZhRJg1MI3mpWlpBs+4zO+urlNfLl9zLsdOD/gA==} dependencies: '@babel/runtime': 7.23.2 eventemitter3: 4.0.7 @@ -20286,7 +20934,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: true /sade@1.8.1: @@ -20299,8 +20947,8 @@ packages: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -20317,6 +20965,7 @@ packages: deprecated: Renamed to @metamask/safe-event-emitter dependencies: events: 3.3.0 + dev: true /safe-json-utils@1.1.1: resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} @@ -20324,8 +20973,8 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: true @@ -20351,19 +21000,19 @@ packages: rimraf: 2.7.1 dev: true - /sass-graph@4.0.0: - resolution: {integrity: sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==} + /sass-graph@4.0.1: + resolution: {integrity: sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==} engines: {node: '>=12'} hasBin: true dependencies: glob: 7.2.3 lodash: 4.17.21 - scss-tokenizer: 0.3.0 + scss-tokenizer: 0.4.3 yargs: 17.7.2 dev: true - /sass@1.69.3: - resolution: {integrity: sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==} + /sass@1.69.4: + resolution: {integrity: sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -20416,7 +21065,7 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.13 + '@types/json-schema': 7.0.14 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true @@ -20438,8 +21087,8 @@ packages: dev: true optional: true - /scss-tokenizer@0.3.0: - resolution: {integrity: sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==} + /scss-tokenizer@0.4.3: + resolution: {integrity: sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==} dependencies: js-base64: 2.6.4 source-map: 0.7.4 @@ -20453,6 +21102,7 @@ packages: elliptic: 6.5.4 node-addon-api: 2.0.2 node-gyp-build: 4.6.1 + dev: true /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} @@ -20476,6 +21126,11 @@ packages: engines: {node: '>=0.8.0'} dev: true + /semver@2.3.2: + resolution: {integrity: sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==} + hasBin: true + dev: true + /semver@5.4.1: resolution: {integrity: sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==} hasBin: true @@ -20489,6 +21144,7 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -20524,7 +21180,7 @@ packages: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 upper-case-first: 2.0.2 dev: true @@ -20576,13 +21232,22 @@ packages: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} dev: true + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 dev: true /set-immediate-shim@1.0.1: @@ -20602,6 +21267,7 @@ packages: /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -20680,9 +21346,9 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.13.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -20773,7 +21439,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.6.2 dev: true /snapdragon-node@2.1.1: @@ -20904,13 +21570,13 @@ packages: array.prototype.findlast: 1.2.3 dev: true - /solidity-docgen@0.6.0-beta.36(hardhat@2.18.1): + /solidity-docgen@0.6.0-beta.36(hardhat@2.18.2): resolution: {integrity: sha512-f/I5G2iJgU1h0XrrjRD0hHMr7C10u276vYvm//rw1TzFcYQ4xTOyAoi9oNAHRU0JU4mY9eTuxdVc2zahdMuhaQ==} peerDependencies: hardhat: ^2.8.0 dependencies: handlebars: 4.7.8 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) solidity-ast: 0.4.52 dev: true @@ -21058,8 +21724,8 @@ packages: /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - /sshpk@1.17.0: - resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + /sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} hasBin: true dependencies: @@ -21148,9 +21814,10 @@ packages: /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + dev: false - /streamx@2.15.1: - resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==} + /streamx@2.15.5: + resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -21179,6 +21846,10 @@ packages: strip-ansi: 6.0.1 dev: true + /string-range@1.2.2: + resolution: {integrity: sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==} + dev: true + /string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} @@ -21225,25 +21896,25 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /string_decoder@0.10.31: @@ -21343,6 +22014,7 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dependencies: is-hex-prefixed: 1.0.0 + dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -21363,7 +22035,7 @@ packages: /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - acorn: 8.10.0 + acorn: 8.11.2 dev: true /style-to-object@0.4.4: @@ -21438,6 +22110,7 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color@6.0.0: resolution: {integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==} @@ -21470,21 +22143,22 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true - /svelte-check@2.8.0(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1): - resolution: {integrity: sha512-HRL66BxffMAZusqe5I5k26mRWQ+BobGd9Rxm3onh7ZVu0nTk8YTKJ9vu3LVPjUGLU9IX7zS+jmwPVhJYdXJ8vg==} + /svelte-check@2.10.3(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2): + resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} hasBin: true peerDependencies: svelte: ^3.24.0 dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 chokidar: 3.5.3 fast-glob: 3.3.1 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 3.53.1 - svelte-preprocess: 4.10.7(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1)(typescript@5.2.2) + svelte: 3.59.2 + svelte-preprocess: 4.10.7(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@babel/core' @@ -21499,20 +22173,20 @@ packages: - sugarss dev: true - /svelte-check@3.4.6(postcss@8.4.31)(svelte@4.1.0): - resolution: {integrity: sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og==} + /svelte-check@3.6.0(postcss@8.4.31)(svelte@4.2.3): + resolution: {integrity: sha512-8VfqhfuRJ1sKW+o8isH2kPi0RhjXH1nNsIbCFGyoUHG+ZxVxHYRKcb+S8eaL/1tyj3VGvWYx3Y5+oCUsJgnzcw==} hasBin: true peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 + svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 chokidar: 3.5.3 - fast-glob: 3.3.1 + fast-glob: 3.3.2 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.1.0 - svelte-preprocess: 5.0.4(postcss@8.4.31)(svelte@4.1.0)(typescript@5.2.2) + svelte: 4.2.3 + svelte-preprocess: 5.1.0(postcss@8.4.31)(svelte@4.2.3)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@babel/core' @@ -21530,11 +22204,11 @@ packages: resolution: {integrity: sha512-oU+Xv7Dl4kRU2kdFjsoPLfJfnt5hUhsFUZtuzI3Ku/f2iAFZqBoEuXOqK3N9ngD4dxQOmN4OKWPHVi3NeAeAfQ==} dev: true - /svelte-eslint-parser@0.26.1(svelte@4.1.0): - resolution: {integrity: sha512-9amXrcFVhv9xrEdCnuIxai22NFQe/NwWVoD8cHGUHPhcU/yXlIHdhZX1L+0iLJszIPdK+iAgImC9IF572OXVWQ==} + /svelte-eslint-parser@0.33.1(svelte@4.2.3): + resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 + svelte: ^3.37.0 || ^4.0.0 peerDependenciesMeta: svelte: optional: true @@ -21542,86 +22216,103 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - svelte: 4.1.0 + postcss: 8.4.31 + postcss-scss: 4.0.9(postcss@8.4.31) + svelte: 4.2.3 dev: true - /svelte-heros-v2@0.3.10: - resolution: {integrity: sha512-e5ZhYN8blZwfhb2k4KYSfHnbbddonDNsglqMpwXLLwPVPBiJXeGpcPy2zkffq6kvkLS2tYipYOaAPSXimgtuUg==} + /svelte-heros-v2@0.3.21(svelte@3.59.2): + resolution: {integrity: sha512-IcFzoKuDJ6i0qiINfwwaDX5ZTsx/0A5EgB/LPZXMZa+BzxXnlalbcDwyV9ukNvdQLfxVamTb9HuZS677pD/rdQ==} + peerDependencies: + svelte: ^3.54.0 + dependencies: + svelte: 3.59.2 dev: true - /svelte-hmr@0.14.12(svelte@3.53.1): + /svelte-hmr@0.14.12(svelte@3.59.2): resolution: {integrity: sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: '>=3.19.0' dependencies: - svelte: 3.53.1 + svelte: 3.59.2 + dev: true + + /svelte-hmr@0.15.3(svelte@3.59.2): + resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} + peerDependencies: + svelte: ^3.19.0 || ^4.0.0 + dependencies: + svelte: 3.59.2 dev: true - /svelte-hmr@0.15.3(svelte@4.1.0): + /svelte-hmr@0.15.3(svelte@4.2.3): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.1.0 + svelte: 4.2.3 dev: true - /svelte-i18n@3.6.0(svelte@3.53.1): - resolution: {integrity: sha512-qvvcMqHVCXJ5pHoQR5uGzWAW5vS3qB9mBq+W6veLZ6jkrzZGOziR+wyOUJsc59BupMh+Ae30qjOndFrRU6v5jA==} + /svelte-i18n@3.7.4(svelte@3.59.2): + resolution: {integrity: sha512-yGRCNo+eBT4cPuU7IVsYTYjxB7I2V8qgUZPlHnNctJj5IgbJgV78flsRzpjZ/8iUYZrS49oCt7uxlU3AZv/N5Q==} engines: {node: '>= 16'} hasBin: true peerDependencies: - svelte: ^3.25.1 + svelte: ^3 || ^4 dependencies: cli-color: 2.0.3 deepmerge: 4.3.1 + esbuild: 0.19.5 estree-walker: 2.0.2 intl-messageformat: 9.13.0 sade: 1.8.1 - svelte: 3.53.1 + svelte: 3.59.2 tiny-glob: 0.2.9 dev: false - /svelte-i18n@3.6.0(svelte@4.1.0): - resolution: {integrity: sha512-qvvcMqHVCXJ5pHoQR5uGzWAW5vS3qB9mBq+W6veLZ6jkrzZGOziR+wyOUJsc59BupMh+Ae30qjOndFrRU6v5jA==} + /svelte-i18n@3.7.4(svelte@4.2.3): + resolution: {integrity: sha512-yGRCNo+eBT4cPuU7IVsYTYjxB7I2V8qgUZPlHnNctJj5IgbJgV78flsRzpjZ/8iUYZrS49oCt7uxlU3AZv/N5Q==} engines: {node: '>= 16'} hasBin: true peerDependencies: - svelte: ^3.25.1 + svelte: ^3 || ^4 dependencies: cli-color: 2.0.3 deepmerge: 4.3.1 + esbuild: 0.19.5 estree-walker: 2.0.2 intl-messageformat: 9.13.0 sade: 1.8.1 - svelte: 4.1.0 + svelte: 4.2.3 tiny-glob: 0.2.9 dev: false - /svelte-jester@2.1.5(jest@27.5.1)(svelte@3.53.1): - resolution: {integrity: sha512-T3JoPsNYltlN2MiVFDxAMOulIO4fztFFI3DhOkzbs1yZQCUFp6sqS6aqusBsIEMVmXaEDW4HO/6bX+CuwuEUSw==} - engines: {node: '>= 12'} + /svelte-jester@2.3.2(jest@27.5.1)(svelte@3.59.2): + resolution: {integrity: sha512-JtxSz4FWAaCRBXbPsh4LcDs4Ua7zdXgLC0TZvT1R56hRV0dymmNP+abw67DTPF7sQPyNxWsOKd0Sl7Q8SnP8kg==} + engines: {node: '>=14'} peerDependencies: jest: '>= 27' svelte: '>= 3' dependencies: jest: 27.5.1 - svelte: 3.53.1 + svelte: 3.59.2 dev: true - /svelte-loader@3.1.2(svelte@3.53.1): - resolution: {integrity: sha512-RhVIvitb+mtIwKNyvNQoDQ0EhXg2KH8LhQiiqeJh8u6vqJyGWoMoFcYCar69TT+1iaK5IYe0wPNYJ6TILcsurw==} + /svelte-loader@3.1.9(svelte@3.59.2): + resolution: {integrity: sha512-RITPqze3TppOhaZF8SEFTDTwFHov17k3UkOjpxyL/No/YVrvckKmXWOEj7QEpsZZZSNQPb28tMZbHEI2xLhJMQ==} peerDependencies: - svelte: '>3.0.0' + svelte: ^3.0.0 || ^4.0.0-next.0 dependencies: loader-utils: 2.0.4 - svelte: 3.53.1 + svelte: 3.59.2 svelte-dev-helper: 1.1.9 - svelte-hmr: 0.14.12(svelte@3.53.1) + svelte-hmr: 0.14.12(svelte@3.59.2) dev: true - /svelte-preprocess@4.10.7(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1)(typescript@4.6.4): + /svelte-preprocess@4.10.7(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2)(typescript@4.9.5): resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -21662,20 +22353,20 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.23.2 - '@types/pug': 2.0.7 + '@babel/core': 7.23.3 + '@types/pug': 2.0.8 '@types/sass': 1.45.0 detect-indent: 6.1.0 magic-string: 0.25.9 - node-sass: 7.0.1 + node-sass: 7.0.3 postcss: 8.4.31 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.53.1 - typescript: 4.6.4 + svelte: 3.59.2 + typescript: 4.9.5 dev: true - /svelte-preprocess@4.10.7(@babel/core@7.23.2)(node-sass@7.0.1)(postcss@8.4.31)(svelte@3.53.1)(typescript@5.2.2): + /svelte-preprocess@4.10.7(@babel/core@7.23.3)(node-sass@7.0.3)(postcss@8.4.31)(svelte@3.59.2)(typescript@5.2.2): resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -21716,21 +22407,21 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.23.2 - '@types/pug': 2.0.7 + '@babel/core': 7.23.3 + '@types/pug': 2.0.8 '@types/sass': 1.45.0 detect-indent: 6.1.0 magic-string: 0.25.9 - node-sass: 7.0.1 + node-sass: 7.0.3 postcss: 8.4.31 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.53.1 + svelte: 3.59.2 typescript: 5.2.2 dev: true - /svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.1.0)(typescript@5.2.2): - resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} + /svelte-preprocess@5.1.0(postcss@8.4.31)(svelte@4.2.3)(typescript@5.2.2): + resolution: {integrity: sha512-EkErPiDzHAc0k2MF5m6vBNmRUh338h2myhinUw/xaqsLs7/ZvsgREiLGj03VrSzbY/TB5ZXgBOsKraFee5yceA==} engines: {node: '>= 14.10.0'} requiresBuild: true peerDependencies: @@ -21743,7 +22434,7 @@ packages: sass: ^1.26.8 stylus: ^0.55.0 sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' peerDependenciesMeta: '@babel/core': @@ -21767,34 +22458,34 @@ packages: typescript: optional: true dependencies: - '@types/pug': 2.0.7 + '@types/pug': 2.0.9 detect-indent: 6.1.0 magic-string: 0.27.0 postcss: 8.4.31 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.1.0 + svelte: 4.2.3 typescript: 5.2.2 dev: true - /svelte-spa-router@3.2.0: - resolution: {integrity: sha512-igemo5Vs82TGBBw+DjWt6qKameXYzNs6aDXcTxou5XbEvOjiRcAM6MLkdVRCatn6u8r42dE99bt/br7T4qe/AQ==} + /svelte-spa-router@3.3.0: + resolution: {integrity: sha512-cwRNe7cxD43sCvSfEeaKiNZg3FCizGxeMcf7CPiWRP3jKXjEma3vxyyuDtPOam6nWbVxl9TNM3hlE/i87ZlqcQ==} dependencies: - regexparam: 2.0.0 + regexparam: 2.0.1 dev: false - /svelte@3.53.1: - resolution: {integrity: sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==} + /svelte@3.59.2: + resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} engines: {node: '>= 8'} - /svelte@4.1.0: - resolution: {integrity: sha512-qob6IX0ui4Z++Lhwzvqb6aig79WhwsF3z6y1YMicjvw0rv71hxD+RmMFG3BM8lB7prNLXeOLnP64Zrynqa3Gtw==} + /svelte@4.2.3: + resolution: {integrity: sha512-sqmG9KC6uUc7fb3ZuWoxXvqk6MI9Uu4ABA1M0fYDgTlFYu1k02xp96u6U9+yJZiVm84m9zge7rrA/BNZdFpOKw==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 - acorn: 8.10.0 + '@jridgewell/trace-mapping': 0.3.20 + acorn: 8.11.2 aria-query: 5.3.0 axobject-query: 3.2.1 code-red: 1.0.4 @@ -21868,7 +22559,7 @@ packages: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.7.0 + ajv: 8.12.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -21906,6 +22597,37 @@ packages: - ts-node dev: true + /tailwindcss@3.3.5: + resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) + postcss-selector-parser: 6.0.13 + resolve: 1.22.8 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: true + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -21917,8 +22639,8 @@ packages: dependencies: '@ljharb/resumer': 0.0.1 '@ljharb/through': 2.3.11 - call-bind: 1.0.2 - deep-equal: 1.1.1 + call-bind: 1.0.5 + deep-equal: 1.1.2 defined: 1.0.1 dotignore: 0.1.2 for-each: 0.3.3 @@ -21927,7 +22649,7 @@ packages: inherits: 2.0.4 is-regex: 1.1.4 minimist: 1.2.8 - mock-property: 1.0.2 + mock-property: 1.0.3 object-inspect: 1.12.3 resolve: 1.22.8 string.prototype.trim: 1.2.8 @@ -21966,7 +22688,7 @@ packages: dependencies: b4a: 1.6.4 fast-fifo: 1.3.2 - streamx: 2.15.1 + streamx: 2.15.5 dev: false /tar@4.4.19: @@ -22020,7 +22742,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 @@ -22068,8 +22790,8 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /theme-change@2.2.0: - resolution: {integrity: sha512-vvgZEEfmH3yZGq2bWHyzs2AOG1SRfNnCvWbEnPzGpdvvCmAWtOsEdg4H6k/OMapegG+LEQvQ76tQoN9B+FT7rg==} + /theme-change@2.5.0: + resolution: {integrity: sha512-B/UdsgdHAGhSKHTAQnxg/etN0RaMDpehuJmZIjLMDVJ6DGIliRHGD6pODi1CXLQAN9GV0GSyB3G6yCuK05PkPQ==} dev: true /then-request@6.0.2: @@ -22079,7 +22801,7 @@ packages: '@types/concat-stream': 1.6.1 '@types/form-data': 0.0.33 '@types/node': 8.10.66 - '@types/qs': 6.9.8 + '@types/qs': 6.9.9 caseless: 0.12.0 concat-stream: 1.6.2 form-data: 2.5.1 @@ -22121,11 +22843,6 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - /time-zone@1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} - dev: true - /timed-out@4.0.1: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} @@ -22145,7 +22862,6 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: false /tinybench@2.5.1: resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} @@ -22207,6 +22923,7 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} @@ -22292,14 +23009,9 @@ packages: resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} engines: {node: '>=14'} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true - /treeify@1.1.0: - resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} - engines: {node: '>=0.6'} - dev: false - /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false @@ -22328,13 +23040,13 @@ packages: resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} dev: true - /ts-api-utils@1.0.3(typescript@4.6.4): + /ts-api-utils@1.0.3(typescript@4.9.5): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 4.6.4 + typescript: 4.9.5 dev: true /ts-api-utils@1.0.3(typescript@5.2.2): @@ -22400,22 +23112,23 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest-mock-import-meta@0.12.0(ts-jest@27.0.7): + /ts-jest-mock-import-meta@0.12.0(ts-jest@27.1.5): resolution: {integrity: sha512-LfuetNsQ6CDEAPekFOtMpCPRBBAgoA322IQ95eCa3x0mR++GwhZddlsmjOUhxRPLF3utbXUZpCEZiW+HP8jkiA==} peerDependencies: ts-jest: '>=20.0.0' dependencies: - ts-jest: 27.0.7(@babel/core@7.23.2)(@types/jest@27.5.2)(babel-jest@27.3.1)(jest@27.5.1)(typescript@4.6.4) + ts-jest: 27.1.5(@babel/core@7.23.3)(@types/jest@27.5.2)(babel-jest@27.5.1)(jest@27.5.1)(typescript@4.9.5) dev: true - /ts-jest@27.0.7(@babel/core@7.23.2)(@types/jest@27.5.2)(babel-jest@27.3.1)(jest@27.5.1)(typescript@4.6.4): - resolution: {integrity: sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==} + /ts-jest@27.1.5(@babel/core@7.23.3)(@types/jest@27.5.2)(babel-jest@27.5.1)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@types/jest': ^27.0.0 babel-jest: '>=27.0.0 <28' + esbuild: '*' jest: ^27.0.0 typescript: '>=3.8 <5.0' peerDependenciesMeta: @@ -22425,10 +23138,12 @@ packages: optional: true babel-jest: optional: true + esbuild: + optional: true dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.3 '@types/jest': 27.5.2 - babel-jest: 27.3.1(@babel/core@7.23.2) + babel-jest: 27.5.1(@babel/core@7.23.3) bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 27.5.1 @@ -22437,12 +23152,12 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 4.6.4 + typescript: 4.9.5 yargs-parser: 20.2.9 dev: true - /ts-loader@9.2.6(typescript@4.6.4)(webpack@5.89.0): - resolution: {integrity: sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==} + /ts-loader@9.5.0(typescript@4.9.5)(webpack@5.89.0): + resolution: {integrity: sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' @@ -22452,7 +23167,8 @@ packages: enhanced-resolve: 5.15.0 micromatch: 4.0.5 semver: 7.5.4 - typescript: 4.6.4 + source-map: 0.7.4 + typescript: 4.9.5 webpack: 5.89.0 dev: true @@ -22463,7 +23179,7 @@ packages: code-block-writer: 12.0.0 dev: true - /ts-node@10.9.1(@types/node@20.8.6)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.9.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -22482,7 +23198,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.6 + '@types/node': 20.9.0 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -22519,9 +23235,6 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -22529,14 +23242,14 @@ packages: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} dev: true - /tsutils@3.21.0(typescript@4.6.4): + /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.6.4 + typescript: 4.9.5 dev: true /tunnel-agent@0.6.0: @@ -22666,8 +23379,8 @@ packages: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 dev: true @@ -22675,7 +23388,7 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -22686,7 +23399,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -22695,11 +23408,15 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 dev: true + /typedarray-to-buffer@1.0.4: + resolution: {integrity: sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==} + dev: true + /typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -22709,8 +23426,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript@4.6.4: - resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true @@ -22773,7 +23490,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -22785,18 +23502,18 @@ packages: dev: true optional: true - /undici-types@5.25.3: - resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /undici@5.22.1: - resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + /undici@5.26.4: + resolution: {integrity: sha512-OG+QOf0fTLtazL9P9X7yqWxQ+Z0395Wk6DSkyTxtaq3wQEjIroVe7Y4asCX/vcCxYpNGMnwz8F0qbRYUoaQVMw==} engines: {node: '>=14.0'} dependencies: - busboy: 1.6.0 + '@fastify/busboy': 2.0.0 dev: true - /undici@5.26.3: - resolution: {integrity: sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==} + /undici@5.26.5: + resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} engines: {node: '>=14.0'} dependencies: '@fastify/busboy': 2.0.0 @@ -22832,7 +23549,7 @@ packages: /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 bail: 2.0.2 extend: 3.0.2 is-buffer: 2.0.5 @@ -22866,7 +23583,7 @@ packages: /unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-is: 6.0.0 dev: false @@ -22877,51 +23594,51 @@ packages: /unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 dev: false /unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 dev: false /unist-util-position-from-estree@1.1.2: resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 dev: false /unist-util-position@4.0.4: resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 dev: false /unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 dev: false /unist-util-remove-position@4.0.2: resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 unist-util-visit: 4.1.2 dev: false /unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-visit: 5.0.0 dev: false /unist-util-remove@4.0.0: resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 dev: false @@ -22929,40 +23646,40 @@ packages: /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 dev: false /unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 dev: false /unist-util-visit-parents@4.1.1: resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 unist-util-is: 5.2.1 dev: false /unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 unist-util-is: 5.2.1 dev: false /unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-is: 6.0.0 dev: false /unist-util-visit@3.1.0: resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 unist-util-is: 5.2.1 unist-util-visit-parents: 4.1.1 dev: false @@ -22970,7 +23687,7 @@ packages: /unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 dev: false @@ -22978,7 +23695,7 @@ packages: /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 dev: false @@ -22993,8 +23710,8 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true @@ -23030,17 +23747,18 @@ packages: browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: true /upper-case@2.0.2: resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: true /uri-js@4.4.1: @@ -23104,6 +23822,7 @@ packages: /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -23111,7 +23830,7 @@ packages: /util.promisify@1.1.2: resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 for-each: 0.3.3 has-proto: 1.0.1 @@ -23127,7 +23846,7 @@ packages: is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.12 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 /utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} @@ -23182,7 +23901,7 @@ packages: resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} engines: {node: '>=10.12.0'} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.5 convert-source-map: 1.9.0 source-map: 0.7.4 dev: true @@ -23191,8 +23910,8 @@ packages: resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.19 - '@types/istanbul-lib-coverage': 2.0.4 + '@jridgewell/trace-mapping': 0.3.20 + '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -23203,6 +23922,20 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /valtio@1.10.5(react@18.2.0): + resolution: {integrity: sha512-jTp0k63VXf4r5hPoaC6a6LCG4POkVSh629WLi1+d5PlajLsbynTMd7qAgEiOSPxzoX5iNvbN7iZ/k/g29wrNiQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + react: '>=16.8' + peerDependenciesMeta: + react: + optional: true + dependencies: + proxy-compare: 2.5.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /valtio@1.11.0(react@18.2.0): resolution: {integrity: sha512-65Yd0yU5qs86b5lN1eu/nzcTgQ9/6YnD6iO+DDaDbQLn1Zv2w12Gwk43WkPlUBxk5wL/6cD5YMFf7kj6HZ1Kpg==} engines: {node: '>=12.20.0'} @@ -23258,14 +23991,14 @@ packages: /vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 vfile: 6.0.1 dev: false /vfile-matter@3.0.1: resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} dependencies: - '@types/js-yaml': 4.0.7 + '@types/js-yaml': 4.0.9 is-buffer: 2.0.5 js-yaml: 4.1.0 dev: false @@ -23273,21 +24006,21 @@ packages: /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 unist-util-stringify-position: 3.0.3 dev: false /vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 dev: false /vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: - '@types/unist': 2.0.8 + '@types/unist': 2.0.10 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 @@ -23296,32 +24029,13 @@ packages: /vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} dependencies: - '@types/unist': 3.0.0 + '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 dev: false - /viem@0.3.50(typescript@5.2.2)(zod@3.22.4): - resolution: {integrity: sha512-s+LxCYZTR9F/qPk1/n1YDVAX9vSeVz7GraqBZWGrDuenCJxo9ArCoIceJ6ksI0WwSeNzcZ0VVbD/kWRzTxkipw==} - dependencies: - '@adraffy/ens-normalize': 1.9.0 - '@noble/curves': 1.0.0 - '@noble/hashes': 1.3.0 - '@scure/bip32': 1.3.0 - '@scure/bip39': 1.2.0 - '@wagmi/chains': 1.0.0(typescript@5.2.2) - abitype: 0.8.7(typescript@5.2.2)(zod@3.22.4) - isomorphic-ws: 5.0.0(ws@8.12.0) - ws: 8.12.0 - transitivePeerDependencies: - - bufferutil - - typescript - - utf-8-validate - - zod - dev: true - - /viem@1.16.6(typescript@5.2.2): - resolution: {integrity: sha512-jcWcFQ+xzIfDwexwPJRvCuCRJKEkK9iHTStG7mpU5MmuSBpACs4nATBDyXNFtUiyYTFzLlVEwWkt68K0nCSImg==} + /viem@1.18.9(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-eAXtoTwAFA3YEgjTYMb5ZTQrDC0UPx5qyZ4sv90TirVKepcM9mBPksTkC1SSWya0UdxhBmhEBL/CiYMjmGCTWg==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -23333,7 +24047,7 @@ packages: '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 0.9.8(typescript@5.2.2) + abitype: 0.9.8(typescript@5.2.2)(zod@3.22.4) isows: 1.0.3(ws@8.13.0) typescript: 5.2.2 ws: 8.13.0 @@ -23342,8 +24056,8 @@ packages: - utf-8-validate - zod - /vite-node@0.32.2(@types/node@20.8.6): - resolution: {integrity: sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA==} + /vite-node@0.32.4(@types/node@20.9.0): + resolution: {integrity: sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: @@ -23352,7 +24066,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.9(@types/node@20.8.6) + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - '@types/node' - less @@ -23377,7 +24091,7 @@ packages: vite: 3.2.7 dev: true - /vite-tsconfig-paths@4.2.1(typescript@5.2.2)(vite@4.4.9): + /vite-tsconfig-paths@4.2.1(typescript@5.2.2)(vite@4.5.0): resolution: {integrity: sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==} peerDependencies: vite: '*' @@ -23388,7 +24102,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 2.1.2(typescript@5.2.2) - vite: 4.4.9(@types/node@20.8.6) + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - supports-color - typescript @@ -23427,8 +24141,8 @@ packages: fsevents: 2.3.3 dev: true - /vite@4.4.9(@types/node@20.8.6): - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + /vite@4.5.0(@types/node@20.9.0): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -23455,7 +24169,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.8.6 + '@types/node': 20.9.0 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 @@ -23463,7 +24177,18 @@ packages: fsevents: 2.3.3 dev: true - /vitefu@0.2.5(vite@4.4.9): + /vitefu@0.2.5(vite@3.2.7): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 3.2.7 + dev: true + + /vitefu@0.2.5(vite@4.5.0): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -23471,23 +24196,23 @@ packages: vite: optional: true dependencies: - vite: 4.4.9(@types/node@20.8.6) + vite: 4.5.0(@types/node@20.9.0) dev: true - /vitest-fetch-mock@0.2.2(vitest@0.32.2): + /vitest-fetch-mock@0.2.2(vitest@0.32.4): resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==} engines: {node: '>=14.14.0'} peerDependencies: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.8 - vitest: 0.32.2(jsdom@22.1.0) + vitest: 0.32.4(jsdom@22.1.0) transitivePeerDependencies: - encoding dev: true - /vitest@0.32.2(jsdom@22.1.0): - resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} + /vitest@0.32.4(jsdom@22.1.0): + resolution: {integrity: sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -23517,19 +24242,18 @@ packages: webdriverio: optional: true dependencies: - '@types/chai': 4.3.8 - '@types/chai-subset': 1.3.3 - '@types/node': 20.8.6 - '@vitest/expect': 0.32.2 - '@vitest/runner': 0.32.2 - '@vitest/snapshot': 0.32.2 - '@vitest/spy': 0.32.2 - '@vitest/utils': 0.32.2 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/chai': 4.3.10 + '@types/chai-subset': 1.3.5 + '@types/node': 20.9.0 + '@vitest/expect': 0.32.4 + '@vitest/runner': 0.32.4 + '@vitest/snapshot': 0.32.4 + '@vitest/spy': 0.32.4 + '@vitest/utils': 0.32.4 + acorn: 8.11.2 + acorn-walk: 8.3.0 cac: 6.7.14 chai: 4.3.10 - concordance: 5.0.4 debug: 4.3.4(supports-color@8.1.1) jsdom: 22.1.0 local-pkg: 0.4.3 @@ -23540,8 +24264,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.5.0 - vite: 4.4.9(@types/node@20.8.6) - vite-node: 0.32.2(@types/node@20.8.6) + vite: 4.5.0(@types/node@20.9.0) + vite-node: 0.32.4(@types/node@20.9.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -23565,8 +24289,8 @@ packages: resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==} dev: true - /vue-loader@15.10.2(css-loader@6.8.1)(prettier@3.0.3)(vue-template-compiler@2.7.14)(webpack@5.89.0): - resolution: {integrity: sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==} + /vue-loader@15.11.1(css-loader@6.8.1)(prettier@3.0.3)(vue-template-compiler@2.7.14)(webpack@5.89.0): + resolution: {integrity: sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==} peerDependencies: '@vue/compiler-sfc': ^3.0.8 cache-loader: '*' @@ -24039,8 +24763,8 @@ packages: dev: true optional: true - /web3-utils@1.10.2: - resolution: {integrity: sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow==} + /web3-utils@1.10.3: + resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} engines: {node: '>=8.0.0'} dependencies: '@ethereumjs/util': 8.1.0 @@ -24051,6 +24775,7 @@ packages: number-to-bn: 1.7.0 randombytes: 2.1.0 utf8: 3.0.0 + dev: true /web3-utils@1.2.11: resolution: {integrity: sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==} @@ -24120,8 +24845,8 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.5 - '@types/estree': 1.0.2 + '@types/eslint-scope': 3.7.6 + '@types/estree': 1.0.3 '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/wasm-edit': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 @@ -24164,11 +24889,6 @@ packages: - supports-color dev: true - /well-known-symbols@2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true - /whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: @@ -24235,12 +24955,12 @@ packages: /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 @@ -24430,19 +25150,6 @@ packages: utf-8-validate: optional: true - /ws@8.12.0: - resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} @@ -24522,6 +25229,14 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /xtend@2.0.6: + resolution: {integrity: sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==} + engines: {node: '>=0.4'} + dependencies: + is-object: 0.1.2 + object-keys: 0.2.0 + dev: true + /xtend@2.1.2: resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} engines: {node: '>=0.4'} @@ -24529,6 +25244,16 @@ packages: object-keys: 0.4.0 dev: true + /xtend@2.2.0: + resolution: {integrity: sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==} + engines: {node: '>=0.4'} + dev: true + + /xtend@3.0.0: + resolution: {integrity: sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==} + engines: {node: '>=0.4'} + dev: true + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -24555,6 +25280,7 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -24715,8 +25441,27 @@ packages: /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - /zustand@4.4.3(react@18.2.0): - resolution: {integrity: sha512-oRy+X3ZazZvLfmv6viIaQmtLOMeij1noakIsK/Y47PWYhT8glfXzQ4j0YcP5i0P0qI1A4rIB//SGROGyZhx91A==} + /zustand@4.4.4(react@18.2.0): + resolution: {integrity: sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /zustand@4.4.6(react@18.2.0): + resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==} engines: {node: '>=12.7.0'} peerDependencies: '@types/react': '>=16.8' @@ -24744,8 +25489,9 @@ packages: dependencies: bn.js: 4.12.0 ethereumjs-util: 6.2.1 + dev: true - github.com/taikoxyz/solidity-coverage/ceb49fd1f6041e4fcd26079dfb0d3b0f58c812e5(hardhat@2.18.1): + github.com/taikoxyz/solidity-coverage/ceb49fd1f6041e4fcd26079dfb0d3b0f58c812e5(hardhat@2.18.2): resolution: {tarball: https://codeload.github.com/taikoxyz/solidity-coverage/tar.gz/ceb49fd1f6041e4fcd26079dfb0d3b0f58c812e5} id: github.com/taikoxyz/solidity-coverage/ceb49fd1f6041e4fcd26079dfb0d3b0f58c812e5 name: solidity-coverage @@ -24764,7 +25510,7 @@ packages: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.18.1(ts-node@10.9.1)(typescript@5.2.2) + hardhat: 2.18.2(ts-node@10.9.1)(typescript@5.2.2) jsonschema: 1.4.1 lodash: 4.17.21 mocha: 7.1.2 @@ -24774,7 +25520,7 @@ packages: sc-istanbul: 0.4.6 semver: 7.5.4 shelljs: 0.8.5 - web3-utils: 1.10.2 + web3-utils: 1.10.3 transitivePeerDependencies: - supports-color dev: true From 9d497eae8fd1886dad7ab27bc9c31cb95af9ada5 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Thu, 30 Nov 2023 22:30:03 +0800 Subject: [PATCH 10/17] Update pnpm-lock.yaml --- pnpm-lock.yaml | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 124f4a7c5e7..a2e2bdba52e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -166,6 +166,10 @@ importers: packages/guardian-prover-health-check: {} packages/protocol: + dependencies: + merkletreejs: + specifier: ^0.3.11 + version: 0.3.11 devDependencies: '@defi-wonderland/smock': specifier: ^2.3.4 @@ -2950,7 +2954,6 @@ packages: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true - dev: true /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} @@ -2959,7 +2962,6 @@ packages: '@ethereumjs/rlp': 4.0.1 ethereum-cryptography: 2.1.2 micro-ftch: 0.3.1 - dev: true /@ethersproject/abi@5.0.0-beta.153: resolution: {integrity: sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==} @@ -4031,7 +4033,6 @@ packages: resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} dependencies: '@noble/hashes': 1.3.1 - dev: true /@noble/curves@1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -4045,7 +4046,6 @@ packages: /@noble/hashes@1.3.1: resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} engines: {node: '>= 16'} - dev: true /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} @@ -4843,7 +4843,6 @@ packages: '@noble/curves': 1.1.0 '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 - dev: true /@scure/bip32@1.3.2: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} @@ -8656,8 +8655,6 @@ packages: /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} requiresBuild: true - dev: true - optional: true /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -8714,7 +8711,6 @@ packages: /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - dev: true /bn.js@4.11.8: resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==} @@ -8974,6 +8970,10 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + /buffer-reverse@1.0.1: + resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} + dev: false + /buffer-to-arraybuffer@0.0.5: resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} requiresBuild: true @@ -10251,6 +10251,10 @@ packages: resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} dev: true + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + /css-loader@6.8.1(webpack@5.89.0): resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} engines: {node: '>= 12.13.0'} @@ -12524,7 +12528,6 @@ packages: resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: js-sha3: 0.8.0 - dev: true /ethereum-common@0.0.18: resolution: {integrity: sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==} @@ -12570,7 +12573,6 @@ packages: '@noble/hashes': 1.3.1 '@scure/bip32': 1.3.1 '@scure/bip39': 1.2.1 - dev: true /ethereum-waffle@3.4.4(typescript@5.2.2): resolution: {integrity: sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==} @@ -12822,7 +12824,6 @@ packages: dependencies: bn.js: 4.11.6 number-to-bn: 1.7.0 - dev: true /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -15137,7 +15138,6 @@ packages: /is-hex-prefixed@1.0.0: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} - dev: true /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -17484,6 +17484,17 @@ packages: semaphore-async-await: 1.5.1 dev: true + /merkletreejs@0.3.11: + resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} + engines: {node: '>= 7.6.0'} + dependencies: + bignumber.js: 9.1.2 + buffer-reverse: 1.0.1 + crypto-js: 4.2.0 + treeify: 1.1.0 + web3-utils: 1.10.3 + dev: false + /mermaid@10.6.1: resolution: {integrity: sha512-Hky0/RpOw/1il9X8AvzOEChfJtVvmXm+y7JML5C//ePYMy0/9jCEmW1E1g86x9oDfW9+iVEdTV/i+M6KWRNs4A==} dependencies: @@ -17520,7 +17531,6 @@ packages: /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} - dev: true /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -18845,7 +18855,6 @@ packages: dependencies: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - dev: true /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} @@ -22014,7 +22023,6 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dependencies: is-hex-prefixed: 1.0.0 - dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -23012,6 +23020,11 @@ packages: punycode: 2.3.1 dev: true + /treeify@1.1.0: + resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} + engines: {node: '>=0.6'} + dev: false + /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false @@ -23822,7 +23835,6 @@ packages: /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -24775,7 +24787,6 @@ packages: number-to-bn: 1.7.0 randombytes: 2.1.0 utf8: 3.0.0 - dev: true /web3-utils@1.2.11: resolution: {integrity: sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==} From a36580d2ca12afd54c2897809c311c9f05765c79 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 1 Dec 2023 05:46:35 +0300 Subject: [PATCH 11/17] chore(protocol): improve `DeployOnL1` logs (#15301) Co-authored-by: jeff <113397187+cyberhorsey@users.noreply.github.com> --- packages/eventindexer/TaikoL1.json | 505 ++------ .../assignmenthook/AssignmentHook.go | 581 +++++++--- .../eventindexer/contracts/bridge/Bridge.go | 711 ++++++++---- .../eventindexer/contracts/taikol1/TaikoL1.go | 1028 +++++------------ packages/protocol/script/DeployOnL1.s.sol | 2 +- packages/protocol/test/DeployCapability.sol | 32 +- packages/relayer/ERC1155Vault.json | 124 +- packages/relayer/ERC20Vault.json | 237 +++- packages/relayer/ERC721Vault.json | 124 +- packages/relayer/SignalService.json | 142 ++- packages/relayer/TaikoL1.json | 505 ++------ packages/relayer/bindings/bridge/Bridge.go | 711 ++++++++---- .../bindings/erc1155vault/ERC1155Vault.go | 617 +++++++--- .../relayer/bindings/erc20vault/ERC20Vault.go | 869 +++++++++++--- .../bindings/erc721vault/ERC721Vault.go | 617 +++++++--- .../bindings/signalservice/SignalService.go | 572 ++++++--- packages/relayer/bindings/taikol1/TaikoL1.go | 1028 +++++------------ packages/relayer/bindings/taikol2/TaikoL2.go | 603 +++++++--- 18 files changed, 5070 insertions(+), 3938 deletions(-) diff --git a/packages/eventindexer/TaikoL1.json b/packages/eventindexer/TaikoL1.json index 643312b5522..41f9a2af291 100644 --- a/packages/eventindexer/TaikoL1.json +++ b/packages/eventindexer/TaikoL1.json @@ -1,9 +1,4 @@ [ - { - "inputs": [], - "name": "ETH_TRANSFER_FAILED", - "type": "error" - }, { "inputs": [], "name": "INVALID_PAUSE_STATUS", @@ -14,16 +9,6 @@ "name": "L1_ALREADY_CONTESTED", "type": "error" }, - { - "inputs": [], - "name": "L1_ALREADY_CONTESTED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ALREADY_PROVED", - "type": "error" - }, { "inputs": [], "name": "L1_ALREADY_PROVED", @@ -34,16 +19,6 @@ "name": "L1_ASSIGNED_PROVER_NOT_ALLOWED", "type": "error" }, - { - "inputs": [], - "name": "L1_ASSIGNED_PROVER_NOT_ALLOWED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_BLOB_FOR_DA_DISABLED", - "type": "error" - }, { "inputs": [], "name": "L1_BLOB_FOR_DA_DISABLED", @@ -54,26 +29,11 @@ "name": "L1_BLOB_NOT_FOUND", "type": "error" }, - { - "inputs": [], - "name": "L1_BLOB_NOT_FOUND", - "type": "error" - }, { "inputs": [], "name": "L1_BLOB_NOT_REUSEABLE", "type": "error" }, - { - "inputs": [], - "name": "L1_BLOB_NOT_REUSEABLE", - "type": "error" - }, - { - "inputs": [], - "name": "L1_BLOCK_MISMATCH", - "type": "error" - }, { "inputs": [], "name": "L1_BLOCK_MISMATCH", @@ -104,16 +64,6 @@ "name": "L1_INVALID_BLOCK_ID", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_BLOCK_ID", - "type": "error" - }, - { - "inputs": [], - "name": "L1_INVALID_BLOCK_ID", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_CONFIG", @@ -124,16 +74,6 @@ "name": "L1_INVALID_ETH_DEPOSIT", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_ETH_DEPOSIT", - "type": "error" - }, - { - "inputs": [], - "name": "L1_INVALID_PARAM", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_PARAM", @@ -144,11 +84,6 @@ "name": "L1_INVALID_PAUSE_STATUS", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_PAUSE_STATUS", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_PROOF", @@ -159,26 +94,11 @@ "name": "L1_INVALID_PROVER", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_PROVER", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_TIER", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_TIER", - "type": "error" - }, - { - "inputs": [], - "name": "L1_INVALID_TRANSITION", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_TRANSITION", @@ -189,26 +109,11 @@ "name": "L1_LIVENESS_BOND_NOT_RECEIVED", "type": "error" }, - { - "inputs": [], - "name": "L1_LIVENESS_BOND_NOT_RECEIVED", - "type": "error" - }, { "inputs": [], "name": "L1_NOT_ASSIGNED_PROVER", "type": "error" }, - { - "inputs": [], - "name": "L1_NOT_ASSIGNED_PROVER", - "type": "error" - }, - { - "inputs": [], - "name": "L1_PROPOSER_NOT_EOA", - "type": "error" - }, { "inputs": [], "name": "L1_PROPOSER_NOT_EOA", @@ -229,11 +134,6 @@ "name": "L1_TOO_MANY_BLOCKS", "type": "error" }, - { - "inputs": [], - "name": "L1_TOO_MANY_BLOCKS", - "type": "error" - }, { "inputs": [], "name": "L1_TOO_MANY_TIERS", @@ -254,21 +154,11 @@ "name": "L1_TRANSITION_NOT_FOUND", "type": "error" }, - { - "inputs": [], - "name": "L1_TXLIST_OFFSET", - "type": "error" - }, { "inputs": [], "name": "L1_TXLIST_OFFSET_SIZE", "type": "error" }, - { - "inputs": [], - "name": "L1_TXLIST_SIZE", - "type": "error" - }, { "inputs": [], "name": "L1_TXLIST_TOO_LARGE", @@ -279,16 +169,6 @@ "name": "L1_UNAUTHORIZED", "type": "error" }, - { - "inputs": [], - "name": "L1_UNAUTHORIZED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_UNEXPECTED_PARENT", - "type": "error" - }, { "inputs": [], "name": "L1_UNEXPECTED_PARENT", @@ -309,11 +189,6 @@ "name": "L1_UNEXPECTED_TRANSITION_TIER", "type": "error" }, - { - "inputs": [], - "name": "L1_UNEXPECTED_TRANSITION_TIER", - "type": "error" - }, { "inputs": [], "name": "REENTRANT_CALL", @@ -355,156 +230,44 @@ "inputs": [ { "indexed": false, - "internalType": "bytes32", - "name": "blobHash", - "type": "bytes32" + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" } ], - "name": "BlobCached", + "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "bytes32", - "name": "blobHash", - "type": "bytes32" + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" } ], - "name": "BlobCached", + "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "blockId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "assignedProver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "livenessBond", - "type": "uint96" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "l1Hash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "difficulty", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blobHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "extraData", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositsHash", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "coinbase", - "type": "address" - }, - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasLimit", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "l1Height", - "type": "uint64" - }, - { - "internalType": "uint24", - "name": "txListByteOffset", - "type": "uint24" - }, - { - "internalType": "uint24", - "name": "txListByteSize", - "type": "uint24" - }, - { - "internalType": "uint16", - "name": "minTier", - "type": "uint16" - }, - { - "internalType": "bool", - "name": "blobUsed", - "type": "bool" - }, - { - "internalType": "bytes32", - "name": "parentMetaHash", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TaikoData.BlockMetadata", - "name": "meta", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint96", - "name": "amount", - "type": "uint96" - }, - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - } - ], "indexed": false, - "internalType": "struct TaikoData.EthDeposit[]", - "name": "depositsProcessed", - "type": "tuple[]" + "internalType": "bytes32", + "name": "blobHash", + "type": "bytes32" } ], - "name": "BlockProposed", + "name": "BlobCached", "type": "event" }, { @@ -841,25 +604,6 @@ "name": "Initialized", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -905,19 +649,6 @@ "name": "ProvingPaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "paused", - "type": "bool" - } - ], - "name": "ProvingPaused", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1041,65 +772,6 @@ "name": "TransitionContested", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "signalRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "graffiti", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TaikoData.Transition", - "name": "tran", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "contester", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "contestBond", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "tier", - "type": "uint16" - } - ], - "name": "TransitionContested", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1162,82 +834,29 @@ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "signalRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "graffiti", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TaikoData.Transition", - "name": "tran", - "type": "tuple" - }, { "indexed": false, "internalType": "address", - "name": "prover", + "name": "account", "type": "address" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "validityBond", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "tier", - "type": "uint16" } ], - "name": "TransitionProved", + "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "account", + "name": "implementation", "type": "address" } ], - "name": "Unpaused", + "name": "Upgraded", "type": "event" }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "addressManager", @@ -1561,25 +1180,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "getTaikoTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1821,19 +1421,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1975,6 +1562,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "renounceOwnership", @@ -2112,6 +1712,37 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { diff --git a/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go b/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go index 366bfd3d6d9..17fb5889413 100644 --- a/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go +++ b/packages/eventindexer/contracts/assignmenthook/AssignmentHook.go @@ -80,7 +80,7 @@ type TaikoDataTierFee struct { // AssignmentHookMetaData contains all meta data concerning the AssignmentHook contract. var AssignmentHookMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxProposedIn\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"}],\"internalType\":\"structTaikoData.TierFee[]\",\"name\":\"tierFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structAssignmentHook.ProverAssignment\",\"name\":\"assignment\",\"type\":\"tuple\"}],\"name\":\"BlockAssigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_GAS_PAYING_PROVER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxProposedIn\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"}],\"internalType\":\"structTaikoData.TierFee[]\",\"name\":\"tierFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structAssignmentHook.ProverAssignment\",\"name\":\"assignment\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taikoAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"hashAssignment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onBlockProposed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_EXPIRED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_INSUFFICIENT_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_ASSIGNMENT_INVALID_SIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HOOK_TIER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxProposedIn\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"}],\"internalType\":\"structTaikoData.TierFee[]\",\"name\":\"tierFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structAssignmentHook.ProverAssignment\",\"name\":\"assignment\",\"type\":\"tuple\"}],\"name\":\"BlockAssigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_GAS_PAYING_PROVER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxProposedIn\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"fee\",\"type\":\"uint128\"}],\"internalType\":\"structTaikoData.TierFee[]\",\"name\":\"tierFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structAssignmentHook.ProverAssignment\",\"name\":\"assignment\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taikoAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"hashAssignment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onBlockProposed\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // AssignmentHookABI is the input ABI used to generate the binding from. @@ -384,35 +384,35 @@ func (_AssignmentHook *AssignmentHookCallerSession) Paused() (bool, error) { return _AssignmentHook.Contract.Paused(&_AssignmentHook.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_AssignmentHook *AssignmentHookCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_AssignmentHook *AssignmentHookCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _AssignmentHook.contract.Call(opts, &out, "pendingOwner") + err := _AssignmentHook.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_AssignmentHook *AssignmentHookSession) PendingOwner() (common.Address, error) { - return _AssignmentHook.Contract.PendingOwner(&_AssignmentHook.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_AssignmentHook *AssignmentHookSession) ProxiableUUID() ([32]byte, error) { + return _AssignmentHook.Contract.ProxiableUUID(&_AssignmentHook.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_AssignmentHook *AssignmentHookCallerSession) PendingOwner() (common.Address, error) { - return _AssignmentHook.Contract.PendingOwner(&_AssignmentHook.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_AssignmentHook *AssignmentHookCallerSession) ProxiableUUID() ([32]byte, error) { + return _AssignmentHook.Contract.ProxiableUUID(&_AssignmentHook.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -477,27 +477,6 @@ func (_AssignmentHook *AssignmentHookCallerSession) Resolve0(name [32]byte, allo return _AssignmentHook.Contract.Resolve0(&_AssignmentHook.CallOpts, name, allowZeroAddress) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_AssignmentHook *AssignmentHookTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssignmentHook.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_AssignmentHook *AssignmentHookSession) AcceptOwnership() (*types.Transaction, error) { - return _AssignmentHook.Contract.AcceptOwnership(&_AssignmentHook.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_AssignmentHook *AssignmentHookTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _AssignmentHook.Contract.AcceptOwnership(&_AssignmentHook.TransactOpts) -} - // Init is a paid mutator transaction binding the contract method 0x19ab453c. // // Solidity: function init(address _addressManager) returns() @@ -624,9 +603,51 @@ func (_AssignmentHook *AssignmentHookTransactorSession) Unpause() (*types.Transa return _AssignmentHook.Contract.Unpause(&_AssignmentHook.TransactOpts) } -// AssignmentHookBlockAssignedIterator is returned from FilterBlockAssigned and is used to iterate over the raw logs and unpacked data for BlockAssigned events raised by the AssignmentHook contract. -type AssignmentHookBlockAssignedIterator struct { - Event *AssignmentHookBlockAssigned // Event containing the contract specifics and raw log +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_AssignmentHook *AssignmentHookTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_AssignmentHook *AssignmentHookSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _AssignmentHook.Contract.UpgradeTo(&_AssignmentHook.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_AssignmentHook *AssignmentHookTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _AssignmentHook.Contract.UpgradeTo(&_AssignmentHook.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_AssignmentHook *AssignmentHookTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _AssignmentHook.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_AssignmentHook *AssignmentHookSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _AssignmentHook.Contract.UpgradeToAndCall(&_AssignmentHook.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_AssignmentHook *AssignmentHookTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _AssignmentHook.Contract.UpgradeToAndCall(&_AssignmentHook.TransactOpts, newImplementation, data) +} + +// AssignmentHookAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the AssignmentHook contract. +type AssignmentHookAdminChangedIterator struct { + Event *AssignmentHookAdminChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -640,7 +661,7 @@ type AssignmentHookBlockAssignedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *AssignmentHookBlockAssignedIterator) Next() bool { +func (it *AssignmentHookAdminChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -649,7 +670,7 @@ func (it *AssignmentHookBlockAssignedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AssignmentHookBlockAssigned) + it.Event = new(AssignmentHookAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -664,7 +685,7 @@ func (it *AssignmentHookBlockAssignedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AssignmentHookBlockAssigned) + it.Event = new(AssignmentHookAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -680,53 +701,42 @@ func (it *AssignmentHookBlockAssignedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AssignmentHookBlockAssignedIterator) Error() error { +func (it *AssignmentHookAdminChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AssignmentHookBlockAssignedIterator) Close() error { +func (it *AssignmentHookAdminChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AssignmentHookBlockAssigned represents a BlockAssigned event raised by the AssignmentHook contract. -type AssignmentHookBlockAssigned struct { - AssignedProver common.Address - Meta TaikoDataBlockMetadata - Assignment AssignmentHookProverAssignment - Raw types.Log // Blockchain specific contextual infos +// AssignmentHookAdminChanged represents a AdminChanged event raised by the AssignmentHook contract. +type AssignmentHookAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBlockAssigned is a free log retrieval operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) -func (_AssignmentHook *AssignmentHookFilterer) FilterBlockAssigned(opts *bind.FilterOpts, assignedProver []common.Address) (*AssignmentHookBlockAssignedIterator, error) { - - var assignedProverRule []interface{} - for _, assignedProverItem := range assignedProver { - assignedProverRule = append(assignedProverRule, assignedProverItem) - } +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_AssignmentHook *AssignmentHookFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*AssignmentHookAdminChangedIterator, error) { - logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "BlockAssigned", assignedProverRule) + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "AdminChanged") if err != nil { return nil, err } - return &AssignmentHookBlockAssignedIterator{contract: _AssignmentHook.contract, event: "BlockAssigned", logs: logs, sub: sub}, nil + return &AssignmentHookAdminChangedIterator{contract: _AssignmentHook.contract, event: "AdminChanged", logs: logs, sub: sub}, nil } -// WatchBlockAssigned is a free log subscription operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) -func (_AssignmentHook *AssignmentHookFilterer) WatchBlockAssigned(opts *bind.WatchOpts, sink chan<- *AssignmentHookBlockAssigned, assignedProver []common.Address) (event.Subscription, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_AssignmentHook *AssignmentHookFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *AssignmentHookAdminChanged) (event.Subscription, error) { - var assignedProverRule []interface{} - for _, assignedProverItem := range assignedProver { - assignedProverRule = append(assignedProverRule, assignedProverItem) - } - - logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "BlockAssigned", assignedProverRule) + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "AdminChanged") if err != nil { return nil, err } @@ -736,8 +746,8 @@ func (_AssignmentHook *AssignmentHookFilterer) WatchBlockAssigned(opts *bind.Wat select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AssignmentHookBlockAssigned) - if err := _AssignmentHook.contract.UnpackLog(event, "BlockAssigned", log); err != nil { + event := new(AssignmentHookAdminChanged) + if err := _AssignmentHook.contract.UnpackLog(event, "AdminChanged", log); err != nil { return err } event.Raw = log @@ -758,21 +768,21 @@ func (_AssignmentHook *AssignmentHookFilterer) WatchBlockAssigned(opts *bind.Wat }), nil } -// ParseBlockAssigned is a log parse operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) -func (_AssignmentHook *AssignmentHookFilterer) ParseBlockAssigned(log types.Log) (*AssignmentHookBlockAssigned, error) { - event := new(AssignmentHookBlockAssigned) - if err := _AssignmentHook.contract.UnpackLog(event, "BlockAssigned", log); err != nil { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_AssignmentHook *AssignmentHookFilterer) ParseAdminChanged(log types.Log) (*AssignmentHookAdminChanged, error) { + event := new(AssignmentHookAdminChanged) + if err := _AssignmentHook.contract.UnpackLog(event, "AdminChanged", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AssignmentHookInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AssignmentHook contract. -type AssignmentHookInitializedIterator struct { - Event *AssignmentHookInitialized // Event containing the contract specifics and raw log +// AssignmentHookBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the AssignmentHook contract. +type AssignmentHookBeaconUpgradedIterator struct { + Event *AssignmentHookBeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -786,7 +796,7 @@ type AssignmentHookInitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *AssignmentHookInitializedIterator) Next() bool { +func (it *AssignmentHookBeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -795,7 +805,7 @@ func (it *AssignmentHookInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AssignmentHookInitialized) + it.Event = new(AssignmentHookBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -810,7 +820,7 @@ func (it *AssignmentHookInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AssignmentHookInitialized) + it.Event = new(AssignmentHookBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -826,41 +836,51 @@ func (it *AssignmentHookInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AssignmentHookInitializedIterator) Error() error { +func (it *AssignmentHookBeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AssignmentHookInitializedIterator) Close() error { +func (it *AssignmentHookBeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AssignmentHookInitialized represents a Initialized event raised by the AssignmentHook contract. -type AssignmentHookInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// AssignmentHookBeaconUpgraded represents a BeaconUpgraded event raised by the AssignmentHook contract. +type AssignmentHookBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_AssignmentHook *AssignmentHookFilterer) FilterInitialized(opts *bind.FilterOpts) (*AssignmentHookInitializedIterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_AssignmentHook *AssignmentHookFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*AssignmentHookBeaconUpgradedIterator, error) { - logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &AssignmentHookInitializedIterator{contract: _AssignmentHook.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &AssignmentHookBeaconUpgradedIterator{contract: _AssignmentHook.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_AssignmentHook *AssignmentHookFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AssignmentHookInitialized) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_AssignmentHook *AssignmentHookFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *AssignmentHookBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -870,8 +890,8 @@ func (_AssignmentHook *AssignmentHookFilterer) WatchInitialized(opts *bind.Watch select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AssignmentHookInitialized) - if err := _AssignmentHook.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(AssignmentHookBeaconUpgraded) + if err := _AssignmentHook.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -892,21 +912,21 @@ func (_AssignmentHook *AssignmentHookFilterer) WatchInitialized(opts *bind.Watch }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_AssignmentHook *AssignmentHookFilterer) ParseInitialized(log types.Log) (*AssignmentHookInitialized, error) { - event := new(AssignmentHookInitialized) - if err := _AssignmentHook.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_AssignmentHook *AssignmentHookFilterer) ParseBeaconUpgraded(log types.Log) (*AssignmentHookBeaconUpgraded, error) { + event := new(AssignmentHookBeaconUpgraded) + if err := _AssignmentHook.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AssignmentHookOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the AssignmentHook contract. -type AssignmentHookOwnershipTransferStartedIterator struct { - Event *AssignmentHookOwnershipTransferStarted // Event containing the contract specifics and raw log +// AssignmentHookBlockAssignedIterator is returned from FilterBlockAssigned and is used to iterate over the raw logs and unpacked data for BlockAssigned events raised by the AssignmentHook contract. +type AssignmentHookBlockAssignedIterator struct { + Event *AssignmentHookBlockAssigned // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -920,7 +940,7 @@ type AssignmentHookOwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *AssignmentHookOwnershipTransferStartedIterator) Next() bool { +func (it *AssignmentHookBlockAssignedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -929,7 +949,7 @@ func (it *AssignmentHookOwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AssignmentHookOwnershipTransferStarted) + it.Event = new(AssignmentHookBlockAssigned) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -944,7 +964,7 @@ func (it *AssignmentHookOwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AssignmentHookOwnershipTransferStarted) + it.Event = new(AssignmentHookBlockAssigned) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -960,60 +980,187 @@ func (it *AssignmentHookOwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AssignmentHookOwnershipTransferStartedIterator) Error() error { +func (it *AssignmentHookBlockAssignedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AssignmentHookOwnershipTransferStartedIterator) Close() error { +func (it *AssignmentHookBlockAssignedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AssignmentHookOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the AssignmentHook contract. -type AssignmentHookOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// AssignmentHookBlockAssigned represents a BlockAssigned event raised by the AssignmentHook contract. +type AssignmentHookBlockAssigned struct { + AssignedProver common.Address + Meta TaikoDataBlockMetadata + Assignment AssignmentHookProverAssignment + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterBlockAssigned is a free log retrieval operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_AssignmentHook *AssignmentHookFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*AssignmentHookOwnershipTransferStartedIterator, error) { +// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) +func (_AssignmentHook *AssignmentHookFilterer) FilterBlockAssigned(opts *bind.FilterOpts, assignedProver []common.Address) (*AssignmentHookBlockAssignedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var assignedProverRule []interface{} + for _, assignedProverItem := range assignedProver { + assignedProverRule = append(assignedProverRule, assignedProverItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "BlockAssigned", assignedProverRule) + if err != nil { + return nil, err } + return &AssignmentHookBlockAssignedIterator{contract: _AssignmentHook.contract, event: "BlockAssigned", logs: logs, sub: sub}, nil +} + +// WatchBlockAssigned is a free log subscription operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. +// +// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) +func (_AssignmentHook *AssignmentHookFilterer) WatchBlockAssigned(opts *bind.WatchOpts, sink chan<- *AssignmentHookBlockAssigned, assignedProver []common.Address) (event.Subscription, error) { - logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + var assignedProverRule []interface{} + for _, assignedProverItem := range assignedProver { + assignedProverRule = append(assignedProverRule, assignedProverItem) + } + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "BlockAssigned", assignedProverRule) if err != nil { return nil, err } - return &AssignmentHookOwnershipTransferStartedIterator{contract: _AssignmentHook.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookBlockAssigned) + if err := _AssignmentHook.contract.UnpackLog(event, "BlockAssigned", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseBlockAssigned is a log parse operation binding the contract event 0xcd949933b61139cc85e76147e25c12a4fb3664bd6e1dcf9ab10e87e756e7c4a7. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_AssignmentHook *AssignmentHookFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *AssignmentHookOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event BlockAssigned(address indexed assignedProver, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint64,uint64,uint64,bytes32,(uint16,uint128)[],bytes) assignment) +func (_AssignmentHook *AssignmentHookFilterer) ParseBlockAssigned(log types.Log) (*AssignmentHookBlockAssigned, error) { + event := new(AssignmentHookBlockAssigned) + if err := _AssignmentHook.contract.UnpackLog(event, "BlockAssigned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) +// AssignmentHookInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AssignmentHook contract. +type AssignmentHookInitializedIterator struct { + Event *AssignmentHookInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookInitialized represents a Initialized event raised by the AssignmentHook contract. +type AssignmentHookInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AssignmentHook *AssignmentHookFilterer) FilterInitialized(opts *bind.FilterOpts) (*AssignmentHookInitializedIterator, error) { + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err } + return &AssignmentHookInitializedIterator{contract: _AssignmentHook.contract, event: "Initialized", logs: logs, sub: sub}, nil +} - logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AssignmentHook *AssignmentHookFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AssignmentHookInitialized) (event.Subscription, error) { + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -1023,8 +1170,8 @@ func (_AssignmentHook *AssignmentHookFilterer) WatchOwnershipTransferStarted(opt select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AssignmentHookOwnershipTransferStarted) - if err := _AssignmentHook.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(AssignmentHookInitialized) + if err := _AssignmentHook.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -1045,12 +1192,12 @@ func (_AssignmentHook *AssignmentHookFilterer) WatchOwnershipTransferStarted(opt }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_AssignmentHook *AssignmentHookFilterer) ParseOwnershipTransferStarted(log types.Log) (*AssignmentHookOwnershipTransferStarted, error) { - event := new(AssignmentHookOwnershipTransferStarted) - if err := _AssignmentHook.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event Initialized(uint8 version) +func (_AssignmentHook *AssignmentHookFilterer) ParseInitialized(log types.Log) (*AssignmentHookInitialized, error) { + event := new(AssignmentHookInitialized) + if err := _AssignmentHook.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log @@ -1477,3 +1624,147 @@ func (_AssignmentHook *AssignmentHookFilterer) ParseUnpaused(log types.Log) (*As event.Raw = log return event, nil } + +// AssignmentHookUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the AssignmentHook contract. +type AssignmentHookUpgradedIterator struct { + Event *AssignmentHookUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AssignmentHookUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AssignmentHookUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AssignmentHookUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AssignmentHookUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AssignmentHookUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AssignmentHookUpgraded represents a Upgraded event raised by the AssignmentHook contract. +type AssignmentHookUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_AssignmentHook *AssignmentHookFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*AssignmentHookUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _AssignmentHook.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &AssignmentHookUpgradedIterator{contract: _AssignmentHook.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_AssignmentHook *AssignmentHookFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *AssignmentHookUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _AssignmentHook.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AssignmentHookUpgraded) + if err := _AssignmentHook.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_AssignmentHook *AssignmentHookFilterer) ParseUpgraded(log types.Log) (*AssignmentHookUpgraded, error) { + event := new(AssignmentHookUpgraded) + if err := _AssignmentHook.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/eventindexer/contracts/bridge/Bridge.go b/packages/eventindexer/contracts/bridge/Bridge.go index e363c41befe..c7c19837e5b 100644 --- a/packages/eventindexer/contracts/bridge/Bridge.go +++ b/packages/eventindexer/contracts/bridge/Bridge.go @@ -54,7 +54,7 @@ type IBridgeMessage struct { // BridgeMetaData contains all meta data concerning the Bridge contract. var BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"B_INVALID_CHAINID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_CONTEXT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_GAS_LIMIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_SIGNAL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_VALUE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NON_RETRIABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_RECALLED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_STATUS_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DestChainEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"MessageRecalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumBridge.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"MessageStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignalSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"context\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"}],\"internalType\":\"structIBridge.Context\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"hashMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"isDestChainEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"destBridge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"isMessageRecalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"recalled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"isMessageSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"messageStatus\",\"outputs\":[{\"internalType\":\"enumBridge.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextMessageId\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageFailed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"recallMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isLastAttempt\",\"type\":\"bool\"}],\"name\":\"retryMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"name\":\"B_INVALID_CHAINID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_CONTEXT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_GAS_LIMIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_SIGNAL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_VALUE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NON_RETRIABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_RECALLED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_STATUS_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DestChainEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"MessageRecalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumBridge.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"MessageStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignalSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"context\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"}],\"internalType\":\"structIBridge.Context\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"hashMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"isDestChainEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"destBridge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"isMessageRecalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"recalled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"isMessageSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"messageStatus\",\"outputs\":[{\"internalType\":\"enumBridge.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextMessageId\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageFailed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"recallMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isLastAttempt\",\"type\":\"bool\"}],\"name\":\"retryMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // BridgeABI is the input ABI used to generate the binding from. @@ -527,37 +527,6 @@ func (_Bridge *BridgeCallerSession) Paused() (bool, error) { return _Bridge.Contract.Paused(&_Bridge.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. -// -// Solidity: function pendingOwner() view returns(address) -func (_Bridge *BridgeCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Bridge.contract.Call(opts, &out, "pendingOwner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. -// -// Solidity: function pendingOwner() view returns(address) -func (_Bridge *BridgeSession) PendingOwner() (common.Address, error) { - return _Bridge.Contract.PendingOwner(&_Bridge.CallOpts) -} - -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. -// -// Solidity: function pendingOwner() view returns(address) -func (_Bridge *BridgeCallerSession) PendingOwner() (common.Address, error) { - return _Bridge.Contract.PendingOwner(&_Bridge.CallOpts) -} - // ProveMessageFailed is a free data retrieval call binding the contract method 0x625e5b7f. // // Solidity: function proveMessageFailed((uint128,address,uint64,uint64,address,address,address,uint256,uint256,uint256,bytes,string) message, bytes proof) view returns(bool) @@ -620,6 +589,37 @@ func (_Bridge *BridgeCallerSession) ProveMessageReceived(message IBridgeMessage, return _Bridge.Contract.ProveMessageReceived(&_Bridge.CallOpts, message, proof) } +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_Bridge *BridgeCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_Bridge *BridgeSession) ProxiableUUID() ([32]byte, error) { + return _Bridge.Contract.ProxiableUUID(&_Bridge.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_Bridge *BridgeCallerSession) ProxiableUUID() ([32]byte, error) { + return _Bridge.Contract.ProxiableUUID(&_Bridge.CallOpts) +} + // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. // // Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) @@ -682,27 +682,6 @@ func (_Bridge *BridgeCallerSession) Resolve0(name [32]byte, allowZeroAddress boo return _Bridge.Contract.Resolve0(&_Bridge.CallOpts, name, allowZeroAddress) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_Bridge *BridgeTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_Bridge *BridgeSession) AcceptOwnership() (*types.Transaction, error) { - return _Bridge.Contract.AcceptOwnership(&_Bridge.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_Bridge *BridgeTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _Bridge.Contract.AcceptOwnership(&_Bridge.TransactOpts) -} - // Init is a paid mutator transaction binding the contract method 0x19ab453c. // // Solidity: function init(address _addressManager) returns() @@ -892,6 +871,48 @@ func (_Bridge *BridgeTransactorSession) Unpause() (*types.Transaction, error) { return _Bridge.Contract.Unpause(&_Bridge.TransactOpts) } +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_Bridge *BridgeTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_Bridge *BridgeSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeTo(&_Bridge.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_Bridge *BridgeTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeTo(&_Bridge.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_Bridge *BridgeTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_Bridge *BridgeSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeToAndCall(&_Bridge.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_Bridge *BridgeTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeToAndCall(&_Bridge.TransactOpts, newImplementation, data) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -906,11 +927,290 @@ func (_Bridge *BridgeSession) Receive() (*types.Transaction, error) { return _Bridge.Contract.Receive(&_Bridge.TransactOpts) } -// Receive is a paid mutator transaction binding the contract receive function. +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Bridge *BridgeTransactorSession) Receive() (*types.Transaction, error) { + return _Bridge.Contract.Receive(&_Bridge.TransactOpts) +} + +// BridgeAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the Bridge contract. +type BridgeAdminChangedIterator struct { + Event *BridgeAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeAdminChanged represents a AdminChanged event raised by the Bridge contract. +type BridgeAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Bridge *BridgeFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*BridgeAdminChangedIterator, error) { + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &BridgeAdminChangedIterator{contract: _Bridge.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Bridge *BridgeFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *BridgeAdminChanged) (event.Subscription, error) { + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeAdminChanged) + if err := _Bridge.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Bridge *BridgeFilterer) ParseAdminChanged(log types.Log) (*BridgeAdminChanged, error) { + event := new(BridgeAdminChanged) + if err := _Bridge.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the Bridge contract. +type BridgeBeaconUpgradedIterator struct { + Event *BridgeBeaconUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeBeaconUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeBeaconUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeBeaconUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeBeaconUpgraded represents a BeaconUpgraded event raised by the Bridge contract. +type BridgeBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_Bridge *BridgeFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*BridgeBeaconUpgradedIterator, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return &BridgeBeaconUpgradedIterator{contract: _Bridge.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil +} + +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_Bridge *BridgeFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *BridgeBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeBeaconUpgraded) + if err := _Bridge.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: receive() payable returns() -func (_Bridge *BridgeTransactorSession) Receive() (*types.Transaction, error) { - return _Bridge.Contract.Receive(&_Bridge.TransactOpts) +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_Bridge *BridgeFilterer) ParseBeaconUpgraded(log types.Log) (*BridgeBeaconUpgraded, error) { + event := new(BridgeBeaconUpgraded) + if err := _Bridge.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } // BridgeDestChainEnabledIterator is returned from FilterDestChainEnabled and is used to iterate over the raw logs and unpacked data for DestChainEnabled events raised by the Bridge contract. @@ -1626,159 +1926,6 @@ func (_Bridge *BridgeFilterer) ParseMessageStatusChanged(log types.Log) (*Bridge return event, nil } -// BridgeOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the Bridge contract. -type BridgeOwnershipTransferStartedIterator struct { - Event *BridgeOwnershipTransferStarted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BridgeOwnershipTransferStartedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BridgeOwnershipTransferStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BridgeOwnershipTransferStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeOwnershipTransferStartedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BridgeOwnershipTransferStartedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BridgeOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the Bridge contract. -type BridgeOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_Bridge *BridgeFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BridgeOwnershipTransferStartedIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Bridge.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &BridgeOwnershipTransferStartedIterator{contract: _Bridge.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_Bridge *BridgeFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *BridgeOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Bridge.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BridgeOwnershipTransferStarted) - if err := _Bridge.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_Bridge *BridgeFilterer) ParseOwnershipTransferStarted(log types.Log) (*BridgeOwnershipTransferStarted, error) { - event := new(BridgeOwnershipTransferStarted) - if err := _Bridge.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // BridgeOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Bridge contract. type BridgeOwnershipTransferredIterator struct { Event *BridgeOwnershipTransferred // Event containing the contract specifics and raw log @@ -2344,3 +2491,147 @@ func (_Bridge *BridgeFilterer) ParseUnpaused(log types.Log) (*BridgeUnpaused, er event.Raw = log return event, nil } + +// BridgeUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Bridge contract. +type BridgeUpgradedIterator struct { + Event *BridgeUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeUpgraded represents a Upgraded event raised by the Bridge contract. +type BridgeUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Bridge *BridgeFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*BridgeUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &BridgeUpgradedIterator{contract: _Bridge.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Bridge *BridgeFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *BridgeUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeUpgraded) + if err := _Bridge.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Bridge *BridgeFilterer) ParseUpgraded(log types.Log) (*BridgeUpgraded, error) { + event := new(BridgeUpgraded) + if err := _Bridge.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/eventindexer/contracts/taikol1/TaikoL1.go b/packages/eventindexer/contracts/taikol1/TaikoL1.go index 00a66871680..100a7318744 100644 --- a/packages/eventindexer/contracts/taikol1/TaikoL1.go +++ b/packages/eventindexer/contracts/taikol1/TaikoL1.go @@ -146,7 +146,7 @@ type TaikoDataTransitionState struct { // TaikoL1MetaData contains all meta data concerning the TaikoL1 contract. var TaikoL1MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_RECEIVE_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getTaikoTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_RECEIVE_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // TaikoL1ABI is the input ABI used to generate the binding from. @@ -526,37 +526,6 @@ func (_TaikoL1 *TaikoL1CallerSession) GetSyncedSnippet(blockId uint64) (ICrossCh return _TaikoL1.Contract.GetSyncedSnippet(&_TaikoL1.CallOpts, blockId) } -// GetTaikoTokenBalance is a free data retrieval call binding the contract method 0x8dff9cea. -// -// Solidity: function getTaikoTokenBalance(address user) view returns(uint256) -func (_TaikoL1 *TaikoL1Caller) GetTaikoTokenBalance(opts *bind.CallOpts, user common.Address) (*big.Int, error) { - var out []interface{} - err := _TaikoL1.contract.Call(opts, &out, "getTaikoTokenBalance", user) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTaikoTokenBalance is a free data retrieval call binding the contract method 0x8dff9cea. -// -// Solidity: function getTaikoTokenBalance(address user) view returns(uint256) -func (_TaikoL1 *TaikoL1Session) GetTaikoTokenBalance(user common.Address) (*big.Int, error) { - return _TaikoL1.Contract.GetTaikoTokenBalance(&_TaikoL1.CallOpts, user) -} - -// GetTaikoTokenBalance is a free data retrieval call binding the contract method 0x8dff9cea. -// -// Solidity: function getTaikoTokenBalance(address user) view returns(uint256) -func (_TaikoL1 *TaikoL1CallerSession) GetTaikoTokenBalance(user common.Address) (*big.Int, error) { - return _TaikoL1.Contract.GetTaikoTokenBalance(&_TaikoL1.CallOpts, user) -} - // GetTier is a free data retrieval call binding the contract method 0x576c3de7. // // Solidity: function getTier(uint16 tierId) view returns((bytes32,uint96,uint96,uint24,uint16,uint8)) @@ -774,35 +743,35 @@ func (_TaikoL1 *TaikoL1CallerSession) Paused() (bool, error) { return _TaikoL1.Contract.Paused(&_TaikoL1.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL1 *TaikoL1Caller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL1 *TaikoL1Caller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TaikoL1.contract.Call(opts, &out, "pendingOwner") + err := _TaikoL1.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL1 *TaikoL1Session) PendingOwner() (common.Address, error) { - return _TaikoL1.Contract.PendingOwner(&_TaikoL1.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL1 *TaikoL1Session) ProxiableUUID() ([32]byte, error) { + return _TaikoL1.Contract.ProxiableUUID(&_TaikoL1.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL1 *TaikoL1CallerSession) PendingOwner() (common.Address, error) { - return _TaikoL1.Contract.PendingOwner(&_TaikoL1.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL1 *TaikoL1CallerSession) ProxiableUUID() ([32]byte, error) { + return _TaikoL1.Contract.ProxiableUUID(&_TaikoL1.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -912,27 +881,6 @@ func (_TaikoL1 *TaikoL1CallerSession) State() (struct { return _TaikoL1.Contract.State(&_TaikoL1.CallOpts) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL1 *TaikoL1Transactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TaikoL1.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL1 *TaikoL1Session) AcceptOwnership() (*types.Transaction, error) { - return _TaikoL1.Contract.AcceptOwnership(&_TaikoL1.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL1 *TaikoL1TransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _TaikoL1.Contract.AcceptOwnership(&_TaikoL1.TransactOpts) -} - // DepositEtherToL2 is a paid mutator transaction binding the contract method 0x047a289d. // // Solidity: function depositEtherToL2(address recipient) payable returns() @@ -1122,6 +1070,48 @@ func (_TaikoL1 *TaikoL1TransactorSession) Unpause() (*types.Transaction, error) return _TaikoL1.Contract.Unpause(&_TaikoL1.TransactOpts) } +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL1 *TaikoL1Transactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL1.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL1 *TaikoL1Session) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeTo(&_TaikoL1.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL1 *TaikoL1TransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeTo(&_TaikoL1.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL1 *TaikoL1Transactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL1.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL1 *TaikoL1Session) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeToAndCall(&_TaikoL1.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL1 *TaikoL1TransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeToAndCall(&_TaikoL1.TransactOpts, newImplementation, data) +} + // VerifyBlocks is a paid mutator transaction binding the contract method 0x8778209d. // // Solidity: function verifyBlocks(uint64 maxBlocksToVerify) returns() @@ -1164,9 +1154,9 @@ func (_TaikoL1 *TaikoL1TransactorSession) Receive() (*types.Transaction, error) return _TaikoL1.Contract.Receive(&_TaikoL1.TransactOpts) } -// TaikoL1BlobCachedIterator is returned from FilterBlobCached and is used to iterate over the raw logs and unpacked data for BlobCached events raised by the TaikoL1 contract. -type TaikoL1BlobCachedIterator struct { - Event *TaikoL1BlobCached // Event containing the contract specifics and raw log +// TaikoL1AdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the TaikoL1 contract. +type TaikoL1AdminChangedIterator struct { + Event *TaikoL1AdminChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1180,7 +1170,7 @@ type TaikoL1BlobCachedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlobCachedIterator) Next() bool { +func (it *TaikoL1AdminChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1189,7 +1179,7 @@ func (it *TaikoL1BlobCachedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached) + it.Event = new(TaikoL1AdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1204,7 +1194,7 @@ func (it *TaikoL1BlobCachedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached) + it.Event = new(TaikoL1AdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1220,41 +1210,42 @@ func (it *TaikoL1BlobCachedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlobCachedIterator) Error() error { +func (it *TaikoL1AdminChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlobCachedIterator) Close() error { +func (it *TaikoL1AdminChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlobCached represents a BlobCached event raised by the TaikoL1 contract. -type TaikoL1BlobCached struct { - BlobHash [32]byte - Raw types.Log // Blockchain specific contextual infos +// TaikoL1AdminChanged represents a AdminChanged event raised by the TaikoL1 contract. +type TaikoL1AdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBlobCached is a free log retrieval operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) FilterBlobCached(opts *bind.FilterOpts) (*TaikoL1BlobCachedIterator, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL1 *TaikoL1Filterer) FilterAdminChanged(opts *bind.FilterOpts) (*TaikoL1AdminChangedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlobCached") + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "AdminChanged") if err != nil { return nil, err } - return &TaikoL1BlobCachedIterator{contract: _TaikoL1.contract, event: "BlobCached", logs: logs, sub: sub}, nil + return &TaikoL1AdminChangedIterator{contract: _TaikoL1.contract, event: "AdminChanged", logs: logs, sub: sub}, nil } -// WatchBlobCached is a free log subscription operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan<- *TaikoL1BlobCached) (event.Subscription, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL1 *TaikoL1Filterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *TaikoL1AdminChanged) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlobCached") + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "AdminChanged") if err != nil { return nil, err } @@ -1264,8 +1255,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlobCached) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { + event := new(TaikoL1AdminChanged) + if err := _TaikoL1.contract.UnpackLog(event, "AdminChanged", log); err != nil { return err } event.Raw = log @@ -1286,21 +1277,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan }), nil } -// ParseBlobCached is a log parse operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) ParseBlobCached(log types.Log) (*TaikoL1BlobCached, error) { - event := new(TaikoL1BlobCached) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL1 *TaikoL1Filterer) ParseAdminChanged(log types.Log) (*TaikoL1AdminChanged, error) { + event := new(TaikoL1AdminChanged) + if err := _TaikoL1.contract.UnpackLog(event, "AdminChanged", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1BlobCached0Iterator is returned from FilterBlobCached0 and is used to iterate over the raw logs and unpacked data for BlobCached0 events raised by the TaikoL1 contract. -type TaikoL1BlobCached0Iterator struct { - Event *TaikoL1BlobCached0 // Event containing the contract specifics and raw log +// TaikoL1BeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the TaikoL1 contract. +type TaikoL1BeaconUpgradedIterator struct { + Event *TaikoL1BeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1314,7 +1305,7 @@ type TaikoL1BlobCached0Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlobCached0Iterator) Next() bool { +func (it *TaikoL1BeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1323,7 +1314,7 @@ func (it *TaikoL1BlobCached0Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached0) + it.Event = new(TaikoL1BeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1338,7 +1329,7 @@ func (it *TaikoL1BlobCached0Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached0) + it.Event = new(TaikoL1BeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1354,41 +1345,51 @@ func (it *TaikoL1BlobCached0Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlobCached0Iterator) Error() error { +func (it *TaikoL1BeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlobCached0Iterator) Close() error { +func (it *TaikoL1BeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlobCached0 represents a BlobCached0 event raised by the TaikoL1 contract. -type TaikoL1BlobCached0 struct { - BlobHash [32]byte - Raw types.Log // Blockchain specific contextual infos +// TaikoL1BeaconUpgraded represents a BeaconUpgraded event raised by the TaikoL1 contract. +type TaikoL1BeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBlobCached0 is a free log retrieval operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) FilterBlobCached0(opts *bind.FilterOpts) (*TaikoL1BlobCached0Iterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL1 *TaikoL1Filterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*TaikoL1BeaconUpgradedIterator, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlobCached0") + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &TaikoL1BlobCached0Iterator{contract: _TaikoL1.contract, event: "BlobCached0", logs: logs, sub: sub}, nil + return &TaikoL1BeaconUpgradedIterator{contract: _TaikoL1.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchBlobCached0 is a free log subscription operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached0(opts *bind.WatchOpts, sink chan<- *TaikoL1BlobCached0) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL1 *TaikoL1Filterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *TaikoL1BeaconUpgraded, beacon []common.Address) (event.Subscription, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlobCached0") + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -1398,8 +1399,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached0(opts *bind.WatchOpts, sink cha select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlobCached0) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached0", log); err != nil { + event := new(TaikoL1BeaconUpgraded) + if err := _TaikoL1.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -1420,21 +1421,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached0(opts *bind.WatchOpts, sink cha }), nil } -// ParseBlobCached0 is a log parse operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) ParseBlobCached0(log types.Log) (*TaikoL1BlobCached0, error) { - event := new(TaikoL1BlobCached0) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached0", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL1 *TaikoL1Filterer) ParseBeaconUpgraded(log types.Log) (*TaikoL1BeaconUpgraded, error) { + event := new(TaikoL1BeaconUpgraded) + if err := _TaikoL1.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1BlockProposedIterator is returned from FilterBlockProposed and is used to iterate over the raw logs and unpacked data for BlockProposed events raised by the TaikoL1 contract. -type TaikoL1BlockProposedIterator struct { - Event *TaikoL1BlockProposed // Event containing the contract specifics and raw log +// TaikoL1BlobCachedIterator is returned from FilterBlobCached and is used to iterate over the raw logs and unpacked data for BlobCached events raised by the TaikoL1 contract. +type TaikoL1BlobCachedIterator struct { + Event *TaikoL1BlobCached // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1448,7 +1449,7 @@ type TaikoL1BlockProposedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlockProposedIterator) Next() bool { +func (it *TaikoL1BlobCachedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1457,7 +1458,7 @@ func (it *TaikoL1BlockProposedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed) + it.Event = new(TaikoL1BlobCached) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1472,7 +1473,7 @@ func (it *TaikoL1BlockProposedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed) + it.Event = new(TaikoL1BlobCached) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1488,63 +1489,41 @@ func (it *TaikoL1BlockProposedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlockProposedIterator) Error() error { +func (it *TaikoL1BlobCachedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlockProposedIterator) Close() error { +func (it *TaikoL1BlobCachedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlockProposed represents a BlockProposed event raised by the TaikoL1 contract. -type TaikoL1BlockProposed struct { - BlockId *big.Int - AssignedProver common.Address - LivenessBond *big.Int - Meta TaikoDataBlockMetadata - DepositsProcessed []TaikoDataEthDeposit - Raw types.Log // Blockchain specific contextual infos +// TaikoL1BlobCached represents a BlobCached event raised by the TaikoL1 contract. +type TaikoL1BlobCached struct { + BlobHash [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// FilterBlobCached is a free log retrieval operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposedIterator, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - var assignedProverRule []interface{} - for _, assignedProverItem := range assignedProver { - assignedProverRule = append(assignedProverRule, assignedProverItem) - } +// Solidity: event BlobCached(bytes32 blobHash) +func (_TaikoL1 *TaikoL1Filterer) FilterBlobCached(opts *bind.FilterOpts) (*TaikoL1BlobCachedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlobCached") if err != nil { return nil, err } - return &TaikoL1BlockProposedIterator{contract: _TaikoL1.contract, event: "BlockProposed", logs: logs, sub: sub}, nil + return &TaikoL1BlobCachedIterator{contract: _TaikoL1.contract, event: "BlobCached", logs: logs, sub: sub}, nil } -// WatchBlockProposed is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// WatchBlobCached is a free log subscription operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - var assignedProverRule []interface{} - for _, assignedProverItem := range assignedProver { - assignedProverRule = append(assignedProverRule, assignedProverItem) - } +// Solidity: event BlobCached(bytes32 blobHash) +func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan<- *TaikoL1BlobCached) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlobCached") if err != nil { return nil, err } @@ -1554,8 +1533,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink c select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlockProposed) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { + event := new(TaikoL1BlobCached) + if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { return err } event.Raw = log @@ -1576,21 +1555,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink c }), nil } -// ParseBlockProposed is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// ParseBlobCached is a log parse operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed(log types.Log) (*TaikoL1BlockProposed, error) { - event := new(TaikoL1BlockProposed) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { +// Solidity: event BlobCached(bytes32 blobHash) +func (_TaikoL1 *TaikoL1Filterer) ParseBlobCached(log types.Log) (*TaikoL1BlobCached, error) { + event := new(TaikoL1BlobCached) + if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1BlockProposed0Iterator is returned from FilterBlockProposed0 and is used to iterate over the raw logs and unpacked data for BlockProposed0 events raised by the TaikoL1 contract. -type TaikoL1BlockProposed0Iterator struct { - Event *TaikoL1BlockProposed0 // Event containing the contract specifics and raw log +// TaikoL1BlockProposedIterator is returned from FilterBlockProposed and is used to iterate over the raw logs and unpacked data for BlockProposed events raised by the TaikoL1 contract. +type TaikoL1BlockProposedIterator struct { + Event *TaikoL1BlockProposed // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1604,7 +1583,7 @@ type TaikoL1BlockProposed0Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlockProposed0Iterator) Next() bool { +func (it *TaikoL1BlockProposedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1613,7 +1592,7 @@ func (it *TaikoL1BlockProposed0Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed0) + it.Event = new(TaikoL1BlockProposed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1628,7 +1607,7 @@ func (it *TaikoL1BlockProposed0Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed0) + it.Event = new(TaikoL1BlockProposed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1644,19 +1623,19 @@ func (it *TaikoL1BlockProposed0Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlockProposed0Iterator) Error() error { +func (it *TaikoL1BlockProposedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlockProposed0Iterator) Close() error { +func (it *TaikoL1BlockProposedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlockProposed0 represents a BlockProposed0 event raised by the TaikoL1 contract. -type TaikoL1BlockProposed0 struct { +// TaikoL1BlockProposed represents a BlockProposed event raised by the TaikoL1 contract. +type TaikoL1BlockProposed struct { BlockId *big.Int AssignedProver common.Address LivenessBond *big.Int @@ -1665,10 +1644,10 @@ type TaikoL1BlockProposed0 struct { Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed0 is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// FilterBlockProposed is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // // Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposed0Iterator, error) { +func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposedIterator, error) { var blockIdRule []interface{} for _, blockIdItem := range blockId { @@ -1679,17 +1658,17 @@ func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blo assignedProverRule = append(assignedProverRule, assignedProverItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlockProposed0", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) if err != nil { return nil, err } - return &TaikoL1BlockProposed0Iterator{contract: _TaikoL1.contract, event: "BlockProposed0", logs: logs, sub: sub}, nil + return &TaikoL1BlockProposedIterator{contract: _TaikoL1.contract, event: "BlockProposed", logs: logs, sub: sub}, nil } -// WatchBlockProposed0 is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// WatchBlockProposed is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // // Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed0, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { +func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { var blockIdRule []interface{} for _, blockIdItem := range blockId { @@ -1700,7 +1679,7 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink assignedProverRule = append(assignedProverRule, assignedProverItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlockProposed0", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) if err != nil { return nil, err } @@ -1710,8 +1689,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlockProposed0) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed0", log); err != nil { + event := new(TaikoL1BlockProposed) + if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { return err } event.Raw = log @@ -1732,12 +1711,12 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink }), nil } -// ParseBlockProposed0 is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// ParseBlockProposed is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // // Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed0(log types.Log) (*TaikoL1BlockProposed0, error) { - event := new(TaikoL1BlockProposed0) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed0", log); err != nil { +func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed(log types.Log) (*TaikoL1BlockProposed, error) { + event := new(TaikoL1BlockProposed) + if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { return nil, err } event.Raw = log @@ -2654,9 +2633,9 @@ func (_TaikoL1 *TaikoL1Filterer) ParseInitialized(log types.Log) (*TaikoL1Initia return event, nil } -// TaikoL1OwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferStartedIterator struct { - Event *TaikoL1OwnershipTransferStarted // Event containing the contract specifics and raw log +// TaikoL1OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the TaikoL1 contract. +type TaikoL1OwnershipTransferredIterator struct { + Event *TaikoL1OwnershipTransferred // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2670,7 +2649,7 @@ type TaikoL1OwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { +func (it *TaikoL1OwnershipTransferredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2679,7 +2658,7 @@ func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferStarted) + it.Event = new(TaikoL1OwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2694,7 +2673,7 @@ func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferStarted) + it.Event = new(TaikoL1OwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2710,28 +2689,28 @@ func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1OwnershipTransferStartedIterator) Error() error { +func (it *TaikoL1OwnershipTransferredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1OwnershipTransferStartedIterator) Close() error { +func (it *TaikoL1OwnershipTransferredIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1OwnershipTransferStarted represents a OwnershipTransferStarted event raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferStarted struct { +// TaikoL1OwnershipTransferred represents a OwnershipTransferred event raised by the TaikoL1 contract. +type TaikoL1OwnershipTransferred struct { PreviousOwner common.Address NewOwner common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL1OwnershipTransferStartedIterator, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL1OwnershipTransferredIterator, error) { var previousOwnerRule []interface{} for _, previousOwnerItem := range previousOwner { @@ -2742,17 +2721,17 @@ func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferStarted(opts *bind.Filte newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } - return &TaikoL1OwnershipTransferStartedIterator{contract: _TaikoL1.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &TaikoL1OwnershipTransferredIterator{contract: _TaikoL1.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *TaikoL1OwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TaikoL1OwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { var previousOwnerRule []interface{} for _, previousOwnerItem := range previousOwner { @@ -2763,7 +2742,7 @@ func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } @@ -2773,8 +2752,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1OwnershipTransferStarted) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(TaikoL1OwnershipTransferred) + if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return err } event.Raw = log @@ -2795,21 +2774,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) ParseOwnershipTransferStarted(log types.Log) (*TaikoL1OwnershipTransferStarted, error) { - event := new(TaikoL1OwnershipTransferStarted) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_TaikoL1 *TaikoL1Filterer) ParseOwnershipTransferred(log types.Log) (*TaikoL1OwnershipTransferred, error) { + event := new(TaikoL1OwnershipTransferred) + if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferredIterator struct { - Event *TaikoL1OwnershipTransferred // Event containing the contract specifics and raw log +// TaikoL1PausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the TaikoL1 contract. +type TaikoL1PausedIterator struct { + Event *TaikoL1Paused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2823,7 +2802,7 @@ type TaikoL1OwnershipTransferredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1OwnershipTransferredIterator) Next() bool { +func (it *TaikoL1PausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2832,7 +2811,7 @@ func (it *TaikoL1OwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferred) + it.Event = new(TaikoL1Paused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2847,7 +2826,7 @@ func (it *TaikoL1OwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferred) + it.Event = new(TaikoL1Paused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2863,186 +2842,33 @@ func (it *TaikoL1OwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1OwnershipTransferredIterator) Error() error { +func (it *TaikoL1PausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1OwnershipTransferredIterator) Close() error { +func (it *TaikoL1PausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1OwnershipTransferred represents a OwnershipTransferred event raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// TaikoL1Paused represents a Paused event raised by the TaikoL1 contract. +type TaikoL1Paused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL1OwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: event Paused(address account) +func (_TaikoL1 *TaikoL1Filterer) FilterPaused(opts *bind.FilterOpts) (*TaikoL1PausedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Paused") if err != nil { return nil, err } - return &TaikoL1OwnershipTransferredIterator{contract: _TaikoL1.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TaikoL1OwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1OwnershipTransferred) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) ParseOwnershipTransferred(log types.Log) (*TaikoL1OwnershipTransferred, error) { - event := new(TaikoL1OwnershipTransferred) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// TaikoL1PausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the TaikoL1 contract. -type TaikoL1PausedIterator struct { - Event *TaikoL1Paused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1PausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1Paused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1Paused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1PausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1PausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1Paused represents a Paused event raised by the TaikoL1 contract. -type TaikoL1Paused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_TaikoL1 *TaikoL1Filterer) FilterPaused(opts *bind.FilterOpts) (*TaikoL1PausedIterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &TaikoL1PausedIterator{contract: _TaikoL1.contract, event: "Paused", logs: logs, sub: sub}, nil + return &TaikoL1PausedIterator{contract: _TaikoL1.contract, event: "Paused", logs: logs, sub: sub}, nil } // WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. @@ -3228,140 +3054,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseProvingPaused(log types.Log) (*TaikoL1Prov return event, nil } -// TaikoL1ProvingPaused0Iterator is returned from FilterProvingPaused0 and is used to iterate over the raw logs and unpacked data for ProvingPaused0 events raised by the TaikoL1 contract. -type TaikoL1ProvingPaused0Iterator struct { - Event *TaikoL1ProvingPaused0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1ProvingPaused0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1ProvingPaused0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1ProvingPaused0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1ProvingPaused0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1ProvingPaused0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1ProvingPaused0 represents a ProvingPaused0 event raised by the TaikoL1 contract. -type TaikoL1ProvingPaused0 struct { - Paused bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterProvingPaused0 is a free log retrieval operation binding the contract event 0xed64db85835d07c3c990b8ebdd55e32d64e5ed53143b6ef2179e7bfaf17ddc3b. -// -// Solidity: event ProvingPaused(bool paused) -func (_TaikoL1 *TaikoL1Filterer) FilterProvingPaused0(opts *bind.FilterOpts) (*TaikoL1ProvingPaused0Iterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "ProvingPaused0") - if err != nil { - return nil, err - } - return &TaikoL1ProvingPaused0Iterator{contract: _TaikoL1.contract, event: "ProvingPaused0", logs: logs, sub: sub}, nil -} - -// WatchProvingPaused0 is a free log subscription operation binding the contract event 0xed64db85835d07c3c990b8ebdd55e32d64e5ed53143b6ef2179e7bfaf17ddc3b. -// -// Solidity: event ProvingPaused(bool paused) -func (_TaikoL1 *TaikoL1Filterer) WatchProvingPaused0(opts *bind.WatchOpts, sink chan<- *TaikoL1ProvingPaused0) (event.Subscription, error) { - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "ProvingPaused0") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1ProvingPaused0) - if err := _TaikoL1.contract.UnpackLog(event, "ProvingPaused0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseProvingPaused0 is a log parse operation binding the contract event 0xed64db85835d07c3c990b8ebdd55e32d64e5ed53143b6ef2179e7bfaf17ddc3b. -// -// Solidity: event ProvingPaused(bool paused) -func (_TaikoL1 *TaikoL1Filterer) ParseProvingPaused0(log types.Log) (*TaikoL1ProvingPaused0, error) { - event := new(TaikoL1ProvingPaused0) - if err := _TaikoL1.contract.UnpackLog(event, "ProvingPaused0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TokenCreditedIterator is returned from FilterTokenCredited and is used to iterate over the raw logs and unpacked data for TokenCredited events raised by the TaikoL1 contract. type TaikoL1TokenCreditedIterator struct { Event *TaikoL1TokenCredited // Event containing the contract specifics and raw log @@ -4048,154 +3740,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTransitionContested(log types.Log) (*Taiko return event, nil } -// TaikoL1TransitionContested0Iterator is returned from FilterTransitionContested0 and is used to iterate over the raw logs and unpacked data for TransitionContested0 events raised by the TaikoL1 contract. -type TaikoL1TransitionContested0Iterator struct { - Event *TaikoL1TransitionContested0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1TransitionContested0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1TransitionContested0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1TransitionContested0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TransitionContested0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1TransitionContested0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1TransitionContested0 represents a TransitionContested0 event raised by the TaikoL1 contract. -type TaikoL1TransitionContested0 struct { - BlockId *big.Int - Tran TaikoDataTransition - Contester common.Address - ContestBond *big.Int - Tier uint16 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransitionContested0 is a free log retrieval operation binding the contract event 0xb4c0a86c1ff239277697775b1e91d3375fd3a5ef6b345aa4e2f6001c890558f6. -// -// Solidity: event TransitionContested(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address contester, uint96 contestBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) FilterTransitionContested0(opts *bind.FilterOpts, blockId []*big.Int) (*TaikoL1TransitionContested0Iterator, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TransitionContested0", blockIdRule) - if err != nil { - return nil, err - } - return &TaikoL1TransitionContested0Iterator{contract: _TaikoL1.contract, event: "TransitionContested0", logs: logs, sub: sub}, nil -} - -// WatchTransitionContested0 is a free log subscription operation binding the contract event 0xb4c0a86c1ff239277697775b1e91d3375fd3a5ef6b345aa4e2f6001c890558f6. -// -// Solidity: event TransitionContested(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address contester, uint96 contestBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) WatchTransitionContested0(opts *bind.WatchOpts, sink chan<- *TaikoL1TransitionContested0, blockId []*big.Int) (event.Subscription, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TransitionContested0", blockIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1TransitionContested0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionContested0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransitionContested0 is a log parse operation binding the contract event 0xb4c0a86c1ff239277697775b1e91d3375fd3a5ef6b345aa4e2f6001c890558f6. -// -// Solidity: event TransitionContested(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address contester, uint96 contestBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) ParseTransitionContested0(log types.Log) (*TaikoL1TransitionContested0, error) { - event := new(TaikoL1TransitionContested0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionContested0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TransitionProvedIterator is returned from FilterTransitionProved and is used to iterate over the raw logs and unpacked data for TransitionProved events raised by the TaikoL1 contract. type TaikoL1TransitionProvedIterator struct { Event *TaikoL1TransitionProved // Event containing the contract specifics and raw log @@ -4344,9 +3888,9 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTransitionProved(log types.Log) (*TaikoL1T return event, nil } -// TaikoL1TransitionProved0Iterator is returned from FilterTransitionProved0 and is used to iterate over the raw logs and unpacked data for TransitionProved0 events raised by the TaikoL1 contract. -type TaikoL1TransitionProved0Iterator struct { - Event *TaikoL1TransitionProved0 // Event containing the contract specifics and raw log +// TaikoL1UnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the TaikoL1 contract. +type TaikoL1UnpausedIterator struct { + Event *TaikoL1Unpaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -4360,7 +3904,7 @@ type TaikoL1TransitionProved0Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1TransitionProved0Iterator) Next() bool { +func (it *TaikoL1UnpausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -4369,7 +3913,7 @@ func (it *TaikoL1TransitionProved0Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1TransitionProved0) + it.Event = new(TaikoL1Unpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4384,7 +3928,7 @@ func (it *TaikoL1TransitionProved0Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1TransitionProved0) + it.Event = new(TaikoL1Unpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4400,55 +3944,41 @@ func (it *TaikoL1TransitionProved0Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TransitionProved0Iterator) Error() error { +func (it *TaikoL1UnpausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1TransitionProved0Iterator) Close() error { +func (it *TaikoL1UnpausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1TransitionProved0 represents a TransitionProved0 event raised by the TaikoL1 contract. -type TaikoL1TransitionProved0 struct { - BlockId *big.Int - Tran TaikoDataTransition - Prover common.Address - ValidityBond *big.Int - Tier uint16 - Raw types.Log // Blockchain specific contextual infos +// TaikoL1Unpaused represents a Unpaused event raised by the TaikoL1 contract. +type TaikoL1Unpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterTransitionProved0 is a free log retrieval operation binding the contract event 0xc195e4be3b936845492b8be4b1cf604db687a4d79ad84d979499c136f8e6701f. +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event TransitionProved(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address prover, uint96 validityBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) FilterTransitionProved0(opts *bind.FilterOpts, blockId []*big.Int) (*TaikoL1TransitionProved0Iterator, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } +// Solidity: event Unpaused(address account) +func (_TaikoL1 *TaikoL1Filterer) FilterUnpaused(opts *bind.FilterOpts) (*TaikoL1UnpausedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TransitionProved0", blockIdRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Unpaused") if err != nil { return nil, err } - return &TaikoL1TransitionProved0Iterator{contract: _TaikoL1.contract, event: "TransitionProved0", logs: logs, sub: sub}, nil + return &TaikoL1UnpausedIterator{contract: _TaikoL1.contract, event: "Unpaused", logs: logs, sub: sub}, nil } -// WatchTransitionProved0 is a free log subscription operation binding the contract event 0xc195e4be3b936845492b8be4b1cf604db687a4d79ad84d979499c136f8e6701f. +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event TransitionProved(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address prover, uint96 validityBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) WatchTransitionProved0(opts *bind.WatchOpts, sink chan<- *TaikoL1TransitionProved0, blockId []*big.Int) (event.Subscription, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } +// Solidity: event Unpaused(address account) +func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *TaikoL1Unpaused) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TransitionProved0", blockIdRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "Unpaused") if err != nil { return nil, err } @@ -4458,8 +3988,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchTransitionProved0(opts *bind.WatchOpts, si select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1TransitionProved0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionProved0", log); err != nil { + event := new(TaikoL1Unpaused) + if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { return err } event.Raw = log @@ -4480,21 +4010,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchTransitionProved0(opts *bind.WatchOpts, si }), nil } -// ParseTransitionProved0 is a log parse operation binding the contract event 0xc195e4be3b936845492b8be4b1cf604db687a4d79ad84d979499c136f8e6701f. +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event TransitionProved(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address prover, uint96 validityBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) ParseTransitionProved0(log types.Log) (*TaikoL1TransitionProved0, error) { - event := new(TaikoL1TransitionProved0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionProved0", log); err != nil { +// Solidity: event Unpaused(address account) +func (_TaikoL1 *TaikoL1Filterer) ParseUnpaused(log types.Log) (*TaikoL1Unpaused, error) { + event := new(TaikoL1Unpaused) + if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1UnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the TaikoL1 contract. -type TaikoL1UnpausedIterator struct { - Event *TaikoL1Unpaused // Event containing the contract specifics and raw log +// TaikoL1UpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the TaikoL1 contract. +type TaikoL1UpgradedIterator struct { + Event *TaikoL1Upgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -4508,7 +4038,7 @@ type TaikoL1UnpausedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1UnpausedIterator) Next() bool { +func (it *TaikoL1UpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -4517,7 +4047,7 @@ func (it *TaikoL1UnpausedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1Unpaused) + it.Event = new(TaikoL1Upgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4532,7 +4062,7 @@ func (it *TaikoL1UnpausedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1Unpaused) + it.Event = new(TaikoL1Upgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4548,41 +4078,51 @@ func (it *TaikoL1UnpausedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1UnpausedIterator) Error() error { +func (it *TaikoL1UpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1UnpausedIterator) Close() error { +func (it *TaikoL1UpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1Unpaused represents a Unpaused event raised by the TaikoL1 contract. -type TaikoL1Unpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos +// TaikoL1Upgraded represents a Upgraded event raised by the TaikoL1 contract. +type TaikoL1Upgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event Unpaused(address account) -func (_TaikoL1 *TaikoL1Filterer) FilterUnpaused(opts *bind.FilterOpts) (*TaikoL1UnpausedIterator, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL1 *TaikoL1Filterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*TaikoL1UpgradedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Unpaused") + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } - return &TaikoL1UnpausedIterator{contract: _TaikoL1.contract, event: "Unpaused", logs: logs, sub: sub}, nil + return &TaikoL1UpgradedIterator{contract: _TaikoL1.contract, event: "Upgraded", logs: logs, sub: sub}, nil } -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event Unpaused(address account) -func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *TaikoL1Unpaused) (event.Subscription, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL1 *TaikoL1Filterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *TaikoL1Upgraded, implementation []common.Address) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "Unpaused") + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } @@ -4592,8 +4132,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1Unpaused) - if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { + event := new(TaikoL1Upgraded) + if err := _TaikoL1.contract.UnpackLog(event, "Upgraded", log); err != nil { return err } event.Raw = log @@ -4614,12 +4154,12 @@ func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- }), nil } -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event Unpaused(address account) -func (_TaikoL1 *TaikoL1Filterer) ParseUnpaused(log types.Log) (*TaikoL1Unpaused, error) { - event := new(TaikoL1Unpaused) - if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL1 *TaikoL1Filterer) ParseUpgraded(log types.Log) (*TaikoL1Upgraded, error) { + event := new(TaikoL1Upgraded) + if err := _TaikoL1.contract.UnpackLog(event, "Upgraded", log); err != nil { return nil, err } event.Raw = log diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index c27f87087cb..78deb5c54a1 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -347,7 +347,7 @@ contract DeployOnL1 is DeployCapability { for (uint16 i = 0; i < plonkVerifiers.length; ++i) { register( rollupAddressManager, - PseZkVerifier(pseZkVerifier).getVerifierName(i), + string(abi.encodePacked(PseZkVerifier(pseZkVerifier).getVerifierName(i))), plonkVerifiers[i] ); } diff --git a/packages/protocol/test/DeployCapability.sol b/packages/protocol/test/DeployCapability.sol index 0f8991d61f7..74584e95bf3 100644 --- a/packages/protocol/test/DeployCapability.sol +++ b/packages/protocol/test/DeployCapability.sol @@ -6,7 +6,6 @@ pragma solidity ^0.8.20; -import "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; import "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; @@ -21,7 +20,7 @@ abstract contract DeployCapability is Script { error ADDRESS_NULL(); function deployProxy( - bytes32 name, + string memory name, address impl, bytes memory data, address registerTo, @@ -33,10 +32,12 @@ abstract contract DeployCapability is Script { proxy = LibDeploy.deployERC1967Proxy(impl, owner, data); if (registerTo != address(0)) { - AddressManager(registerTo).setAddress(uint64(block.chainid), name, proxy); + AddressManager(registerTo).setAddress( + uint64(block.chainid), bytes32(bytes(name)), proxy + ); } - console2.log(">", string(abi.encodePacked(name)), "@", registerTo); + console2.log(">", name, "@", registerTo); console2.log(" proxy :", proxy); console2.log(" impl :", impl); console2.log(" owner :", OwnableUpgradeable(proxy).owner()); @@ -44,13 +45,13 @@ abstract contract DeployCapability is Script { console2.log(" this :", address(this)); vm.writeJson( - vm.serializeAddress("deployment", Strings.toString(uint256(name)), proxy), + vm.serializeAddress("deployment", name, proxy), string.concat(vm.projectRoot(), "/deployments/deploy_l1.json") ); } function deployProxy( - bytes32 name, + string memory name, address impl, bytes memory data ) @@ -60,26 +61,33 @@ abstract contract DeployCapability is Script { return deployProxy(name, impl, data, address(0), address(0)); } - function register(address registerTo, bytes32 name, address addr) internal { + function register(address registerTo, string memory name, address addr) internal { register(registerTo, name, addr, uint64(block.chainid)); } - function register(address registerTo, bytes32 name, address addr, uint64 chainId) internal { + function register( + address registerTo, + string memory name, + address addr, + uint64 chainId + ) + internal + { if (registerTo == address(0)) revert ADDRESS_NULL(); if (addr == address(0)) revert ADDRESS_NULL(); - AddressManager(registerTo).setAddress(chainId, name, addr); - console2.log("> ", Strings.toString(uint256(name)), "@", registerTo); + AddressManager(registerTo).setAddress(chainId, bytes32(bytes(name)), addr); + console2.log("> ", name, "@", registerTo); console2.log("\t addr : ", addr); } - function copyRegister(address registerTo, address readFrom, bytes32 name) internal { + function copyRegister(address registerTo, address readFrom, string memory name) internal { if (registerTo == address(0)) revert ADDRESS_NULL(); if (readFrom == address(0)) revert ADDRESS_NULL(); register({ registerTo: registerTo, name: name, - addr: AddressManager(readFrom).getAddress(uint64(block.chainid), name), + addr: AddressManager(readFrom).getAddress(uint64(block.chainid), bytes32(bytes(name))), chainId: uint64(block.chainid) }); } diff --git a/packages/relayer/ERC1155Vault.json b/packages/relayer/ERC1155Vault.json index 135cd9d680b..909f0a5d82e 100644 --- a/packages/relayer/ERC1155Vault.json +++ b/packages/relayer/ERC1155Vault.json @@ -9,6 +9,11 @@ "name": "INVALID_PAUSE_STATUS", "type": "error" }, + { + "inputs": [], + "name": "NULL_IMPL_ADDR", + "type": "error" + }, { "inputs": [], "name": "REENTRANT_CALL", @@ -55,11 +60,6 @@ "name": "VAULT_INVALID_AMOUNT", "type": "error" }, - { - "inputs": [], - "name": "VAULT_INVALID_FROM", - "type": "error" - }, { "inputs": [], "name": "VAULT_INVALID_SRC_CHAIN_ID", @@ -82,23 +82,45 @@ }, { "inputs": [], - "name": "VAULT_MESSAGE_NOT_FAILED", + "name": "VAULT_PERMISSION_DENIED", "type": "error" }, { "inputs": [], - "name": "VAULT_MESSAGE_RELEASED_ALREADY", + "name": "VAULT_TOKEN_ARRAY_MISMATCH", "type": "error" }, { - "inputs": [], - "name": "VAULT_PERMISSION_DENIED", - "type": "error" + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" }, { - "inputs": [], - "name": "VAULT_TOKEN_ARRAY_MISMATCH", - "type": "error" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" }, { "anonymous": false, @@ -150,25 +172,6 @@ "name": "Initialized", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -349,6 +352,19 @@ "name": "Unpaused", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, { "inputs": [], "name": "ERC1155_INTERFACE_ID", @@ -388,13 +404,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "addressManager", @@ -685,12 +694,12 @@ }, { "inputs": [], - "name": "pendingOwner", + "name": "proxiableUUID", "outputs": [ { - "internalType": "address", + "internalType": "bytes32", "name": "", - "type": "address" + "type": "bytes32" } ], "stateMutability": "view", @@ -977,5 +986,36 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" } ] diff --git a/packages/relayer/ERC20Vault.json b/packages/relayer/ERC20Vault.json index c857c0bbc0b..441c47e3852 100644 --- a/packages/relayer/ERC20Vault.json +++ b/packages/relayer/ERC20Vault.json @@ -9,6 +9,11 @@ "name": "INVALID_PAUSE_STATUS", "type": "error" }, + { + "inputs": [], + "name": "NULL_IMPL_ADDR", + "type": "error" + }, { "inputs": [], "name": "REENTRANT_CALL", @@ -47,43 +52,70 @@ }, { "inputs": [], - "name": "VAULT_INVALID_AMOUNT", + "name": "VAULT_BTOKEN_BLACKLISTED", "type": "error" }, { "inputs": [], - "name": "VAULT_INVALID_FROM", + "name": "VAULT_CTOKEN_MISMATCH", "type": "error" }, { "inputs": [], - "name": "VAULT_INVALID_SRC_CHAIN_ID", + "name": "VAULT_INVALID_AMOUNT", "type": "error" }, { "inputs": [], - "name": "VAULT_INVALID_TOKEN", + "name": "VAULT_INVALID_NEW_BTOKEN", "type": "error" }, { "inputs": [], - "name": "VAULT_INVALID_USER", + "name": "VAULT_INVALID_TOKEN", "type": "error" }, { "inputs": [], - "name": "VAULT_MESSAGE_NOT_FAILED", + "name": "VAULT_NOT_SAME_OWNER", "type": "error" }, { "inputs": [], - "name": "VAULT_MESSAGE_RELEASED_ALREADY", + "name": "VAULT_PERMISSION_DENIED", "type": "error" }, { - "inputs": [], - "name": "VAULT_PERMISSION_DENIED", - "type": "error" + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" }, { "anonymous": false, @@ -101,9 +133,15 @@ "type": "address" }, { - "indexed": true, + "indexed": false, "internalType": "address", - "name": "btoken", + "name": "btokenOld", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "btokenNew", "type": "address" }, { @@ -125,39 +163,63 @@ "type": "uint8" } ], - "name": "BridgedTokenDeployed", + "name": "BridgedTokenChanged", "type": "event" }, { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "srcChainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "ctoken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "btoken", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "ctokenSymbol", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ctokenName", + "type": "string" + }, { "indexed": false, "internalType": "uint8", - "name": "version", + "name": "ctokenDecimal", "type": "uint8" } ], - "name": "Initialized", + "name": "BridgedTokenDeployed", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" } ], - "name": "OwnershipTransferStarted", + "name": "Initialized", "type": "event" }, { @@ -323,11 +385,17 @@ "type": "event" }, { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" }, { "inputs": [], @@ -381,6 +449,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "btoken", + "type": "address" + } + ], + "name": "btokenBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "blacklisted", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -405,6 +492,57 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint64", + "name": "chainId", + "type": "uint64" + }, + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "internalType": "struct ERC20Vault.CanonicalERC20", + "name": "ctoken", + "type": "tuple" + }, + { + "internalType": "address", + "name": "btokenNew", + "type": "address" + } + ], + "name": "changeBridgedToken", + "outputs": [ + { + "internalType": "address", + "name": "btokenOld", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -546,12 +684,12 @@ }, { "inputs": [], - "name": "pendingOwner", + "name": "proxiableUUID", "outputs": [ { - "internalType": "address", + "internalType": "bytes32", "name": "", - "type": "address" + "type": "bytes32" } ], "stateMutability": "view", @@ -833,5 +971,36 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" } ] diff --git a/packages/relayer/ERC721Vault.json b/packages/relayer/ERC721Vault.json index 9f11c1c16b2..3ab40885b04 100644 --- a/packages/relayer/ERC721Vault.json +++ b/packages/relayer/ERC721Vault.json @@ -9,6 +9,11 @@ "name": "INVALID_PAUSE_STATUS", "type": "error" }, + { + "inputs": [], + "name": "NULL_IMPL_ADDR", + "type": "error" + }, { "inputs": [], "name": "REENTRANT_CALL", @@ -55,11 +60,6 @@ "name": "VAULT_INVALID_AMOUNT", "type": "error" }, - { - "inputs": [], - "name": "VAULT_INVALID_FROM", - "type": "error" - }, { "inputs": [], "name": "VAULT_INVALID_SRC_CHAIN_ID", @@ -82,23 +82,45 @@ }, { "inputs": [], - "name": "VAULT_MESSAGE_NOT_FAILED", + "name": "VAULT_PERMISSION_DENIED", "type": "error" }, { "inputs": [], - "name": "VAULT_MESSAGE_RELEASED_ALREADY", + "name": "VAULT_TOKEN_ARRAY_MISMATCH", "type": "error" }, { - "inputs": [], - "name": "VAULT_PERMISSION_DENIED", - "type": "error" + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" }, { - "inputs": [], - "name": "VAULT_TOKEN_ARRAY_MISMATCH", - "type": "error" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" }, { "anonymous": false, @@ -150,25 +172,6 @@ "name": "Initialized", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -349,6 +352,19 @@ "name": "Unpaused", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, { "inputs": [], "name": "ERC1155_INTERFACE_ID", @@ -388,13 +404,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "addressManager", @@ -641,12 +650,12 @@ }, { "inputs": [], - "name": "pendingOwner", + "name": "proxiableUUID", "outputs": [ { - "internalType": "address", + "internalType": "bytes32", "name": "", - "type": "address" + "type": "bytes32" } ], "stateMutability": "view", @@ -928,5 +937,36 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" } ] diff --git a/packages/relayer/SignalService.json b/packages/relayer/SignalService.json index b264968c370..01d7755ada5 100644 --- a/packages/relayer/SignalService.json +++ b/packages/relayer/SignalService.json @@ -1,9 +1,4 @@ [ - { - "inputs": [], - "name": "ADDRESS_UNAUTHORIZED", - "type": "error" - }, { "inputs": [], "name": "INVALID_ADDRESS", @@ -65,6 +60,25 @@ "name": "SS_INVALID_SIGNAL", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -94,32 +108,26 @@ "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" } ], - "name": "Initialized", + "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" } ], - "name": "OwnershipTransferStarted", + "name": "Initialized", "type": "event" }, { @@ -168,11 +176,17 @@ "type": "event" }, { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" }, { "inputs": [], @@ -260,25 +274,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isAuthorized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -360,19 +355,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -407,6 +389,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "renounceOwnership", @@ -518,5 +513,36 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" } ] diff --git a/packages/relayer/TaikoL1.json b/packages/relayer/TaikoL1.json index 643312b5522..41f9a2af291 100644 --- a/packages/relayer/TaikoL1.json +++ b/packages/relayer/TaikoL1.json @@ -1,9 +1,4 @@ [ - { - "inputs": [], - "name": "ETH_TRANSFER_FAILED", - "type": "error" - }, { "inputs": [], "name": "INVALID_PAUSE_STATUS", @@ -14,16 +9,6 @@ "name": "L1_ALREADY_CONTESTED", "type": "error" }, - { - "inputs": [], - "name": "L1_ALREADY_CONTESTED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_ALREADY_PROVED", - "type": "error" - }, { "inputs": [], "name": "L1_ALREADY_PROVED", @@ -34,16 +19,6 @@ "name": "L1_ASSIGNED_PROVER_NOT_ALLOWED", "type": "error" }, - { - "inputs": [], - "name": "L1_ASSIGNED_PROVER_NOT_ALLOWED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_BLOB_FOR_DA_DISABLED", - "type": "error" - }, { "inputs": [], "name": "L1_BLOB_FOR_DA_DISABLED", @@ -54,26 +29,11 @@ "name": "L1_BLOB_NOT_FOUND", "type": "error" }, - { - "inputs": [], - "name": "L1_BLOB_NOT_FOUND", - "type": "error" - }, { "inputs": [], "name": "L1_BLOB_NOT_REUSEABLE", "type": "error" }, - { - "inputs": [], - "name": "L1_BLOB_NOT_REUSEABLE", - "type": "error" - }, - { - "inputs": [], - "name": "L1_BLOCK_MISMATCH", - "type": "error" - }, { "inputs": [], "name": "L1_BLOCK_MISMATCH", @@ -104,16 +64,6 @@ "name": "L1_INVALID_BLOCK_ID", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_BLOCK_ID", - "type": "error" - }, - { - "inputs": [], - "name": "L1_INVALID_BLOCK_ID", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_CONFIG", @@ -124,16 +74,6 @@ "name": "L1_INVALID_ETH_DEPOSIT", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_ETH_DEPOSIT", - "type": "error" - }, - { - "inputs": [], - "name": "L1_INVALID_PARAM", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_PARAM", @@ -144,11 +84,6 @@ "name": "L1_INVALID_PAUSE_STATUS", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_PAUSE_STATUS", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_PROOF", @@ -159,26 +94,11 @@ "name": "L1_INVALID_PROVER", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_PROVER", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_TIER", "type": "error" }, - { - "inputs": [], - "name": "L1_INVALID_TIER", - "type": "error" - }, - { - "inputs": [], - "name": "L1_INVALID_TRANSITION", - "type": "error" - }, { "inputs": [], "name": "L1_INVALID_TRANSITION", @@ -189,26 +109,11 @@ "name": "L1_LIVENESS_BOND_NOT_RECEIVED", "type": "error" }, - { - "inputs": [], - "name": "L1_LIVENESS_BOND_NOT_RECEIVED", - "type": "error" - }, { "inputs": [], "name": "L1_NOT_ASSIGNED_PROVER", "type": "error" }, - { - "inputs": [], - "name": "L1_NOT_ASSIGNED_PROVER", - "type": "error" - }, - { - "inputs": [], - "name": "L1_PROPOSER_NOT_EOA", - "type": "error" - }, { "inputs": [], "name": "L1_PROPOSER_NOT_EOA", @@ -229,11 +134,6 @@ "name": "L1_TOO_MANY_BLOCKS", "type": "error" }, - { - "inputs": [], - "name": "L1_TOO_MANY_BLOCKS", - "type": "error" - }, { "inputs": [], "name": "L1_TOO_MANY_TIERS", @@ -254,21 +154,11 @@ "name": "L1_TRANSITION_NOT_FOUND", "type": "error" }, - { - "inputs": [], - "name": "L1_TXLIST_OFFSET", - "type": "error" - }, { "inputs": [], "name": "L1_TXLIST_OFFSET_SIZE", "type": "error" }, - { - "inputs": [], - "name": "L1_TXLIST_SIZE", - "type": "error" - }, { "inputs": [], "name": "L1_TXLIST_TOO_LARGE", @@ -279,16 +169,6 @@ "name": "L1_UNAUTHORIZED", "type": "error" }, - { - "inputs": [], - "name": "L1_UNAUTHORIZED", - "type": "error" - }, - { - "inputs": [], - "name": "L1_UNEXPECTED_PARENT", - "type": "error" - }, { "inputs": [], "name": "L1_UNEXPECTED_PARENT", @@ -309,11 +189,6 @@ "name": "L1_UNEXPECTED_TRANSITION_TIER", "type": "error" }, - { - "inputs": [], - "name": "L1_UNEXPECTED_TRANSITION_TIER", - "type": "error" - }, { "inputs": [], "name": "REENTRANT_CALL", @@ -355,156 +230,44 @@ "inputs": [ { "indexed": false, - "internalType": "bytes32", - "name": "blobHash", - "type": "bytes32" + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" } ], - "name": "BlobCached", + "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "bytes32", - "name": "blobHash", - "type": "bytes32" + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" } ], - "name": "BlobCached", + "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, - "internalType": "uint256", - "name": "blockId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "assignedProver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "livenessBond", - "type": "uint96" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "l1Hash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "difficulty", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blobHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "extraData", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositsHash", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "coinbase", - "type": "address" - }, - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasLimit", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "l1Height", - "type": "uint64" - }, - { - "internalType": "uint24", - "name": "txListByteOffset", - "type": "uint24" - }, - { - "internalType": "uint24", - "name": "txListByteSize", - "type": "uint24" - }, - { - "internalType": "uint16", - "name": "minTier", - "type": "uint16" - }, - { - "internalType": "bool", - "name": "blobUsed", - "type": "bool" - }, - { - "internalType": "bytes32", - "name": "parentMetaHash", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TaikoData.BlockMetadata", - "name": "meta", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint96", - "name": "amount", - "type": "uint96" - }, - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - } - ], "indexed": false, - "internalType": "struct TaikoData.EthDeposit[]", - "name": "depositsProcessed", - "type": "tuple[]" + "internalType": "bytes32", + "name": "blobHash", + "type": "bytes32" } ], - "name": "BlockProposed", + "name": "BlobCached", "type": "event" }, { @@ -841,25 +604,6 @@ "name": "Initialized", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -905,19 +649,6 @@ "name": "ProvingPaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "paused", - "type": "bool" - } - ], - "name": "ProvingPaused", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1041,65 +772,6 @@ "name": "TransitionContested", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "signalRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "graffiti", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TaikoData.Transition", - "name": "tran", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "contester", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "contestBond", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "tier", - "type": "uint16" - } - ], - "name": "TransitionContested", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1162,82 +834,29 @@ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "signalRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "graffiti", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TaikoData.Transition", - "name": "tran", - "type": "tuple" - }, { "indexed": false, "internalType": "address", - "name": "prover", + "name": "account", "type": "address" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "validityBond", - "type": "uint96" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "tier", - "type": "uint16" } ], - "name": "TransitionProved", + "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "account", + "name": "implementation", "type": "address" } ], - "name": "Unpaused", + "name": "Upgraded", "type": "event" }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "addressManager", @@ -1561,25 +1180,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "getTaikoTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1821,19 +1421,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -1975,6 +1562,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "renounceOwnership", @@ -2112,6 +1712,37 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { diff --git a/packages/relayer/bindings/bridge/Bridge.go b/packages/relayer/bindings/bridge/Bridge.go index e363c41befe..c7c19837e5b 100644 --- a/packages/relayer/bindings/bridge/Bridge.go +++ b/packages/relayer/bindings/bridge/Bridge.go @@ -54,7 +54,7 @@ type IBridgeMessage struct { // BridgeMetaData contains all meta data concerning the Bridge contract. var BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"B_INVALID_CHAINID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_CONTEXT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_GAS_LIMIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_SIGNAL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_VALUE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NON_RETRIABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_RECALLED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_STATUS_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DestChainEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"MessageRecalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumBridge.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"MessageStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignalSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"context\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"}],\"internalType\":\"structIBridge.Context\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"hashMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"isDestChainEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"destBridge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"isMessageRecalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"recalled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"isMessageSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"messageStatus\",\"outputs\":[{\"internalType\":\"enumBridge.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextMessageId\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageFailed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"recallMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isLastAttempt\",\"type\":\"bool\"}],\"name\":\"retryMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"name\":\"B_INVALID_CHAINID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_CONTEXT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_GAS_LIMIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_SIGNAL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_VALUE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NON_RETRIABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_RECALLED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_STATUS_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"DestChainEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"MessageRecalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumBridge.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"MessageStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignalSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"context\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"}],\"internalType\":\"structIBridge.Context\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"hashMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"isDestChainEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"destBridge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"isMessageRecalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"recalled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"isMessageSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"messageStatus\",\"outputs\":[{\"internalType\":\"enumBridge.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextMessageId\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageFailed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveMessageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"recallMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isLastAttempt\",\"type\":\"bool\"}],\"name\":\"retryMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // BridgeABI is the input ABI used to generate the binding from. @@ -527,37 +527,6 @@ func (_Bridge *BridgeCallerSession) Paused() (bool, error) { return _Bridge.Contract.Paused(&_Bridge.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. -// -// Solidity: function pendingOwner() view returns(address) -func (_Bridge *BridgeCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Bridge.contract.Call(opts, &out, "pendingOwner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. -// -// Solidity: function pendingOwner() view returns(address) -func (_Bridge *BridgeSession) PendingOwner() (common.Address, error) { - return _Bridge.Contract.PendingOwner(&_Bridge.CallOpts) -} - -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. -// -// Solidity: function pendingOwner() view returns(address) -func (_Bridge *BridgeCallerSession) PendingOwner() (common.Address, error) { - return _Bridge.Contract.PendingOwner(&_Bridge.CallOpts) -} - // ProveMessageFailed is a free data retrieval call binding the contract method 0x625e5b7f. // // Solidity: function proveMessageFailed((uint128,address,uint64,uint64,address,address,address,uint256,uint256,uint256,bytes,string) message, bytes proof) view returns(bool) @@ -620,6 +589,37 @@ func (_Bridge *BridgeCallerSession) ProveMessageReceived(message IBridgeMessage, return _Bridge.Contract.ProveMessageReceived(&_Bridge.CallOpts, message, proof) } +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_Bridge *BridgeCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_Bridge *BridgeSession) ProxiableUUID() ([32]byte, error) { + return _Bridge.Contract.ProxiableUUID(&_Bridge.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_Bridge *BridgeCallerSession) ProxiableUUID() ([32]byte, error) { + return _Bridge.Contract.ProxiableUUID(&_Bridge.CallOpts) +} + // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. // // Solidity: function resolve(uint64 chainId, bytes32 name, bool allowZeroAddress) view returns(address addr) @@ -682,27 +682,6 @@ func (_Bridge *BridgeCallerSession) Resolve0(name [32]byte, allowZeroAddress boo return _Bridge.Contract.Resolve0(&_Bridge.CallOpts, name, allowZeroAddress) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_Bridge *BridgeTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_Bridge *BridgeSession) AcceptOwnership() (*types.Transaction, error) { - return _Bridge.Contract.AcceptOwnership(&_Bridge.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_Bridge *BridgeTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _Bridge.Contract.AcceptOwnership(&_Bridge.TransactOpts) -} - // Init is a paid mutator transaction binding the contract method 0x19ab453c. // // Solidity: function init(address _addressManager) returns() @@ -892,6 +871,48 @@ func (_Bridge *BridgeTransactorSession) Unpause() (*types.Transaction, error) { return _Bridge.Contract.Unpause(&_Bridge.TransactOpts) } +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_Bridge *BridgeTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_Bridge *BridgeSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeTo(&_Bridge.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_Bridge *BridgeTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeTo(&_Bridge.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_Bridge *BridgeTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_Bridge *BridgeSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeToAndCall(&_Bridge.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_Bridge *BridgeTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _Bridge.Contract.UpgradeToAndCall(&_Bridge.TransactOpts, newImplementation, data) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -906,11 +927,290 @@ func (_Bridge *BridgeSession) Receive() (*types.Transaction, error) { return _Bridge.Contract.Receive(&_Bridge.TransactOpts) } -// Receive is a paid mutator transaction binding the contract receive function. +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Bridge *BridgeTransactorSession) Receive() (*types.Transaction, error) { + return _Bridge.Contract.Receive(&_Bridge.TransactOpts) +} + +// BridgeAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the Bridge contract. +type BridgeAdminChangedIterator struct { + Event *BridgeAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeAdminChanged represents a AdminChanged event raised by the Bridge contract. +type BridgeAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Bridge *BridgeFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*BridgeAdminChangedIterator, error) { + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &BridgeAdminChangedIterator{contract: _Bridge.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Bridge *BridgeFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *BridgeAdminChanged) (event.Subscription, error) { + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeAdminChanged) + if err := _Bridge.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Bridge *BridgeFilterer) ParseAdminChanged(log types.Log) (*BridgeAdminChanged, error) { + event := new(BridgeAdminChanged) + if err := _Bridge.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the Bridge contract. +type BridgeBeaconUpgradedIterator struct { + Event *BridgeBeaconUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeBeaconUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeBeaconUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeBeaconUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeBeaconUpgraded represents a BeaconUpgraded event raised by the Bridge contract. +type BridgeBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_Bridge *BridgeFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*BridgeBeaconUpgradedIterator, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return &BridgeBeaconUpgradedIterator{contract: _Bridge.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil +} + +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_Bridge *BridgeFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *BridgeBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeBeaconUpgraded) + if err := _Bridge.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: receive() payable returns() -func (_Bridge *BridgeTransactorSession) Receive() (*types.Transaction, error) { - return _Bridge.Contract.Receive(&_Bridge.TransactOpts) +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_Bridge *BridgeFilterer) ParseBeaconUpgraded(log types.Log) (*BridgeBeaconUpgraded, error) { + event := new(BridgeBeaconUpgraded) + if err := _Bridge.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } // BridgeDestChainEnabledIterator is returned from FilterDestChainEnabled and is used to iterate over the raw logs and unpacked data for DestChainEnabled events raised by the Bridge contract. @@ -1626,159 +1926,6 @@ func (_Bridge *BridgeFilterer) ParseMessageStatusChanged(log types.Log) (*Bridge return event, nil } -// BridgeOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the Bridge contract. -type BridgeOwnershipTransferStartedIterator struct { - Event *BridgeOwnershipTransferStarted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BridgeOwnershipTransferStartedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BridgeOwnershipTransferStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BridgeOwnershipTransferStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeOwnershipTransferStartedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BridgeOwnershipTransferStartedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BridgeOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the Bridge contract. -type BridgeOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_Bridge *BridgeFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BridgeOwnershipTransferStartedIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Bridge.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &BridgeOwnershipTransferStartedIterator{contract: _Bridge.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_Bridge *BridgeFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *BridgeOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Bridge.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BridgeOwnershipTransferStarted) - if err := _Bridge.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_Bridge *BridgeFilterer) ParseOwnershipTransferStarted(log types.Log) (*BridgeOwnershipTransferStarted, error) { - event := new(BridgeOwnershipTransferStarted) - if err := _Bridge.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // BridgeOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Bridge contract. type BridgeOwnershipTransferredIterator struct { Event *BridgeOwnershipTransferred // Event containing the contract specifics and raw log @@ -2344,3 +2491,147 @@ func (_Bridge *BridgeFilterer) ParseUnpaused(log types.Log) (*BridgeUnpaused, er event.Raw = log return event, nil } + +// BridgeUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Bridge contract. +type BridgeUpgradedIterator struct { + Event *BridgeUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeUpgraded represents a Upgraded event raised by the Bridge contract. +type BridgeUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Bridge *BridgeFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*BridgeUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &BridgeUpgradedIterator{contract: _Bridge.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Bridge *BridgeFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *BridgeUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeUpgraded) + if err := _Bridge.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Bridge *BridgeFilterer) ParseUpgraded(log types.Log) (*BridgeUpgraded, error) { + event := new(BridgeUpgraded) + if err := _Bridge.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/relayer/bindings/erc1155vault/ERC1155Vault.go b/packages/relayer/bindings/erc1155vault/ERC1155Vault.go index 059fd779b1a..92700566a88 100644 --- a/packages/relayer/bindings/erc1155vault/ERC1155Vault.go +++ b/packages/relayer/bindings/erc1155vault/ERC1155Vault.go @@ -68,7 +68,7 @@ type IBridgeMessage struct { // ERC1155VaultMetaData contains all meta data concerning the ERC1155Vault contract. var ERC1155VaultMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INTERFACE_NOT_SUPPORTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_FROM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_SRC_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MAX_TOKEN_PER_TXN_EXCEEDED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MESSAGE_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MESSAGE_RELEASED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_TOKEN_ARRAY_MISMATCH\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"}],\"name\":\"BridgedTokenDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ERC1155_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC721_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TOKEN_PER_TXN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bridgedToCanonical\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canonicalToBridged\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"onMessageRecalled\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.CanonicalNFT\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"receiveToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.BridgeTransferOp\",\"name\":\"op\",\"type\":\"tuple\"}],\"name\":\"sendToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NULL_IMPL_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INTERFACE_NOT_SUPPORTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_SRC_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MAX_TOKEN_PER_TXN_EXCEEDED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_TOKEN_ARRAY_MISMATCH\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"}],\"name\":\"BridgedTokenDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ERC1155_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC721_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TOKEN_PER_TXN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bridgedToCanonical\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canonicalToBridged\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"onMessageRecalled\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.CanonicalNFT\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"receiveToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.BridgeTransferOp\",\"name\":\"op\",\"type\":\"tuple\"}],\"name\":\"sendToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // ERC1155VaultABI is the input ABI used to generate the binding from. @@ -582,35 +582,35 @@ func (_ERC1155Vault *ERC1155VaultCallerSession) Paused() (bool, error) { return _ERC1155Vault.Contract.Paused(&_ERC1155Vault.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC1155Vault *ERC1155VaultCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC1155Vault *ERC1155VaultCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ERC1155Vault.contract.Call(opts, &out, "pendingOwner") + err := _ERC1155Vault.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC1155Vault *ERC1155VaultSession) PendingOwner() (common.Address, error) { - return _ERC1155Vault.Contract.PendingOwner(&_ERC1155Vault.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC1155Vault *ERC1155VaultSession) ProxiableUUID() ([32]byte, error) { + return _ERC1155Vault.Contract.ProxiableUUID(&_ERC1155Vault.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC1155Vault *ERC1155VaultCallerSession) PendingOwner() (common.Address, error) { - return _ERC1155Vault.Contract.PendingOwner(&_ERC1155Vault.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC1155Vault *ERC1155VaultCallerSession) ProxiableUUID() ([32]byte, error) { + return _ERC1155Vault.Contract.ProxiableUUID(&_ERC1155Vault.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -706,27 +706,6 @@ func (_ERC1155Vault *ERC1155VaultCallerSession) SupportsInterface(interfaceId [4 return _ERC1155Vault.Contract.SupportsInterface(&_ERC1155Vault.CallOpts, interfaceId) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_ERC1155Vault *ERC1155VaultTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC1155Vault.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_ERC1155Vault *ERC1155VaultSession) AcceptOwnership() (*types.Transaction, error) { - return _ERC1155Vault.Contract.AcceptOwnership(&_ERC1155Vault.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_ERC1155Vault *ERC1155VaultTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _ERC1155Vault.Contract.AcceptOwnership(&_ERC1155Vault.TransactOpts) -} - // Init is a paid mutator transaction binding the contract method 0x19ab453c. // // Solidity: function init(address addressManager) returns() @@ -895,9 +874,51 @@ func (_ERC1155Vault *ERC1155VaultTransactorSession) Unpause() (*types.Transactio return _ERC1155Vault.Contract.Unpause(&_ERC1155Vault.TransactOpts) } -// ERC1155VaultBridgedTokenDeployedIterator is returned from FilterBridgedTokenDeployed and is used to iterate over the raw logs and unpacked data for BridgedTokenDeployed events raised by the ERC1155Vault contract. -type ERC1155VaultBridgedTokenDeployedIterator struct { - Event *ERC1155VaultBridgedTokenDeployed // Event containing the contract specifics and raw log +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC1155Vault *ERC1155VaultTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _ERC1155Vault.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC1155Vault *ERC1155VaultSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _ERC1155Vault.Contract.UpgradeTo(&_ERC1155Vault.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC1155Vault *ERC1155VaultTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _ERC1155Vault.Contract.UpgradeTo(&_ERC1155Vault.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC1155Vault *ERC1155VaultTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC1155Vault.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC1155Vault *ERC1155VaultSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC1155Vault.Contract.UpgradeToAndCall(&_ERC1155Vault.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC1155Vault *ERC1155VaultTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC1155Vault.Contract.UpgradeToAndCall(&_ERC1155Vault.TransactOpts, newImplementation, data) +} + +// ERC1155VaultAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the ERC1155Vault contract. +type ERC1155VaultAdminChangedIterator struct { + Event *ERC1155VaultAdminChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -911,7 +932,7 @@ type ERC1155VaultBridgedTokenDeployedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ERC1155VaultBridgedTokenDeployedIterator) Next() bool { +func (it *ERC1155VaultAdminChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -920,7 +941,7 @@ func (it *ERC1155VaultBridgedTokenDeployedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC1155VaultBridgedTokenDeployed) + it.Event = new(ERC1155VaultAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -935,7 +956,7 @@ func (it *ERC1155VaultBridgedTokenDeployedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC1155VaultBridgedTokenDeployed) + it.Event = new(ERC1155VaultAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -951,71 +972,42 @@ func (it *ERC1155VaultBridgedTokenDeployedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC1155VaultBridgedTokenDeployedIterator) Error() error { +func (it *ERC1155VaultAdminChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC1155VaultBridgedTokenDeployedIterator) Close() error { +func (it *ERC1155VaultAdminChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC1155VaultBridgedTokenDeployed represents a BridgedTokenDeployed event raised by the ERC1155Vault contract. -type ERC1155VaultBridgedTokenDeployed struct { - ChainId uint64 - Ctoken common.Address - Btoken common.Address - CtokenSymbol string - CtokenName string - Raw types.Log // Blockchain specific contextual infos +// ERC1155VaultAdminChanged represents a AdminChanged event raised by the ERC1155Vault contract. +type ERC1155VaultAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBridgedTokenDeployed is a free log retrieval operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) -func (_ERC1155Vault *ERC1155VaultFilterer) FilterBridgedTokenDeployed(opts *bind.FilterOpts, chainId []uint64, ctoken []common.Address, btoken []common.Address) (*ERC1155VaultBridgedTokenDeployedIterator, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC1155Vault *ERC1155VaultFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*ERC1155VaultAdminChangedIterator, error) { - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - var ctokenRule []interface{} - for _, ctokenItem := range ctoken { - ctokenRule = append(ctokenRule, ctokenItem) - } - var btokenRule []interface{} - for _, btokenItem := range btoken { - btokenRule = append(btokenRule, btokenItem) - } - - logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) + logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "AdminChanged") if err != nil { return nil, err } - return &ERC1155VaultBridgedTokenDeployedIterator{contract: _ERC1155Vault.contract, event: "BridgedTokenDeployed", logs: logs, sub: sub}, nil + return &ERC1155VaultAdminChangedIterator{contract: _ERC1155Vault.contract, event: "AdminChanged", logs: logs, sub: sub}, nil } -// WatchBridgedTokenDeployed is a free log subscription operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) -func (_ERC1155Vault *ERC1155VaultFilterer) WatchBridgedTokenDeployed(opts *bind.WatchOpts, sink chan<- *ERC1155VaultBridgedTokenDeployed, chainId []uint64, ctoken []common.Address, btoken []common.Address) (event.Subscription, error) { - - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - var ctokenRule []interface{} - for _, ctokenItem := range ctoken { - ctokenRule = append(ctokenRule, ctokenItem) - } - var btokenRule []interface{} - for _, btokenItem := range btoken { - btokenRule = append(btokenRule, btokenItem) - } +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC1155Vault *ERC1155VaultFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *ERC1155VaultAdminChanged) (event.Subscription, error) { - logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) + logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "AdminChanged") if err != nil { return nil, err } @@ -1025,8 +1017,8 @@ func (_ERC1155Vault *ERC1155VaultFilterer) WatchBridgedTokenDeployed(opts *bind. select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC1155VaultBridgedTokenDeployed) - if err := _ERC1155Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { + event := new(ERC1155VaultAdminChanged) + if err := _ERC1155Vault.contract.UnpackLog(event, "AdminChanged", log); err != nil { return err } event.Raw = log @@ -1047,21 +1039,21 @@ func (_ERC1155Vault *ERC1155VaultFilterer) WatchBridgedTokenDeployed(opts *bind. }), nil } -// ParseBridgedTokenDeployed is a log parse operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) -func (_ERC1155Vault *ERC1155VaultFilterer) ParseBridgedTokenDeployed(log types.Log) (*ERC1155VaultBridgedTokenDeployed, error) { - event := new(ERC1155VaultBridgedTokenDeployed) - if err := _ERC1155Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC1155Vault *ERC1155VaultFilterer) ParseAdminChanged(log types.Log) (*ERC1155VaultAdminChanged, error) { + event := new(ERC1155VaultAdminChanged) + if err := _ERC1155Vault.contract.UnpackLog(event, "AdminChanged", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC1155VaultInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC1155Vault contract. -type ERC1155VaultInitializedIterator struct { - Event *ERC1155VaultInitialized // Event containing the contract specifics and raw log +// ERC1155VaultBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the ERC1155Vault contract. +type ERC1155VaultBeaconUpgradedIterator struct { + Event *ERC1155VaultBeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1075,7 +1067,7 @@ type ERC1155VaultInitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ERC1155VaultInitializedIterator) Next() bool { +func (it *ERC1155VaultBeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1084,7 +1076,7 @@ func (it *ERC1155VaultInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC1155VaultInitialized) + it.Event = new(ERC1155VaultBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1099,7 +1091,7 @@ func (it *ERC1155VaultInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC1155VaultInitialized) + it.Event = new(ERC1155VaultBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1115,41 +1107,51 @@ func (it *ERC1155VaultInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC1155VaultInitializedIterator) Error() error { +func (it *ERC1155VaultBeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC1155VaultInitializedIterator) Close() error { +func (it *ERC1155VaultBeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC1155VaultInitialized represents a Initialized event raised by the ERC1155Vault contract. -type ERC1155VaultInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// ERC1155VaultBeaconUpgraded represents a BeaconUpgraded event raised by the ERC1155Vault contract. +type ERC1155VaultBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_ERC1155Vault *ERC1155VaultFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC1155VaultInitializedIterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC1155Vault *ERC1155VaultFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*ERC1155VaultBeaconUpgradedIterator, error) { - logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &ERC1155VaultInitializedIterator{contract: _ERC1155Vault.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &ERC1155VaultBeaconUpgradedIterator{contract: _ERC1155Vault.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_ERC1155Vault *ERC1155VaultFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC1155VaultInitialized) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC1155Vault *ERC1155VaultFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *ERC1155VaultBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -1159,8 +1161,8 @@ func (_ERC1155Vault *ERC1155VaultFilterer) WatchInitialized(opts *bind.WatchOpts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC1155VaultInitialized) - if err := _ERC1155Vault.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(ERC1155VaultBeaconUpgraded) + if err := _ERC1155Vault.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -1181,21 +1183,21 @@ func (_ERC1155Vault *ERC1155VaultFilterer) WatchInitialized(opts *bind.WatchOpts }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_ERC1155Vault *ERC1155VaultFilterer) ParseInitialized(log types.Log) (*ERC1155VaultInitialized, error) { - event := new(ERC1155VaultInitialized) - if err := _ERC1155Vault.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC1155Vault *ERC1155VaultFilterer) ParseBeaconUpgraded(log types.Log) (*ERC1155VaultBeaconUpgraded, error) { + event := new(ERC1155VaultBeaconUpgraded) + if err := _ERC1155Vault.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC1155VaultOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the ERC1155Vault contract. -type ERC1155VaultOwnershipTransferStartedIterator struct { - Event *ERC1155VaultOwnershipTransferStarted // Event containing the contract specifics and raw log +// ERC1155VaultBridgedTokenDeployedIterator is returned from FilterBridgedTokenDeployed and is used to iterate over the raw logs and unpacked data for BridgedTokenDeployed events raised by the ERC1155Vault contract. +type ERC1155VaultBridgedTokenDeployedIterator struct { + Event *ERC1155VaultBridgedTokenDeployed // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1209,7 +1211,7 @@ type ERC1155VaultOwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ERC1155VaultOwnershipTransferStartedIterator) Next() bool { +func (it *ERC1155VaultBridgedTokenDeployedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1218,7 +1220,7 @@ func (it *ERC1155VaultOwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC1155VaultOwnershipTransferStarted) + it.Event = new(ERC1155VaultBridgedTokenDeployed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1233,7 +1235,7 @@ func (it *ERC1155VaultOwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC1155VaultOwnershipTransferStarted) + it.Event = new(ERC1155VaultBridgedTokenDeployed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1249,60 +1251,71 @@ func (it *ERC1155VaultOwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC1155VaultOwnershipTransferStartedIterator) Error() error { +func (it *ERC1155VaultBridgedTokenDeployedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC1155VaultOwnershipTransferStartedIterator) Close() error { +func (it *ERC1155VaultBridgedTokenDeployedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC1155VaultOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the ERC1155Vault contract. -type ERC1155VaultOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// ERC1155VaultBridgedTokenDeployed represents a BridgedTokenDeployed event raised by the ERC1155Vault contract. +type ERC1155VaultBridgedTokenDeployed struct { + ChainId uint64 + Ctoken common.Address + Btoken common.Address + CtokenSymbol string + CtokenName string + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterBridgedTokenDeployed is a free log retrieval operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC1155Vault *ERC1155VaultFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ERC1155VaultOwnershipTransferStartedIterator, error) { +// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) +func (_ERC1155Vault *ERC1155VaultFilterer) FilterBridgedTokenDeployed(opts *bind.FilterOpts, chainId []uint64, ctoken []common.Address, btoken []common.Address) (*ERC1155VaultBridgedTokenDeployedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var ctokenRule []interface{} + for _, ctokenItem := range ctoken { + ctokenRule = append(ctokenRule, ctokenItem) + } + var btokenRule []interface{} + for _, btokenItem := range btoken { + btokenRule = append(btokenRule, btokenItem) } - logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) if err != nil { return nil, err } - return &ERC1155VaultOwnershipTransferStartedIterator{contract: _ERC1155Vault.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &ERC1155VaultBridgedTokenDeployedIterator{contract: _ERC1155Vault.contract, event: "BridgedTokenDeployed", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchBridgedTokenDeployed is a free log subscription operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC1155Vault *ERC1155VaultFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *ERC1155VaultOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) +func (_ERC1155Vault *ERC1155VaultFilterer) WatchBridgedTokenDeployed(opts *bind.WatchOpts, sink chan<- *ERC1155VaultBridgedTokenDeployed, chainId []uint64, ctoken []common.Address, btoken []common.Address) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var ctokenRule []interface{} + for _, ctokenItem := range ctoken { + ctokenRule = append(ctokenRule, ctokenItem) + } + var btokenRule []interface{} + for _, btokenItem := range btoken { + btokenRule = append(btokenRule, btokenItem) } - logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) if err != nil { return nil, err } @@ -1312,8 +1325,8 @@ func (_ERC1155Vault *ERC1155VaultFilterer) WatchOwnershipTransferStarted(opts *b select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC1155VaultOwnershipTransferStarted) - if err := _ERC1155Vault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(ERC1155VaultBridgedTokenDeployed) + if err := _ERC1155Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { return err } event.Raw = log @@ -1334,12 +1347,146 @@ func (_ERC1155Vault *ERC1155VaultFilterer) WatchOwnershipTransferStarted(opts *b }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseBridgedTokenDeployed is a log parse operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC1155Vault *ERC1155VaultFilterer) ParseOwnershipTransferStarted(log types.Log) (*ERC1155VaultOwnershipTransferStarted, error) { - event := new(ERC1155VaultOwnershipTransferStarted) - if err := _ERC1155Vault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) +func (_ERC1155Vault *ERC1155VaultFilterer) ParseBridgedTokenDeployed(log types.Log) (*ERC1155VaultBridgedTokenDeployed, error) { + event := new(ERC1155VaultBridgedTokenDeployed) + if err := _ERC1155Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC1155VaultInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC1155Vault contract. +type ERC1155VaultInitializedIterator struct { + Event *ERC1155VaultInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC1155VaultInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC1155VaultInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC1155VaultInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC1155VaultInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC1155VaultInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC1155VaultInitialized represents a Initialized event raised by the ERC1155Vault contract. +type ERC1155VaultInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC1155Vault *ERC1155VaultFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC1155VaultInitializedIterator, error) { + + logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC1155VaultInitializedIterator{contract: _ERC1155Vault.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC1155Vault *ERC1155VaultFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC1155VaultInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC1155VaultInitialized) + if err := _ERC1155Vault.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC1155Vault *ERC1155VaultFilterer) ParseInitialized(log types.Log) (*ERC1155VaultInitialized, error) { + event := new(ERC1155VaultInitialized) + if err := _ERC1155Vault.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log @@ -2254,3 +2401,147 @@ func (_ERC1155Vault *ERC1155VaultFilterer) ParseUnpaused(log types.Log) (*ERC115 event.Raw = log return event, nil } + +// ERC1155VaultUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC1155Vault contract. +type ERC1155VaultUpgradedIterator struct { + Event *ERC1155VaultUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC1155VaultUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC1155VaultUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC1155VaultUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC1155VaultUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC1155VaultUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC1155VaultUpgraded represents a Upgraded event raised by the ERC1155Vault contract. +type ERC1155VaultUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1155Vault *ERC1155VaultFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC1155VaultUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC1155Vault.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC1155VaultUpgradedIterator{contract: _ERC1155Vault.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1155Vault *ERC1155VaultFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC1155VaultUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC1155Vault.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC1155VaultUpgraded) + if err := _ERC1155Vault.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC1155Vault *ERC1155VaultFilterer) ParseUpgraded(log types.Log) (*ERC1155VaultUpgraded, error) { + event := new(ERC1155VaultUpgraded) + if err := _ERC1155Vault.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/relayer/bindings/erc20vault/ERC20Vault.go b/packages/relayer/bindings/erc20vault/ERC20Vault.go index 8b937ab0f01..0878c53bafd 100644 --- a/packages/relayer/bindings/erc20vault/ERC20Vault.go +++ b/packages/relayer/bindings/erc20vault/ERC20Vault.go @@ -68,7 +68,7 @@ type IBridgeMessage struct { // ERC20VaultMetaData contains all meta data concerning the ERC20Vault contract. var ERC20VaultMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_FROM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_SRC_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MESSAGE_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MESSAGE_RELEASED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_PERMISSION_DENIED\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"srcChainId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ctokenDecimal\",\"type\":\"uint8\"}],\"name\":\"BridgedTokenDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bridgedToCanonical\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canonicalToBridged\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"onMessageRecalled\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structERC20Vault.CanonicalERC20\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structERC20Vault.BridgeTransferOp\",\"name\":\"op\",\"type\":\"tuple\"}],\"name\":\"sendToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NULL_IMPL_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_BTOKEN_BLACKLISTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_CTOKEN_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_NEW_BTOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_NOT_SAME_OWNER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_PERMISSION_DENIED\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"srcChainId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"btokenOld\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"btokenNew\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ctokenDecimal\",\"type\":\"uint8\"}],\"name\":\"BridgedTokenChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"srcChainId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ctokenDecimal\",\"type\":\"uint8\"}],\"name\":\"BridgedTokenDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bridgedToCanonical\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"}],\"name\":\"btokenBlacklist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"blacklisted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canonicalToBridged\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structERC20Vault.CanonicalERC20\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"btokenNew\",\"type\":\"address\"}],\"name\":\"changeBridgedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"btokenOld\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"onMessageRecalled\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structERC20Vault.CanonicalERC20\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structERC20Vault.BridgeTransferOp\",\"name\":\"op\",\"type\":\"tuple\"}],\"name\":\"sendToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // ERC20VaultABI is the input ABI used to generate the binding from. @@ -308,6 +308,37 @@ func (_ERC20Vault *ERC20VaultCallerSession) BridgedToCanonical(arg0 common.Addre return _ERC20Vault.Contract.BridgedToCanonical(&_ERC20Vault.CallOpts, arg0) } +// BtokenBlacklist is a free data retrieval call binding the contract method 0xcaec3e4e. +// +// Solidity: function btokenBlacklist(address btoken) view returns(bool blacklisted) +func (_ERC20Vault *ERC20VaultCaller) BtokenBlacklist(opts *bind.CallOpts, btoken common.Address) (bool, error) { + var out []interface{} + err := _ERC20Vault.contract.Call(opts, &out, "btokenBlacklist", btoken) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// BtokenBlacklist is a free data retrieval call binding the contract method 0xcaec3e4e. +// +// Solidity: function btokenBlacklist(address btoken) view returns(bool blacklisted) +func (_ERC20Vault *ERC20VaultSession) BtokenBlacklist(btoken common.Address) (bool, error) { + return _ERC20Vault.Contract.BtokenBlacklist(&_ERC20Vault.CallOpts, btoken) +} + +// BtokenBlacklist is a free data retrieval call binding the contract method 0xcaec3e4e. +// +// Solidity: function btokenBlacklist(address btoken) view returns(bool blacklisted) +func (_ERC20Vault *ERC20VaultCallerSession) BtokenBlacklist(btoken common.Address) (bool, error) { + return _ERC20Vault.Contract.BtokenBlacklist(&_ERC20Vault.CallOpts, btoken) +} + // CanonicalToBridged is a free data retrieval call binding the contract method 0x67090ccf. // // Solidity: function canonicalToBridged(uint256 , address ) view returns(address) @@ -432,35 +463,35 @@ func (_ERC20Vault *ERC20VaultCallerSession) Paused() (bool, error) { return _ERC20Vault.Contract.Paused(&_ERC20Vault.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC20Vault *ERC20VaultCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20Vault *ERC20VaultCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ERC20Vault.contract.Call(opts, &out, "pendingOwner") + err := _ERC20Vault.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC20Vault *ERC20VaultSession) PendingOwner() (common.Address, error) { - return _ERC20Vault.Contract.PendingOwner(&_ERC20Vault.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20Vault *ERC20VaultSession) ProxiableUUID() ([32]byte, error) { + return _ERC20Vault.Contract.ProxiableUUID(&_ERC20Vault.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC20Vault *ERC20VaultCallerSession) PendingOwner() (common.Address, error) { - return _ERC20Vault.Contract.PendingOwner(&_ERC20Vault.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC20Vault *ERC20VaultCallerSession) ProxiableUUID() ([32]byte, error) { + return _ERC20Vault.Contract.ProxiableUUID(&_ERC20Vault.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -556,25 +587,25 @@ func (_ERC20Vault *ERC20VaultCallerSession) SupportsInterface(interfaceId [4]byt return _ERC20Vault.Contract.SupportsInterface(&_ERC20Vault.CallOpts, interfaceId) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// ChangeBridgedToken is a paid mutator transaction binding the contract method 0x0ecd8be9. // -// Solidity: function acceptOwnership() returns() -func (_ERC20Vault *ERC20VaultTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC20Vault.contract.Transact(opts, "acceptOwnership") +// Solidity: function changeBridgedToken((uint64,address,uint8,string,string) ctoken, address btokenNew) returns(address btokenOld) +func (_ERC20Vault *ERC20VaultTransactor) ChangeBridgedToken(opts *bind.TransactOpts, ctoken ERC20VaultCanonicalERC20, btokenNew common.Address) (*types.Transaction, error) { + return _ERC20Vault.contract.Transact(opts, "changeBridgedToken", ctoken, btokenNew) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// ChangeBridgedToken is a paid mutator transaction binding the contract method 0x0ecd8be9. // -// Solidity: function acceptOwnership() returns() -func (_ERC20Vault *ERC20VaultSession) AcceptOwnership() (*types.Transaction, error) { - return _ERC20Vault.Contract.AcceptOwnership(&_ERC20Vault.TransactOpts) +// Solidity: function changeBridgedToken((uint64,address,uint8,string,string) ctoken, address btokenNew) returns(address btokenOld) +func (_ERC20Vault *ERC20VaultSession) ChangeBridgedToken(ctoken ERC20VaultCanonicalERC20, btokenNew common.Address) (*types.Transaction, error) { + return _ERC20Vault.Contract.ChangeBridgedToken(&_ERC20Vault.TransactOpts, ctoken, btokenNew) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// ChangeBridgedToken is a paid mutator transaction binding the contract method 0x0ecd8be9. // -// Solidity: function acceptOwnership() returns() -func (_ERC20Vault *ERC20VaultTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _ERC20Vault.Contract.AcceptOwnership(&_ERC20Vault.TransactOpts) +// Solidity: function changeBridgedToken((uint64,address,uint8,string,string) ctoken, address btokenNew) returns(address btokenOld) +func (_ERC20Vault *ERC20VaultTransactorSession) ChangeBridgedToken(ctoken ERC20VaultCanonicalERC20, btokenNew common.Address) (*types.Transaction, error) { + return _ERC20Vault.Contract.ChangeBridgedToken(&_ERC20Vault.TransactOpts, ctoken, btokenNew) } // Init is a paid mutator transaction binding the contract method 0x19ab453c. @@ -738,11 +769,490 @@ func (_ERC20Vault *ERC20VaultSession) Unpause() (*types.Transaction, error) { return _ERC20Vault.Contract.Unpause(&_ERC20Vault.TransactOpts) } -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20Vault *ERC20VaultTransactorSession) Unpause() (*types.Transaction, error) { + return _ERC20Vault.Contract.Unpause(&_ERC20Vault.TransactOpts) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC20Vault *ERC20VaultTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _ERC20Vault.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC20Vault *ERC20VaultSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _ERC20Vault.Contract.UpgradeTo(&_ERC20Vault.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC20Vault *ERC20VaultTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _ERC20Vault.Contract.UpgradeTo(&_ERC20Vault.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20Vault *ERC20VaultTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20Vault.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20Vault *ERC20VaultSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20Vault.Contract.UpgradeToAndCall(&_ERC20Vault.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC20Vault *ERC20VaultTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC20Vault.Contract.UpgradeToAndCall(&_ERC20Vault.TransactOpts, newImplementation, data) +} + +// ERC20VaultAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the ERC20Vault contract. +type ERC20VaultAdminChangedIterator struct { + Event *ERC20VaultAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20VaultAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20VaultAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20VaultAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20VaultAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20VaultAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20VaultAdminChanged represents a AdminChanged event raised by the ERC20Vault contract. +type ERC20VaultAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC20Vault *ERC20VaultFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*ERC20VaultAdminChangedIterator, error) { + + logs, sub, err := _ERC20Vault.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &ERC20VaultAdminChangedIterator{contract: _ERC20Vault.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC20Vault *ERC20VaultFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *ERC20VaultAdminChanged) (event.Subscription, error) { + + logs, sub, err := _ERC20Vault.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20VaultAdminChanged) + if err := _ERC20Vault.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC20Vault *ERC20VaultFilterer) ParseAdminChanged(log types.Log) (*ERC20VaultAdminChanged, error) { + event := new(ERC20VaultAdminChanged) + if err := _ERC20Vault.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20VaultBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the ERC20Vault contract. +type ERC20VaultBeaconUpgradedIterator struct { + Event *ERC20VaultBeaconUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20VaultBeaconUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20VaultBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20VaultBeaconUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20VaultBeaconUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20VaultBeaconUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20VaultBeaconUpgraded represents a BeaconUpgraded event raised by the ERC20Vault contract. +type ERC20VaultBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC20Vault *ERC20VaultFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*ERC20VaultBeaconUpgradedIterator, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC20Vault.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return &ERC20VaultBeaconUpgradedIterator{contract: _ERC20Vault.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil +} + +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC20Vault *ERC20VaultFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *ERC20VaultBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC20Vault.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20VaultBeaconUpgraded) + if err := _ERC20Vault.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. +// +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC20Vault *ERC20VaultFilterer) ParseBeaconUpgraded(log types.Log) (*ERC20VaultBeaconUpgraded, error) { + event := new(ERC20VaultBeaconUpgraded) + if err := _ERC20Vault.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20VaultBridgedTokenChangedIterator is returned from FilterBridgedTokenChanged and is used to iterate over the raw logs and unpacked data for BridgedTokenChanged events raised by the ERC20Vault contract. +type ERC20VaultBridgedTokenChangedIterator struct { + Event *ERC20VaultBridgedTokenChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20VaultBridgedTokenChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20VaultBridgedTokenChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20VaultBridgedTokenChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20VaultBridgedTokenChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20VaultBridgedTokenChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20VaultBridgedTokenChanged represents a BridgedTokenChanged event raised by the ERC20Vault contract. +type ERC20VaultBridgedTokenChanged struct { + SrcChainId *big.Int + Ctoken common.Address + BtokenOld common.Address + BtokenNew common.Address + CtokenSymbol string + CtokenName string + CtokenDecimal uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgedTokenChanged is a free log retrieval operation binding the contract event 0x031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d. +// +// Solidity: event BridgedTokenChanged(uint256 indexed srcChainId, address indexed ctoken, address btokenOld, address btokenNew, string ctokenSymbol, string ctokenName, uint8 ctokenDecimal) +func (_ERC20Vault *ERC20VaultFilterer) FilterBridgedTokenChanged(opts *bind.FilterOpts, srcChainId []*big.Int, ctoken []common.Address) (*ERC20VaultBridgedTokenChangedIterator, error) { + + var srcChainIdRule []interface{} + for _, srcChainIdItem := range srcChainId { + srcChainIdRule = append(srcChainIdRule, srcChainIdItem) + } + var ctokenRule []interface{} + for _, ctokenItem := range ctoken { + ctokenRule = append(ctokenRule, ctokenItem) + } + + logs, sub, err := _ERC20Vault.contract.FilterLogs(opts, "BridgedTokenChanged", srcChainIdRule, ctokenRule) + if err != nil { + return nil, err + } + return &ERC20VaultBridgedTokenChangedIterator{contract: _ERC20Vault.contract, event: "BridgedTokenChanged", logs: logs, sub: sub}, nil +} + +// WatchBridgedTokenChanged is a free log subscription operation binding the contract event 0x031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d. +// +// Solidity: event BridgedTokenChanged(uint256 indexed srcChainId, address indexed ctoken, address btokenOld, address btokenNew, string ctokenSymbol, string ctokenName, uint8 ctokenDecimal) +func (_ERC20Vault *ERC20VaultFilterer) WatchBridgedTokenChanged(opts *bind.WatchOpts, sink chan<- *ERC20VaultBridgedTokenChanged, srcChainId []*big.Int, ctoken []common.Address) (event.Subscription, error) { + + var srcChainIdRule []interface{} + for _, srcChainIdItem := range srcChainId { + srcChainIdRule = append(srcChainIdRule, srcChainIdItem) + } + var ctokenRule []interface{} + for _, ctokenItem := range ctoken { + ctokenRule = append(ctokenRule, ctokenItem) + } + + logs, sub, err := _ERC20Vault.contract.WatchLogs(opts, "BridgedTokenChanged", srcChainIdRule, ctokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20VaultBridgedTokenChanged) + if err := _ERC20Vault.contract.UnpackLog(event, "BridgedTokenChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgedTokenChanged is a log parse operation binding the contract event 0x031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d. // -// Solidity: function unpause() returns() -func (_ERC20Vault *ERC20VaultTransactorSession) Unpause() (*types.Transaction, error) { - return _ERC20Vault.Contract.Unpause(&_ERC20Vault.TransactOpts) +// Solidity: event BridgedTokenChanged(uint256 indexed srcChainId, address indexed ctoken, address btokenOld, address btokenNew, string ctokenSymbol, string ctokenName, uint8 ctokenDecimal) +func (_ERC20Vault *ERC20VaultFilterer) ParseBridgedTokenChanged(log types.Log) (*ERC20VaultBridgedTokenChanged, error) { + event := new(ERC20VaultBridgedTokenChanged) + if err := _ERC20Vault.contract.UnpackLog(event, "BridgedTokenChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } // ERC20VaultBridgedTokenDeployedIterator is returned from FilterBridgedTokenDeployed and is used to iterate over the raw logs and unpacked data for BridgedTokenDeployed events raised by the ERC20Vault contract. @@ -1044,159 +1554,6 @@ func (_ERC20Vault *ERC20VaultFilterer) ParseInitialized(log types.Log) (*ERC20Va return event, nil } -// ERC20VaultOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the ERC20Vault contract. -type ERC20VaultOwnershipTransferStartedIterator struct { - Event *ERC20VaultOwnershipTransferStarted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ERC20VaultOwnershipTransferStartedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ERC20VaultOwnershipTransferStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ERC20VaultOwnershipTransferStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20VaultOwnershipTransferStartedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20VaultOwnershipTransferStartedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20VaultOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the ERC20Vault contract. -type ERC20VaultOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC20Vault *ERC20VaultFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ERC20VaultOwnershipTransferStartedIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _ERC20Vault.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &ERC20VaultOwnershipTransferStartedIterator{contract: _ERC20Vault.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC20Vault *ERC20VaultFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *ERC20VaultOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _ERC20Vault.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ERC20VaultOwnershipTransferStarted) - if err := _ERC20Vault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. -// -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC20Vault *ERC20VaultFilterer) ParseOwnershipTransferStarted(log types.Log) (*ERC20VaultOwnershipTransferStarted, error) { - event := new(ERC20VaultOwnershipTransferStarted) - if err := _ERC20Vault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // ERC20VaultOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ERC20Vault contract. type ERC20VaultOwnershipTransferredIterator struct { Event *ERC20VaultOwnershipTransferred // Event containing the contract specifics and raw log @@ -2102,3 +2459,147 @@ func (_ERC20Vault *ERC20VaultFilterer) ParseUnpaused(log types.Log) (*ERC20Vault event.Raw = log return event, nil } + +// ERC20VaultUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC20Vault contract. +type ERC20VaultUpgradedIterator struct { + Event *ERC20VaultUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20VaultUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20VaultUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20VaultUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20VaultUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20VaultUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20VaultUpgraded represents a Upgraded event raised by the ERC20Vault contract. +type ERC20VaultUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20Vault *ERC20VaultFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC20VaultUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC20Vault.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC20VaultUpgradedIterator{contract: _ERC20Vault.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20Vault *ERC20VaultFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC20VaultUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC20Vault.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20VaultUpgraded) + if err := _ERC20Vault.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC20Vault *ERC20VaultFilterer) ParseUpgraded(log types.Log) (*ERC20VaultUpgraded, error) { + event := new(ERC20VaultUpgraded) + if err := _ERC20Vault.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/relayer/bindings/erc721vault/ERC721Vault.go b/packages/relayer/bindings/erc721vault/ERC721Vault.go index 4e7e92d46d3..94ccb9f5afb 100644 --- a/packages/relayer/bindings/erc721vault/ERC721Vault.go +++ b/packages/relayer/bindings/erc721vault/ERC721Vault.go @@ -68,7 +68,7 @@ type IBridgeMessage struct { // ERC721VaultMetaData contains all meta data concerning the ERC721Vault contract. var ERC721VaultMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INTERFACE_NOT_SUPPORTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_FROM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_SRC_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MAX_TOKEN_PER_TXN_EXCEEDED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MESSAGE_NOT_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MESSAGE_RELEASED_ALREADY\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_TOKEN_ARRAY_MISMATCH\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"}],\"name\":\"BridgedTokenDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ERC1155_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC721_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TOKEN_PER_TXN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bridgedToCanonical\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canonicalToBridged\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"onMessageRecalled\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.CanonicalNFT\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"receiveToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.BridgeTransferOp\",\"name\":\"op\",\"type\":\"tuple\"}],\"name\":\"sendToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NULL_IMPL_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INTERFACE_NOT_SUPPORTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_SRC_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_INVALID_USER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_MAX_TOKEN_PER_TXN_EXCEEDED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VAULT_TOKEN_ARRAY_MISMATCH\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ctoken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"btoken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ctokenName\",\"type\":\"string\"}],\"name\":\"BridgedTokenDeployed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"TokenSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ERC1155_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC721_INTERFACE_ID\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TOKEN_PER_TXN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bridgedToCanonical\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canonicalToBridged\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressManager\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"onMessageRecalled\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.CanonicalNFT\",\"name\":\"ctoken\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"receiveToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structBaseNFTVault.BridgeTransferOp\",\"name\":\"op\",\"type\":\"tuple\"}],\"name\":\"sendToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"id\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"internalType\":\"structIBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // ERC721VaultABI is the input ABI used to generate the binding from. @@ -551,35 +551,35 @@ func (_ERC721Vault *ERC721VaultCallerSession) Paused() (bool, error) { return _ERC721Vault.Contract.Paused(&_ERC721Vault.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC721Vault *ERC721VaultCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC721Vault *ERC721VaultCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _ERC721Vault.contract.Call(opts, &out, "pendingOwner") + err := _ERC721Vault.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC721Vault *ERC721VaultSession) PendingOwner() (common.Address, error) { - return _ERC721Vault.Contract.PendingOwner(&_ERC721Vault.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC721Vault *ERC721VaultSession) ProxiableUUID() ([32]byte, error) { + return _ERC721Vault.Contract.ProxiableUUID(&_ERC721Vault.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_ERC721Vault *ERC721VaultCallerSession) PendingOwner() (common.Address, error) { - return _ERC721Vault.Contract.PendingOwner(&_ERC721Vault.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_ERC721Vault *ERC721VaultCallerSession) ProxiableUUID() ([32]byte, error) { + return _ERC721Vault.Contract.ProxiableUUID(&_ERC721Vault.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -675,27 +675,6 @@ func (_ERC721Vault *ERC721VaultCallerSession) SupportsInterface(interfaceId [4]b return _ERC721Vault.Contract.SupportsInterface(&_ERC721Vault.CallOpts, interfaceId) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_ERC721Vault *ERC721VaultTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ERC721Vault.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_ERC721Vault *ERC721VaultSession) AcceptOwnership() (*types.Transaction, error) { - return _ERC721Vault.Contract.AcceptOwnership(&_ERC721Vault.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_ERC721Vault *ERC721VaultTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _ERC721Vault.Contract.AcceptOwnership(&_ERC721Vault.TransactOpts) -} - // Init is a paid mutator transaction binding the contract method 0x19ab453c. // // Solidity: function init(address addressManager) returns() @@ -864,9 +843,51 @@ func (_ERC721Vault *ERC721VaultTransactorSession) Unpause() (*types.Transaction, return _ERC721Vault.Contract.Unpause(&_ERC721Vault.TransactOpts) } -// ERC721VaultBridgedTokenDeployedIterator is returned from FilterBridgedTokenDeployed and is used to iterate over the raw logs and unpacked data for BridgedTokenDeployed events raised by the ERC721Vault contract. -type ERC721VaultBridgedTokenDeployedIterator struct { - Event *ERC721VaultBridgedTokenDeployed // Event containing the contract specifics and raw log +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC721Vault *ERC721VaultTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _ERC721Vault.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC721Vault *ERC721VaultSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _ERC721Vault.Contract.UpgradeTo(&_ERC721Vault.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_ERC721Vault *ERC721VaultTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _ERC721Vault.Contract.UpgradeTo(&_ERC721Vault.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC721Vault *ERC721VaultTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC721Vault.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC721Vault *ERC721VaultSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC721Vault.Contract.UpgradeToAndCall(&_ERC721Vault.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_ERC721Vault *ERC721VaultTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _ERC721Vault.Contract.UpgradeToAndCall(&_ERC721Vault.TransactOpts, newImplementation, data) +} + +// ERC721VaultAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the ERC721Vault contract. +type ERC721VaultAdminChangedIterator struct { + Event *ERC721VaultAdminChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -880,7 +901,7 @@ type ERC721VaultBridgedTokenDeployedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ERC721VaultBridgedTokenDeployedIterator) Next() bool { +func (it *ERC721VaultAdminChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -889,7 +910,7 @@ func (it *ERC721VaultBridgedTokenDeployedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC721VaultBridgedTokenDeployed) + it.Event = new(ERC721VaultAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -904,7 +925,7 @@ func (it *ERC721VaultBridgedTokenDeployedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC721VaultBridgedTokenDeployed) + it.Event = new(ERC721VaultAdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -920,71 +941,42 @@ func (it *ERC721VaultBridgedTokenDeployedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC721VaultBridgedTokenDeployedIterator) Error() error { +func (it *ERC721VaultAdminChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC721VaultBridgedTokenDeployedIterator) Close() error { +func (it *ERC721VaultAdminChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC721VaultBridgedTokenDeployed represents a BridgedTokenDeployed event raised by the ERC721Vault contract. -type ERC721VaultBridgedTokenDeployed struct { - ChainId uint64 - Ctoken common.Address - Btoken common.Address - CtokenSymbol string - CtokenName string - Raw types.Log // Blockchain specific contextual infos +// ERC721VaultAdminChanged represents a AdminChanged event raised by the ERC721Vault contract. +type ERC721VaultAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBridgedTokenDeployed is a free log retrieval operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) -func (_ERC721Vault *ERC721VaultFilterer) FilterBridgedTokenDeployed(opts *bind.FilterOpts, chainId []uint64, ctoken []common.Address, btoken []common.Address) (*ERC721VaultBridgedTokenDeployedIterator, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC721Vault *ERC721VaultFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*ERC721VaultAdminChangedIterator, error) { - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - var ctokenRule []interface{} - for _, ctokenItem := range ctoken { - ctokenRule = append(ctokenRule, ctokenItem) - } - var btokenRule []interface{} - for _, btokenItem := range btoken { - btokenRule = append(btokenRule, btokenItem) - } - - logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) + logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "AdminChanged") if err != nil { return nil, err } - return &ERC721VaultBridgedTokenDeployedIterator{contract: _ERC721Vault.contract, event: "BridgedTokenDeployed", logs: logs, sub: sub}, nil + return &ERC721VaultAdminChangedIterator{contract: _ERC721Vault.contract, event: "AdminChanged", logs: logs, sub: sub}, nil } -// WatchBridgedTokenDeployed is a free log subscription operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) -func (_ERC721Vault *ERC721VaultFilterer) WatchBridgedTokenDeployed(opts *bind.WatchOpts, sink chan<- *ERC721VaultBridgedTokenDeployed, chainId []uint64, ctoken []common.Address, btoken []common.Address) (event.Subscription, error) { - - var chainIdRule []interface{} - for _, chainIdItem := range chainId { - chainIdRule = append(chainIdRule, chainIdItem) - } - var ctokenRule []interface{} - for _, ctokenItem := range ctoken { - ctokenRule = append(ctokenRule, ctokenItem) - } - var btokenRule []interface{} - for _, btokenItem := range btoken { - btokenRule = append(btokenRule, btokenItem) - } +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC721Vault *ERC721VaultFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *ERC721VaultAdminChanged) (event.Subscription, error) { - logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) + logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "AdminChanged") if err != nil { return nil, err } @@ -994,8 +986,8 @@ func (_ERC721Vault *ERC721VaultFilterer) WatchBridgedTokenDeployed(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC721VaultBridgedTokenDeployed) - if err := _ERC721Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { + event := new(ERC721VaultAdminChanged) + if err := _ERC721Vault.contract.UnpackLog(event, "AdminChanged", log); err != nil { return err } event.Raw = log @@ -1016,21 +1008,21 @@ func (_ERC721Vault *ERC721VaultFilterer) WatchBridgedTokenDeployed(opts *bind.Wa }), nil } -// ParseBridgedTokenDeployed is a log parse operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) -func (_ERC721Vault *ERC721VaultFilterer) ParseBridgedTokenDeployed(log types.Log) (*ERC721VaultBridgedTokenDeployed, error) { - event := new(ERC721VaultBridgedTokenDeployed) - if err := _ERC721Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_ERC721Vault *ERC721VaultFilterer) ParseAdminChanged(log types.Log) (*ERC721VaultAdminChanged, error) { + event := new(ERC721VaultAdminChanged) + if err := _ERC721Vault.contract.UnpackLog(event, "AdminChanged", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC721VaultInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC721Vault contract. -type ERC721VaultInitializedIterator struct { - Event *ERC721VaultInitialized // Event containing the contract specifics and raw log +// ERC721VaultBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the ERC721Vault contract. +type ERC721VaultBeaconUpgradedIterator struct { + Event *ERC721VaultBeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1044,7 +1036,7 @@ type ERC721VaultInitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ERC721VaultInitializedIterator) Next() bool { +func (it *ERC721VaultBeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1053,7 +1045,7 @@ func (it *ERC721VaultInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC721VaultInitialized) + it.Event = new(ERC721VaultBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1068,7 +1060,7 @@ func (it *ERC721VaultInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC721VaultInitialized) + it.Event = new(ERC721VaultBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1084,41 +1076,51 @@ func (it *ERC721VaultInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC721VaultInitializedIterator) Error() error { +func (it *ERC721VaultBeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC721VaultInitializedIterator) Close() error { +func (it *ERC721VaultBeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC721VaultInitialized represents a Initialized event raised by the ERC721Vault contract. -type ERC721VaultInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// ERC721VaultBeaconUpgraded represents a BeaconUpgraded event raised by the ERC721Vault contract. +type ERC721VaultBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_ERC721Vault *ERC721VaultFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC721VaultInitializedIterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC721Vault *ERC721VaultFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*ERC721VaultBeaconUpgradedIterator, error) { - logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &ERC721VaultInitializedIterator{contract: _ERC721Vault.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &ERC721VaultBeaconUpgradedIterator{contract: _ERC721Vault.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_ERC721Vault *ERC721VaultFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC721VaultInitialized) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC721Vault *ERC721VaultFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *ERC721VaultBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -1128,8 +1130,8 @@ func (_ERC721Vault *ERC721VaultFilterer) WatchInitialized(opts *bind.WatchOpts, select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC721VaultInitialized) - if err := _ERC721Vault.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(ERC721VaultBeaconUpgraded) + if err := _ERC721Vault.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -1150,21 +1152,21 @@ func (_ERC721Vault *ERC721VaultFilterer) WatchInitialized(opts *bind.WatchOpts, }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_ERC721Vault *ERC721VaultFilterer) ParseInitialized(log types.Log) (*ERC721VaultInitialized, error) { - event := new(ERC721VaultInitialized) - if err := _ERC721Vault.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_ERC721Vault *ERC721VaultFilterer) ParseBeaconUpgraded(log types.Log) (*ERC721VaultBeaconUpgraded, error) { + event := new(ERC721VaultBeaconUpgraded) + if err := _ERC721Vault.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC721VaultOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the ERC721Vault contract. -type ERC721VaultOwnershipTransferStartedIterator struct { - Event *ERC721VaultOwnershipTransferStarted // Event containing the contract specifics and raw log +// ERC721VaultBridgedTokenDeployedIterator is returned from FilterBridgedTokenDeployed and is used to iterate over the raw logs and unpacked data for BridgedTokenDeployed events raised by the ERC721Vault contract. +type ERC721VaultBridgedTokenDeployedIterator struct { + Event *ERC721VaultBridgedTokenDeployed // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1178,7 +1180,7 @@ type ERC721VaultOwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ERC721VaultOwnershipTransferStartedIterator) Next() bool { +func (it *ERC721VaultBridgedTokenDeployedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1187,7 +1189,7 @@ func (it *ERC721VaultOwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC721VaultOwnershipTransferStarted) + it.Event = new(ERC721VaultBridgedTokenDeployed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1202,7 +1204,7 @@ func (it *ERC721VaultOwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC721VaultOwnershipTransferStarted) + it.Event = new(ERC721VaultBridgedTokenDeployed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1218,60 +1220,71 @@ func (it *ERC721VaultOwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC721VaultOwnershipTransferStartedIterator) Error() error { +func (it *ERC721VaultBridgedTokenDeployedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC721VaultOwnershipTransferStartedIterator) Close() error { +func (it *ERC721VaultBridgedTokenDeployedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC721VaultOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the ERC721Vault contract. -type ERC721VaultOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// ERC721VaultBridgedTokenDeployed represents a BridgedTokenDeployed event raised by the ERC721Vault contract. +type ERC721VaultBridgedTokenDeployed struct { + ChainId uint64 + Ctoken common.Address + Btoken common.Address + CtokenSymbol string + CtokenName string + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterBridgedTokenDeployed is a free log retrieval operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC721Vault *ERC721VaultFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ERC721VaultOwnershipTransferStartedIterator, error) { +// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) +func (_ERC721Vault *ERC721VaultFilterer) FilterBridgedTokenDeployed(opts *bind.FilterOpts, chainId []uint64, ctoken []common.Address, btoken []common.Address) (*ERC721VaultBridgedTokenDeployedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var ctokenRule []interface{} + for _, ctokenItem := range ctoken { + ctokenRule = append(ctokenRule, ctokenItem) + } + var btokenRule []interface{} + for _, btokenItem := range btoken { + btokenRule = append(btokenRule, btokenItem) } - logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) if err != nil { return nil, err } - return &ERC721VaultOwnershipTransferStartedIterator{contract: _ERC721Vault.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &ERC721VaultBridgedTokenDeployedIterator{contract: _ERC721Vault.contract, event: "BridgedTokenDeployed", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchBridgedTokenDeployed is a free log subscription operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC721Vault *ERC721VaultFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *ERC721VaultOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) +func (_ERC721Vault *ERC721VaultFilterer) WatchBridgedTokenDeployed(opts *bind.WatchOpts, sink chan<- *ERC721VaultBridgedTokenDeployed, chainId []uint64, ctoken []common.Address, btoken []common.Address) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var ctokenRule []interface{} + for _, ctokenItem := range ctoken { + ctokenRule = append(ctokenRule, ctokenItem) + } + var btokenRule []interface{} + for _, btokenItem := range btoken { + btokenRule = append(btokenRule, btokenItem) } - logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "BridgedTokenDeployed", chainIdRule, ctokenRule, btokenRule) if err != nil { return nil, err } @@ -1281,8 +1294,8 @@ func (_ERC721Vault *ERC721VaultFilterer) WatchOwnershipTransferStarted(opts *bin select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC721VaultOwnershipTransferStarted) - if err := _ERC721Vault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(ERC721VaultBridgedTokenDeployed) + if err := _ERC721Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { return err } event.Raw = log @@ -1303,12 +1316,146 @@ func (_ERC721Vault *ERC721VaultFilterer) WatchOwnershipTransferStarted(opts *bin }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseBridgedTokenDeployed is a log parse operation binding the contract event 0x44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_ERC721Vault *ERC721VaultFilterer) ParseOwnershipTransferStarted(log types.Log) (*ERC721VaultOwnershipTransferStarted, error) { - event := new(ERC721VaultOwnershipTransferStarted) - if err := _ERC721Vault.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event BridgedTokenDeployed(uint64 indexed chainId, address indexed ctoken, address indexed btoken, string ctokenSymbol, string ctokenName) +func (_ERC721Vault *ERC721VaultFilterer) ParseBridgedTokenDeployed(log types.Log) (*ERC721VaultBridgedTokenDeployed, error) { + event := new(ERC721VaultBridgedTokenDeployed) + if err := _ERC721Vault.contract.UnpackLog(event, "BridgedTokenDeployed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC721VaultInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC721Vault contract. +type ERC721VaultInitializedIterator struct { + Event *ERC721VaultInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC721VaultInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC721VaultInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC721VaultInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC721VaultInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC721VaultInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC721VaultInitialized represents a Initialized event raised by the ERC721Vault contract. +type ERC721VaultInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC721Vault *ERC721VaultFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC721VaultInitializedIterator, error) { + + logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC721VaultInitializedIterator{contract: _ERC721Vault.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC721Vault *ERC721VaultFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC721VaultInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC721VaultInitialized) + if err := _ERC721Vault.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC721Vault *ERC721VaultFilterer) ParseInitialized(log types.Log) (*ERC721VaultInitialized, error) { + event := new(ERC721VaultInitialized) + if err := _ERC721Vault.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log @@ -2223,3 +2370,147 @@ func (_ERC721Vault *ERC721VaultFilterer) ParseUnpaused(log types.Log) (*ERC721Va event.Raw = log return event, nil } + +// ERC721VaultUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the ERC721Vault contract. +type ERC721VaultUpgradedIterator struct { + Event *ERC721VaultUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC721VaultUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC721VaultUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC721VaultUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC721VaultUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC721VaultUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC721VaultUpgraded represents a Upgraded event raised by the ERC721Vault contract. +type ERC721VaultUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC721Vault *ERC721VaultFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ERC721VaultUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC721Vault.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ERC721VaultUpgradedIterator{contract: _ERC721Vault.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC721Vault *ERC721VaultFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ERC721VaultUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _ERC721Vault.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC721VaultUpgraded) + if err := _ERC721Vault.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_ERC721Vault *ERC721VaultFilterer) ParseUpgraded(log types.Log) (*ERC721VaultUpgraded, error) { + event := new(ERC721VaultUpgraded) + if err := _ERC721Vault.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/relayer/bindings/signalservice/SignalService.go b/packages/relayer/bindings/signalservice/SignalService.go index 65354b93d76..f29144aa598 100644 --- a/packages/relayer/bindings/signalservice/SignalService.go +++ b/packages/relayer/bindings/signalservice/SignalService.go @@ -31,7 +31,7 @@ var ( // SignalServiceMetaData contains all meta data concerning the SignalService contract. var SignalServiceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ADDRESS_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_LABEL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SS_INVALID_APP\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SS_INVALID_SIGNAL\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"oldLabel\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newLabel\",\"type\":\"bytes32\"}],\"name\":\"Authorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"name\":\"authorize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"authorizedAddresses\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"}],\"name\":\"getSignalSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"name\":\"isAuthorizedAs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"}],\"name\":\"isSignalSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveSignalReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"}],\"name\":\"sendSignal\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipProofCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_LABEL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SS_INVALID_APP\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SS_INVALID_SIGNAL\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"oldLabel\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newLabel\",\"type\":\"bytes32\"}],\"name\":\"Authorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"name\":\"authorize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"authorizedAddresses\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"}],\"name\":\"getSignalSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"label\",\"type\":\"bytes32\"}],\"name\":\"isAuthorizedAs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"}],\"name\":\"isSignalSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"app\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveSignalReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"signal\",\"type\":\"bytes32\"}],\"name\":\"sendSignal\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipProofCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // SignalServiceABI is the input ABI used to generate the binding from. @@ -273,37 +273,6 @@ func (_SignalService *SignalServiceCallerSession) GetSignalSlot(chainId uint64, return _SignalService.Contract.GetSignalSlot(&_SignalService.CallOpts, chainId, app, signal) } -// IsAuthorized is a free data retrieval call binding the contract method 0xfe9fbb80. -// -// Solidity: function isAuthorized(address addr) view returns(bool) -func (_SignalService *SignalServiceCaller) IsAuthorized(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _SignalService.contract.Call(opts, &out, "isAuthorized", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsAuthorized is a free data retrieval call binding the contract method 0xfe9fbb80. -// -// Solidity: function isAuthorized(address addr) view returns(bool) -func (_SignalService *SignalServiceSession) IsAuthorized(addr common.Address) (bool, error) { - return _SignalService.Contract.IsAuthorized(&_SignalService.CallOpts, addr) -} - -// IsAuthorized is a free data retrieval call binding the contract method 0xfe9fbb80. -// -// Solidity: function isAuthorized(address addr) view returns(bool) -func (_SignalService *SignalServiceCallerSession) IsAuthorized(addr common.Address) (bool, error) { - return _SignalService.Contract.IsAuthorized(&_SignalService.CallOpts, addr) -} - // IsAuthorizedAs is a free data retrieval call binding the contract method 0xa354b9de. // // Solidity: function isAuthorizedAs(address addr, bytes32 label) view returns(bool) @@ -428,66 +397,66 @@ func (_SignalService *SignalServiceCallerSession) Paused() (bool, error) { return _SignalService.Contract.Paused(&_SignalService.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProveSignalReceived is a free data retrieval call binding the contract method 0x910af6ed. // -// Solidity: function pendingOwner() view returns(address) -func (_SignalService *SignalServiceCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proveSignalReceived(uint64 srcChainId, address app, bytes32 signal, bytes proof) view returns(bool) +func (_SignalService *SignalServiceCaller) ProveSignalReceived(opts *bind.CallOpts, srcChainId uint64, app common.Address, signal [32]byte, proof []byte) (bool, error) { var out []interface{} - err := _SignalService.contract.Call(opts, &out, "pendingOwner") + err := _SignalService.contract.Call(opts, &out, "proveSignalReceived", srcChainId, app, signal, proof) if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProveSignalReceived is a free data retrieval call binding the contract method 0x910af6ed. // -// Solidity: function pendingOwner() view returns(address) -func (_SignalService *SignalServiceSession) PendingOwner() (common.Address, error) { - return _SignalService.Contract.PendingOwner(&_SignalService.CallOpts) +// Solidity: function proveSignalReceived(uint64 srcChainId, address app, bytes32 signal, bytes proof) view returns(bool) +func (_SignalService *SignalServiceSession) ProveSignalReceived(srcChainId uint64, app common.Address, signal [32]byte, proof []byte) (bool, error) { + return _SignalService.Contract.ProveSignalReceived(&_SignalService.CallOpts, srcChainId, app, signal, proof) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProveSignalReceived is a free data retrieval call binding the contract method 0x910af6ed. // -// Solidity: function pendingOwner() view returns(address) -func (_SignalService *SignalServiceCallerSession) PendingOwner() (common.Address, error) { - return _SignalService.Contract.PendingOwner(&_SignalService.CallOpts) +// Solidity: function proveSignalReceived(uint64 srcChainId, address app, bytes32 signal, bytes proof) view returns(bool) +func (_SignalService *SignalServiceCallerSession) ProveSignalReceived(srcChainId uint64, app common.Address, signal [32]byte, proof []byte) (bool, error) { + return _SignalService.Contract.ProveSignalReceived(&_SignalService.CallOpts, srcChainId, app, signal, proof) } -// ProveSignalReceived is a free data retrieval call binding the contract method 0x910af6ed. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function proveSignalReceived(uint64 srcChainId, address app, bytes32 signal, bytes proof) view returns(bool) -func (_SignalService *SignalServiceCaller) ProveSignalReceived(opts *bind.CallOpts, srcChainId uint64, app common.Address, signal [32]byte, proof []byte) (bool, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_SignalService *SignalServiceCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _SignalService.contract.Call(opts, &out, "proveSignalReceived", srcChainId, app, signal, proof) + err := _SignalService.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(bool), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// ProveSignalReceived is a free data retrieval call binding the contract method 0x910af6ed. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function proveSignalReceived(uint64 srcChainId, address app, bytes32 signal, bytes proof) view returns(bool) -func (_SignalService *SignalServiceSession) ProveSignalReceived(srcChainId uint64, app common.Address, signal [32]byte, proof []byte) (bool, error) { - return _SignalService.Contract.ProveSignalReceived(&_SignalService.CallOpts, srcChainId, app, signal, proof) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_SignalService *SignalServiceSession) ProxiableUUID() ([32]byte, error) { + return _SignalService.Contract.ProxiableUUID(&_SignalService.CallOpts) } -// ProveSignalReceived is a free data retrieval call binding the contract method 0x910af6ed. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function proveSignalReceived(uint64 srcChainId, address app, bytes32 signal, bytes proof) view returns(bool) -func (_SignalService *SignalServiceCallerSession) ProveSignalReceived(srcChainId uint64, app common.Address, signal [32]byte, proof []byte) (bool, error) { - return _SignalService.Contract.ProveSignalReceived(&_SignalService.CallOpts, srcChainId, app, signal, proof) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_SignalService *SignalServiceCallerSession) ProxiableUUID() ([32]byte, error) { + return _SignalService.Contract.ProxiableUUID(&_SignalService.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -583,27 +552,6 @@ func (_SignalService *SignalServiceCallerSession) SkipProofCheck() (bool, error) return _SignalService.Contract.SkipProofCheck(&_SignalService.CallOpts) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_SignalService *SignalServiceTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SignalService.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_SignalService *SignalServiceSession) AcceptOwnership() (*types.Transaction, error) { - return _SignalService.Contract.AcceptOwnership(&_SignalService.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_SignalService *SignalServiceTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _SignalService.Contract.AcceptOwnership(&_SignalService.TransactOpts) -} - // Authorize is a paid mutator transaction binding the contract method 0x969e15a3. // // Solidity: function authorize(address addr, bytes32 label) returns() @@ -751,6 +699,183 @@ func (_SignalService *SignalServiceTransactorSession) Unpause() (*types.Transact return _SignalService.Contract.Unpause(&_SignalService.TransactOpts) } +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_SignalService *SignalServiceTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _SignalService.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_SignalService *SignalServiceSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _SignalService.Contract.UpgradeTo(&_SignalService.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_SignalService *SignalServiceTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _SignalService.Contract.UpgradeTo(&_SignalService.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_SignalService *SignalServiceTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _SignalService.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_SignalService *SignalServiceSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _SignalService.Contract.UpgradeToAndCall(&_SignalService.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_SignalService *SignalServiceTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _SignalService.Contract.UpgradeToAndCall(&_SignalService.TransactOpts, newImplementation, data) +} + +// SignalServiceAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the SignalService contract. +type SignalServiceAdminChangedIterator struct { + Event *SignalServiceAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SignalServiceAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SignalServiceAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SignalServiceAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SignalServiceAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SignalServiceAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SignalServiceAdminChanged represents a AdminChanged event raised by the SignalService contract. +type SignalServiceAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_SignalService *SignalServiceFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*SignalServiceAdminChangedIterator, error) { + + logs, sub, err := _SignalService.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &SignalServiceAdminChangedIterator{contract: _SignalService.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_SignalService *SignalServiceFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *SignalServiceAdminChanged) (event.Subscription, error) { + + logs, sub, err := _SignalService.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SignalServiceAdminChanged) + if err := _SignalService.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_SignalService *SignalServiceFilterer) ParseAdminChanged(log types.Log) (*SignalServiceAdminChanged, error) { + event := new(SignalServiceAdminChanged) + if err := _SignalService.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // SignalServiceAuthorizedIterator is returned from FilterAuthorized and is used to iterate over the raw logs and unpacked data for Authorized events raised by the SignalService contract. type SignalServiceAuthorizedIterator struct { Event *SignalServiceAuthorized // Event containing the contract specifics and raw log @@ -897,9 +1022,9 @@ func (_SignalService *SignalServiceFilterer) ParseAuthorized(log types.Log) (*Si return event, nil } -// SignalServiceInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SignalService contract. -type SignalServiceInitializedIterator struct { - Event *SignalServiceInitialized // Event containing the contract specifics and raw log +// SignalServiceBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the SignalService contract. +type SignalServiceBeaconUpgradedIterator struct { + Event *SignalServiceBeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -913,7 +1038,7 @@ type SignalServiceInitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *SignalServiceInitializedIterator) Next() bool { +func (it *SignalServiceBeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -922,7 +1047,7 @@ func (it *SignalServiceInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SignalServiceInitialized) + it.Event = new(SignalServiceBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -937,7 +1062,7 @@ func (it *SignalServiceInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(SignalServiceInitialized) + it.Event = new(SignalServiceBeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -953,41 +1078,51 @@ func (it *SignalServiceInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *SignalServiceInitializedIterator) Error() error { +func (it *SignalServiceBeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *SignalServiceInitializedIterator) Close() error { +func (it *SignalServiceBeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// SignalServiceInitialized represents a Initialized event raised by the SignalService contract. -type SignalServiceInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// SignalServiceBeaconUpgraded represents a BeaconUpgraded event raised by the SignalService contract. +type SignalServiceBeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_SignalService *SignalServiceFilterer) FilterInitialized(opts *bind.FilterOpts) (*SignalServiceInitializedIterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_SignalService *SignalServiceFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*SignalServiceBeaconUpgradedIterator, error) { - logs, sub, err := _SignalService.contract.FilterLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _SignalService.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &SignalServiceInitializedIterator{contract: _SignalService.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &SignalServiceBeaconUpgradedIterator{contract: _SignalService.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_SignalService *SignalServiceFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SignalServiceInitialized) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_SignalService *SignalServiceFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *SignalServiceBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - logs, sub, err := _SignalService.contract.WatchLogs(opts, "Initialized") + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } + + logs, sub, err := _SignalService.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -997,8 +1132,8 @@ func (_SignalService *SignalServiceFilterer) WatchInitialized(opts *bind.WatchOp select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(SignalServiceInitialized) - if err := _SignalService.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(SignalServiceBeaconUpgraded) + if err := _SignalService.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -1019,21 +1154,21 @@ func (_SignalService *SignalServiceFilterer) WatchInitialized(opts *bind.WatchOp }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event Initialized(uint8 version) -func (_SignalService *SignalServiceFilterer) ParseInitialized(log types.Log) (*SignalServiceInitialized, error) { - event := new(SignalServiceInitialized) - if err := _SignalService.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_SignalService *SignalServiceFilterer) ParseBeaconUpgraded(log types.Log) (*SignalServiceBeaconUpgraded, error) { + event := new(SignalServiceBeaconUpgraded) + if err := _SignalService.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// SignalServiceOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the SignalService contract. -type SignalServiceOwnershipTransferStartedIterator struct { - Event *SignalServiceOwnershipTransferStarted // Event containing the contract specifics and raw log +// SignalServiceInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SignalService contract. +type SignalServiceInitializedIterator struct { + Event *SignalServiceInitialized // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1047,7 +1182,7 @@ type SignalServiceOwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *SignalServiceOwnershipTransferStartedIterator) Next() bool { +func (it *SignalServiceInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1056,7 +1191,7 @@ func (it *SignalServiceOwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SignalServiceOwnershipTransferStarted) + it.Event = new(SignalServiceInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1071,7 +1206,7 @@ func (it *SignalServiceOwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(SignalServiceOwnershipTransferStarted) + it.Event = new(SignalServiceInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1087,60 +1222,41 @@ func (it *SignalServiceOwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *SignalServiceOwnershipTransferStartedIterator) Error() error { +func (it *SignalServiceInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *SignalServiceOwnershipTransferStartedIterator) Close() error { +func (it *SignalServiceInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// SignalServiceOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the SignalService contract. -type SignalServiceOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// SignalServiceInitialized represents a Initialized event raised by the SignalService contract. +type SignalServiceInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_SignalService *SignalServiceFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SignalServiceOwnershipTransferStartedIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: event Initialized(uint8 version) +func (_SignalService *SignalServiceFilterer) FilterInitialized(opts *bind.FilterOpts) (*SignalServiceInitializedIterator, error) { - logs, sub, err := _SignalService.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _SignalService.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &SignalServiceOwnershipTransferStartedIterator{contract: _SignalService.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &SignalServiceInitializedIterator{contract: _SignalService.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_SignalService *SignalServiceFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *SignalServiceOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: event Initialized(uint8 version) +func (_SignalService *SignalServiceFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SignalServiceInitialized) (event.Subscription, error) { - logs, sub, err := _SignalService.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _SignalService.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -1150,8 +1266,8 @@ func (_SignalService *SignalServiceFilterer) WatchOwnershipTransferStarted(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(SignalServiceOwnershipTransferStarted) - if err := _SignalService.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(SignalServiceInitialized) + if err := _SignalService.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -1172,12 +1288,12 @@ func (_SignalService *SignalServiceFilterer) WatchOwnershipTransferStarted(opts }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_SignalService *SignalServiceFilterer) ParseOwnershipTransferStarted(log types.Log) (*SignalServiceOwnershipTransferStarted, error) { - event := new(SignalServiceOwnershipTransferStarted) - if err := _SignalService.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event Initialized(uint8 version) +func (_SignalService *SignalServiceFilterer) ParseInitialized(log types.Log) (*SignalServiceInitialized, error) { + event := new(SignalServiceInitialized) + if err := _SignalService.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log @@ -1604,3 +1720,147 @@ func (_SignalService *SignalServiceFilterer) ParseUnpaused(log types.Log) (*Sign event.Raw = log return event, nil } + +// SignalServiceUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the SignalService contract. +type SignalServiceUpgradedIterator struct { + Event *SignalServiceUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SignalServiceUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SignalServiceUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SignalServiceUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SignalServiceUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SignalServiceUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SignalServiceUpgraded represents a Upgraded event raised by the SignalService contract. +type SignalServiceUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_SignalService *SignalServiceFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*SignalServiceUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _SignalService.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &SignalServiceUpgradedIterator{contract: _SignalService.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_SignalService *SignalServiceFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *SignalServiceUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _SignalService.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SignalServiceUpgraded) + if err := _SignalService.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_SignalService *SignalServiceFilterer) ParseUpgraded(log types.Log) (*SignalServiceUpgraded, error) { + event := new(SignalServiceUpgraded) + if err := _SignalService.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/packages/relayer/bindings/taikol1/TaikoL1.go b/packages/relayer/bindings/taikol1/TaikoL1.go index 00a66871680..100a7318744 100644 --- a/packages/relayer/bindings/taikol1/TaikoL1.go +++ b/packages/relayer/bindings/taikol1/TaikoL1.go @@ -146,7 +146,7 @@ type TaikoDataTransitionState struct { // TaikoL1MetaData contains all meta data concerning the TaikoL1 contract. var TaikoL1MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_RECEIVE_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getTaikoTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_CONTESTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ALREADY_PROVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_ASSIGNED_PROVER_NOT_ALLOWED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_FOR_DA_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOB_NOT_REUSEABLE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_BLOCK_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INSUFFICIENT_TOKEN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_BLOCK_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_CONFIG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_ETH_DEPOSIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROOF\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_INVALID_TRANSITION\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_NOT_ASSIGNED_PROVER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROPOSER_NOT_EOA\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_PROVING_PAUSED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_RECEIVE_DISABLED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_BLOCKS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TOO_MANY_TIERS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_ID_ZERO\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TRANSITION_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_OFFSET_SIZE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_TXLIST_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNAUTHORIZED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_PARENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1_UNEXPECTED_TRANSITION_TIER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"BlobCached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"name\":\"BlockProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"}],\"name\":\"BlockVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit\",\"name\":\"deposit\",\"type\":\"tuple\"}],\"name\":\"EthDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ProvingPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDebited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionContested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"graffiti\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"name\":\"tran\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"}],\"name\":\"TransitionProved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"canDepositEthToL2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"depositEtherToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"metaHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"assignedProver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"proposedIn\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nextTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"verifiedTransitionId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[7]\",\"name\":\"__reserved\",\"type\":\"bytes32[7]\"}],\"internalType\":\"structTaikoData.Block\",\"name\":\"blk\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockMaxProposals\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockRingBufferSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerifyPerProposal\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"blockMaxTxListBytes\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"blobExpiry\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"blobAllowedForDA\",\"type\":\"bool\"},{\"internalType\":\"uint96\",\"name\":\"livenessBond\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositRingBufferSize\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMinCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"ethDepositMaxCountPerBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMinAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethDepositMaxAmount\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ethDepositMaxFee\",\"type\":\"uint256\"}],\"internalType\":\"structTaikoData.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rand\",\"type\":\"uint256\"}],\"name\":\"getMinTier\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateVariables\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"b\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"tierId\",\"type\":\"uint16\"}],\"name\":\"getTier\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"verifierName\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint24\",\"name\":\"cooldownWindow\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"provingWindow\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint8\"}],\"internalType\":\"structITierProvider.Tier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTierIds\",\"outputs\":[{\"internalType\":\"uint16[]\",\"name\":\"ids\",\"type\":\"uint16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"}],\"name\":\"getTransition\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"prover\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"validityBond\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"contester\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"contestBond\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"tier\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"contestations\",\"type\":\"uint8\"},{\"internalType\":\"bytes32[4]\",\"name\":\"__reserved\",\"type\":\"bytes32[4]\"}],\"internalType\":\"structTaikoData.TransitionState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"}],\"name\":\"isBlobReusable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isConfigValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"pauseProving\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txList\",\"type\":\"bytes\"}],\"name\":\"proposeBlock\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"l1Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"difficulty\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"extraData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"depositsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint24\",\"name\":\"txListByteOffset\",\"type\":\"uint24\"},{\"internalType\":\"uint24\",\"name\":\"txListByteSize\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"minTier\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blobUsed\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"parentMetaHash\",\"type\":\"bytes32\"}],\"internalType\":\"structTaikoData.BlockMetadata\",\"name\":\"meta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.EthDeposit[]\",\"name\":\"depositsProcessed\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"proveBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"genesisHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"genesisTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"numEthDeposits\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextEthDepositToProcess\",\"type\":\"uint64\"}],\"internalType\":\"structTaikoData.SlotA\",\"name\":\"slotA\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"provingPaused\",\"type\":\"bool\"}],\"internalType\":\"structTaikoData.SlotB\",\"name\":\"slotB\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\"}],\"name\":\"verifyBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // TaikoL1ABI is the input ABI used to generate the binding from. @@ -526,37 +526,6 @@ func (_TaikoL1 *TaikoL1CallerSession) GetSyncedSnippet(blockId uint64) (ICrossCh return _TaikoL1.Contract.GetSyncedSnippet(&_TaikoL1.CallOpts, blockId) } -// GetTaikoTokenBalance is a free data retrieval call binding the contract method 0x8dff9cea. -// -// Solidity: function getTaikoTokenBalance(address user) view returns(uint256) -func (_TaikoL1 *TaikoL1Caller) GetTaikoTokenBalance(opts *bind.CallOpts, user common.Address) (*big.Int, error) { - var out []interface{} - err := _TaikoL1.contract.Call(opts, &out, "getTaikoTokenBalance", user) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTaikoTokenBalance is a free data retrieval call binding the contract method 0x8dff9cea. -// -// Solidity: function getTaikoTokenBalance(address user) view returns(uint256) -func (_TaikoL1 *TaikoL1Session) GetTaikoTokenBalance(user common.Address) (*big.Int, error) { - return _TaikoL1.Contract.GetTaikoTokenBalance(&_TaikoL1.CallOpts, user) -} - -// GetTaikoTokenBalance is a free data retrieval call binding the contract method 0x8dff9cea. -// -// Solidity: function getTaikoTokenBalance(address user) view returns(uint256) -func (_TaikoL1 *TaikoL1CallerSession) GetTaikoTokenBalance(user common.Address) (*big.Int, error) { - return _TaikoL1.Contract.GetTaikoTokenBalance(&_TaikoL1.CallOpts, user) -} - // GetTier is a free data retrieval call binding the contract method 0x576c3de7. // // Solidity: function getTier(uint16 tierId) view returns((bytes32,uint96,uint96,uint24,uint16,uint8)) @@ -774,35 +743,35 @@ func (_TaikoL1 *TaikoL1CallerSession) Paused() (bool, error) { return _TaikoL1.Contract.Paused(&_TaikoL1.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL1 *TaikoL1Caller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL1 *TaikoL1Caller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TaikoL1.contract.Call(opts, &out, "pendingOwner") + err := _TaikoL1.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL1 *TaikoL1Session) PendingOwner() (common.Address, error) { - return _TaikoL1.Contract.PendingOwner(&_TaikoL1.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL1 *TaikoL1Session) ProxiableUUID() ([32]byte, error) { + return _TaikoL1.Contract.ProxiableUUID(&_TaikoL1.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL1 *TaikoL1CallerSession) PendingOwner() (common.Address, error) { - return _TaikoL1.Contract.PendingOwner(&_TaikoL1.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL1 *TaikoL1CallerSession) ProxiableUUID() ([32]byte, error) { + return _TaikoL1.Contract.ProxiableUUID(&_TaikoL1.CallOpts) } // Resolve is a free data retrieval call binding the contract method 0x3eb6b8cf. @@ -912,27 +881,6 @@ func (_TaikoL1 *TaikoL1CallerSession) State() (struct { return _TaikoL1.Contract.State(&_TaikoL1.CallOpts) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL1 *TaikoL1Transactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TaikoL1.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL1 *TaikoL1Session) AcceptOwnership() (*types.Transaction, error) { - return _TaikoL1.Contract.AcceptOwnership(&_TaikoL1.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL1 *TaikoL1TransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _TaikoL1.Contract.AcceptOwnership(&_TaikoL1.TransactOpts) -} - // DepositEtherToL2 is a paid mutator transaction binding the contract method 0x047a289d. // // Solidity: function depositEtherToL2(address recipient) payable returns() @@ -1122,6 +1070,48 @@ func (_TaikoL1 *TaikoL1TransactorSession) Unpause() (*types.Transaction, error) return _TaikoL1.Contract.Unpause(&_TaikoL1.TransactOpts) } +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL1 *TaikoL1Transactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL1.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL1 *TaikoL1Session) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeTo(&_TaikoL1.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL1 *TaikoL1TransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeTo(&_TaikoL1.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL1 *TaikoL1Transactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL1.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL1 *TaikoL1Session) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeToAndCall(&_TaikoL1.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL1 *TaikoL1TransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL1.Contract.UpgradeToAndCall(&_TaikoL1.TransactOpts, newImplementation, data) +} + // VerifyBlocks is a paid mutator transaction binding the contract method 0x8778209d. // // Solidity: function verifyBlocks(uint64 maxBlocksToVerify) returns() @@ -1164,9 +1154,9 @@ func (_TaikoL1 *TaikoL1TransactorSession) Receive() (*types.Transaction, error) return _TaikoL1.Contract.Receive(&_TaikoL1.TransactOpts) } -// TaikoL1BlobCachedIterator is returned from FilterBlobCached and is used to iterate over the raw logs and unpacked data for BlobCached events raised by the TaikoL1 contract. -type TaikoL1BlobCachedIterator struct { - Event *TaikoL1BlobCached // Event containing the contract specifics and raw log +// TaikoL1AdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the TaikoL1 contract. +type TaikoL1AdminChangedIterator struct { + Event *TaikoL1AdminChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1180,7 +1170,7 @@ type TaikoL1BlobCachedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlobCachedIterator) Next() bool { +func (it *TaikoL1AdminChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1189,7 +1179,7 @@ func (it *TaikoL1BlobCachedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached) + it.Event = new(TaikoL1AdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1204,7 +1194,7 @@ func (it *TaikoL1BlobCachedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached) + it.Event = new(TaikoL1AdminChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1220,41 +1210,42 @@ func (it *TaikoL1BlobCachedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlobCachedIterator) Error() error { +func (it *TaikoL1AdminChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlobCachedIterator) Close() error { +func (it *TaikoL1AdminChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlobCached represents a BlobCached event raised by the TaikoL1 contract. -type TaikoL1BlobCached struct { - BlobHash [32]byte - Raw types.Log // Blockchain specific contextual infos +// TaikoL1AdminChanged represents a AdminChanged event raised by the TaikoL1 contract. +type TaikoL1AdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBlobCached is a free log retrieval operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) FilterBlobCached(opts *bind.FilterOpts) (*TaikoL1BlobCachedIterator, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL1 *TaikoL1Filterer) FilterAdminChanged(opts *bind.FilterOpts) (*TaikoL1AdminChangedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlobCached") + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "AdminChanged") if err != nil { return nil, err } - return &TaikoL1BlobCachedIterator{contract: _TaikoL1.contract, event: "BlobCached", logs: logs, sub: sub}, nil + return &TaikoL1AdminChangedIterator{contract: _TaikoL1.contract, event: "AdminChanged", logs: logs, sub: sub}, nil } -// WatchBlobCached is a free log subscription operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan<- *TaikoL1BlobCached) (event.Subscription, error) { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL1 *TaikoL1Filterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *TaikoL1AdminChanged) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlobCached") + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "AdminChanged") if err != nil { return nil, err } @@ -1264,8 +1255,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlobCached) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { + event := new(TaikoL1AdminChanged) + if err := _TaikoL1.contract.UnpackLog(event, "AdminChanged", log); err != nil { return err } event.Raw = log @@ -1286,21 +1277,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan }), nil } -// ParseBlobCached is a log parse operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) ParseBlobCached(log types.Log) (*TaikoL1BlobCached, error) { - event := new(TaikoL1BlobCached) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL1 *TaikoL1Filterer) ParseAdminChanged(log types.Log) (*TaikoL1AdminChanged, error) { + event := new(TaikoL1AdminChanged) + if err := _TaikoL1.contract.UnpackLog(event, "AdminChanged", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1BlobCached0Iterator is returned from FilterBlobCached0 and is used to iterate over the raw logs and unpacked data for BlobCached0 events raised by the TaikoL1 contract. -type TaikoL1BlobCached0Iterator struct { - Event *TaikoL1BlobCached0 // Event containing the contract specifics and raw log +// TaikoL1BeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the TaikoL1 contract. +type TaikoL1BeaconUpgradedIterator struct { + Event *TaikoL1BeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1314,7 +1305,7 @@ type TaikoL1BlobCached0Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlobCached0Iterator) Next() bool { +func (it *TaikoL1BeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1323,7 +1314,7 @@ func (it *TaikoL1BlobCached0Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached0) + it.Event = new(TaikoL1BeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1338,7 +1329,7 @@ func (it *TaikoL1BlobCached0Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlobCached0) + it.Event = new(TaikoL1BeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1354,41 +1345,51 @@ func (it *TaikoL1BlobCached0Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlobCached0Iterator) Error() error { +func (it *TaikoL1BeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlobCached0Iterator) Close() error { +func (it *TaikoL1BeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlobCached0 represents a BlobCached0 event raised by the TaikoL1 contract. -type TaikoL1BlobCached0 struct { - BlobHash [32]byte - Raw types.Log // Blockchain specific contextual infos +// TaikoL1BeaconUpgraded represents a BeaconUpgraded event raised by the TaikoL1 contract. +type TaikoL1BeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBlobCached0 is a free log retrieval operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) FilterBlobCached0(opts *bind.FilterOpts) (*TaikoL1BlobCached0Iterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL1 *TaikoL1Filterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*TaikoL1BeaconUpgradedIterator, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlobCached0") + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &TaikoL1BlobCached0Iterator{contract: _TaikoL1.contract, event: "BlobCached0", logs: logs, sub: sub}, nil + return &TaikoL1BeaconUpgradedIterator{contract: _TaikoL1.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchBlobCached0 is a free log subscription operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached0(opts *bind.WatchOpts, sink chan<- *TaikoL1BlobCached0) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL1 *TaikoL1Filterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *TaikoL1BeaconUpgraded, beacon []common.Address) (event.Subscription, error) { + + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) + } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlobCached0") + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -1398,8 +1399,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached0(opts *bind.WatchOpts, sink cha select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlobCached0) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached0", log); err != nil { + event := new(TaikoL1BeaconUpgraded) + if err := _TaikoL1.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -1420,21 +1421,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached0(opts *bind.WatchOpts, sink cha }), nil } -// ParseBlobCached0 is a log parse operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event BlobCached(bytes32 blobHash) -func (_TaikoL1 *TaikoL1Filterer) ParseBlobCached0(log types.Log) (*TaikoL1BlobCached0, error) { - event := new(TaikoL1BlobCached0) - if err := _TaikoL1.contract.UnpackLog(event, "BlobCached0", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL1 *TaikoL1Filterer) ParseBeaconUpgraded(log types.Log) (*TaikoL1BeaconUpgraded, error) { + event := new(TaikoL1BeaconUpgraded) + if err := _TaikoL1.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1BlockProposedIterator is returned from FilterBlockProposed and is used to iterate over the raw logs and unpacked data for BlockProposed events raised by the TaikoL1 contract. -type TaikoL1BlockProposedIterator struct { - Event *TaikoL1BlockProposed // Event containing the contract specifics and raw log +// TaikoL1BlobCachedIterator is returned from FilterBlobCached and is used to iterate over the raw logs and unpacked data for BlobCached events raised by the TaikoL1 contract. +type TaikoL1BlobCachedIterator struct { + Event *TaikoL1BlobCached // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1448,7 +1449,7 @@ type TaikoL1BlockProposedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlockProposedIterator) Next() bool { +func (it *TaikoL1BlobCachedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1457,7 +1458,7 @@ func (it *TaikoL1BlockProposedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed) + it.Event = new(TaikoL1BlobCached) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1472,7 +1473,7 @@ func (it *TaikoL1BlockProposedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed) + it.Event = new(TaikoL1BlobCached) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1488,63 +1489,41 @@ func (it *TaikoL1BlockProposedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlockProposedIterator) Error() error { +func (it *TaikoL1BlobCachedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlockProposedIterator) Close() error { +func (it *TaikoL1BlobCachedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlockProposed represents a BlockProposed event raised by the TaikoL1 contract. -type TaikoL1BlockProposed struct { - BlockId *big.Int - AssignedProver common.Address - LivenessBond *big.Int - Meta TaikoDataBlockMetadata - DepositsProcessed []TaikoDataEthDeposit - Raw types.Log // Blockchain specific contextual infos +// TaikoL1BlobCached represents a BlobCached event raised by the TaikoL1 contract. +type TaikoL1BlobCached struct { + BlobHash [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// FilterBlobCached is a free log retrieval operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposedIterator, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - var assignedProverRule []interface{} - for _, assignedProverItem := range assignedProver { - assignedProverRule = append(assignedProverRule, assignedProverItem) - } +// Solidity: event BlobCached(bytes32 blobHash) +func (_TaikoL1 *TaikoL1Filterer) FilterBlobCached(opts *bind.FilterOpts) (*TaikoL1BlobCachedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlobCached") if err != nil { return nil, err } - return &TaikoL1BlockProposedIterator{contract: _TaikoL1.contract, event: "BlockProposed", logs: logs, sub: sub}, nil + return &TaikoL1BlobCachedIterator{contract: _TaikoL1.contract, event: "BlobCached", logs: logs, sub: sub}, nil } -// WatchBlockProposed is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// WatchBlobCached is a free log subscription operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - var assignedProverRule []interface{} - for _, assignedProverItem := range assignedProver { - assignedProverRule = append(assignedProverRule, assignedProverItem) - } +// Solidity: event BlobCached(bytes32 blobHash) +func (_TaikoL1 *TaikoL1Filterer) WatchBlobCached(opts *bind.WatchOpts, sink chan<- *TaikoL1BlobCached) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlobCached") if err != nil { return nil, err } @@ -1554,8 +1533,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink c select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlockProposed) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { + event := new(TaikoL1BlobCached) + if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { return err } event.Raw = log @@ -1576,21 +1555,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink c }), nil } -// ParseBlockProposed is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// ParseBlobCached is a log parse operation binding the contract event 0xb303828b7c63a3e480df6d8239eb7be1d4a1eb1c8878d6fa461103b94f4ce852. // -// Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed(log types.Log) (*TaikoL1BlockProposed, error) { - event := new(TaikoL1BlockProposed) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { +// Solidity: event BlobCached(bytes32 blobHash) +func (_TaikoL1 *TaikoL1Filterer) ParseBlobCached(log types.Log) (*TaikoL1BlobCached, error) { + event := new(TaikoL1BlobCached) + if err := _TaikoL1.contract.UnpackLog(event, "BlobCached", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1BlockProposed0Iterator is returned from FilterBlockProposed0 and is used to iterate over the raw logs and unpacked data for BlockProposed0 events raised by the TaikoL1 contract. -type TaikoL1BlockProposed0Iterator struct { - Event *TaikoL1BlockProposed0 // Event containing the contract specifics and raw log +// TaikoL1BlockProposedIterator is returned from FilterBlockProposed and is used to iterate over the raw logs and unpacked data for BlockProposed events raised by the TaikoL1 contract. +type TaikoL1BlockProposedIterator struct { + Event *TaikoL1BlockProposed // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1604,7 +1583,7 @@ type TaikoL1BlockProposed0Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1BlockProposed0Iterator) Next() bool { +func (it *TaikoL1BlockProposedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1613,7 +1592,7 @@ func (it *TaikoL1BlockProposed0Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed0) + it.Event = new(TaikoL1BlockProposed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1628,7 +1607,7 @@ func (it *TaikoL1BlockProposed0Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1BlockProposed0) + it.Event = new(TaikoL1BlockProposed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1644,19 +1623,19 @@ func (it *TaikoL1BlockProposed0Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1BlockProposed0Iterator) Error() error { +func (it *TaikoL1BlockProposedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1BlockProposed0Iterator) Close() error { +func (it *TaikoL1BlockProposedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1BlockProposed0 represents a BlockProposed0 event raised by the TaikoL1 contract. -type TaikoL1BlockProposed0 struct { +// TaikoL1BlockProposed represents a BlockProposed event raised by the TaikoL1 contract. +type TaikoL1BlockProposed struct { BlockId *big.Int AssignedProver common.Address LivenessBond *big.Int @@ -1665,10 +1644,10 @@ type TaikoL1BlockProposed0 struct { Raw types.Log // Blockchain specific contextual infos } -// FilterBlockProposed0 is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// FilterBlockProposed is a free log retrieval operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // // Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposed0Iterator, error) { +func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed(opts *bind.FilterOpts, blockId []*big.Int, assignedProver []common.Address) (*TaikoL1BlockProposedIterator, error) { var blockIdRule []interface{} for _, blockIdItem := range blockId { @@ -1679,17 +1658,17 @@ func (_TaikoL1 *TaikoL1Filterer) FilterBlockProposed0(opts *bind.FilterOpts, blo assignedProverRule = append(assignedProverRule, assignedProverItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlockProposed0", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) if err != nil { return nil, err } - return &TaikoL1BlockProposed0Iterator{contract: _TaikoL1.contract, event: "BlockProposed0", logs: logs, sub: sub}, nil + return &TaikoL1BlockProposedIterator{contract: _TaikoL1.contract, event: "BlockProposed", logs: logs, sub: sub}, nil } -// WatchBlockProposed0 is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// WatchBlockProposed is a free log subscription operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // // Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed0, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { +func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed(opts *bind.WatchOpts, sink chan<- *TaikoL1BlockProposed, blockId []*big.Int, assignedProver []common.Address) (event.Subscription, error) { var blockIdRule []interface{} for _, blockIdItem := range blockId { @@ -1700,7 +1679,7 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink assignedProverRule = append(assignedProverRule, assignedProverItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlockProposed0", blockIdRule, assignedProverRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "BlockProposed", blockIdRule, assignedProverRule) if err != nil { return nil, err } @@ -1710,8 +1689,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1BlockProposed0) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed0", log); err != nil { + event := new(TaikoL1BlockProposed) + if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { return err } event.Raw = log @@ -1732,12 +1711,12 @@ func (_TaikoL1 *TaikoL1Filterer) WatchBlockProposed0(opts *bind.WatchOpts, sink }), nil } -// ParseBlockProposed0 is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. +// ParseBlockProposed is a log parse operation binding the contract event 0xa62cea5af360b010ef0d23472a2a7493b54175fd9fd2f9c2aa2bb427d2f4d3ca. // // Solidity: event BlockProposed(uint256 indexed blockId, address indexed assignedProver, uint96 livenessBond, (bytes32,bytes32,bytes32,bytes32,bytes32,address,uint64,uint32,uint64,uint64,uint24,uint24,uint16,bool,bytes32) meta, (address,uint96,uint64)[] depositsProcessed) -func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed0(log types.Log) (*TaikoL1BlockProposed0, error) { - event := new(TaikoL1BlockProposed0) - if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed0", log); err != nil { +func (_TaikoL1 *TaikoL1Filterer) ParseBlockProposed(log types.Log) (*TaikoL1BlockProposed, error) { + event := new(TaikoL1BlockProposed) + if err := _TaikoL1.contract.UnpackLog(event, "BlockProposed", log); err != nil { return nil, err } event.Raw = log @@ -2654,9 +2633,9 @@ func (_TaikoL1 *TaikoL1Filterer) ParseInitialized(log types.Log) (*TaikoL1Initia return event, nil } -// TaikoL1OwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferStartedIterator struct { - Event *TaikoL1OwnershipTransferStarted // Event containing the contract specifics and raw log +// TaikoL1OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the TaikoL1 contract. +type TaikoL1OwnershipTransferredIterator struct { + Event *TaikoL1OwnershipTransferred // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2670,7 +2649,7 @@ type TaikoL1OwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { +func (it *TaikoL1OwnershipTransferredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2679,7 +2658,7 @@ func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferStarted) + it.Event = new(TaikoL1OwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2694,7 +2673,7 @@ func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferStarted) + it.Event = new(TaikoL1OwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2710,28 +2689,28 @@ func (it *TaikoL1OwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1OwnershipTransferStartedIterator) Error() error { +func (it *TaikoL1OwnershipTransferredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1OwnershipTransferStartedIterator) Close() error { +func (it *TaikoL1OwnershipTransferredIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1OwnershipTransferStarted represents a OwnershipTransferStarted event raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferStarted struct { +// TaikoL1OwnershipTransferred represents a OwnershipTransferred event raised by the TaikoL1 contract. +type TaikoL1OwnershipTransferred struct { PreviousOwner common.Address NewOwner common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL1OwnershipTransferStartedIterator, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL1OwnershipTransferredIterator, error) { var previousOwnerRule []interface{} for _, previousOwnerItem := range previousOwner { @@ -2742,17 +2721,17 @@ func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferStarted(opts *bind.Filte newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } - return &TaikoL1OwnershipTransferStartedIterator{contract: _TaikoL1.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &TaikoL1OwnershipTransferredIterator{contract: _TaikoL1.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *TaikoL1OwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TaikoL1OwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { var previousOwnerRule []interface{} for _, previousOwnerItem := range previousOwner { @@ -2763,7 +2742,7 @@ func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } @@ -2773,8 +2752,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1OwnershipTransferStarted) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(TaikoL1OwnershipTransferred) + if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return err } event.Raw = log @@ -2795,21 +2774,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) ParseOwnershipTransferStarted(log types.Log) (*TaikoL1OwnershipTransferStarted, error) { - event := new(TaikoL1OwnershipTransferStarted) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_TaikoL1 *TaikoL1Filterer) ParseOwnershipTransferred(log types.Log) (*TaikoL1OwnershipTransferred, error) { + event := new(TaikoL1OwnershipTransferred) + if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferredIterator struct { - Event *TaikoL1OwnershipTransferred // Event containing the contract specifics and raw log +// TaikoL1PausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the TaikoL1 contract. +type TaikoL1PausedIterator struct { + Event *TaikoL1Paused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2823,7 +2802,7 @@ type TaikoL1OwnershipTransferredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1OwnershipTransferredIterator) Next() bool { +func (it *TaikoL1PausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2832,7 +2811,7 @@ func (it *TaikoL1OwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferred) + it.Event = new(TaikoL1Paused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2847,7 +2826,7 @@ func (it *TaikoL1OwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1OwnershipTransferred) + it.Event = new(TaikoL1Paused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2863,186 +2842,33 @@ func (it *TaikoL1OwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1OwnershipTransferredIterator) Error() error { +func (it *TaikoL1PausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1OwnershipTransferredIterator) Close() error { +func (it *TaikoL1PausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1OwnershipTransferred represents a OwnershipTransferred event raised by the TaikoL1 contract. -type TaikoL1OwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// TaikoL1Paused represents a Paused event raised by the TaikoL1 contract. +type TaikoL1Paused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL1OwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: event Paused(address account) +func (_TaikoL1 *TaikoL1Filterer) FilterPaused(opts *bind.FilterOpts) (*TaikoL1PausedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Paused") if err != nil { return nil, err } - return &TaikoL1OwnershipTransferredIterator{contract: _TaikoL1.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TaikoL1OwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1OwnershipTransferred) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_TaikoL1 *TaikoL1Filterer) ParseOwnershipTransferred(log types.Log) (*TaikoL1OwnershipTransferred, error) { - event := new(TaikoL1OwnershipTransferred) - if err := _TaikoL1.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// TaikoL1PausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the TaikoL1 contract. -type TaikoL1PausedIterator struct { - Event *TaikoL1Paused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1PausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1Paused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1Paused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1PausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1PausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1Paused represents a Paused event raised by the TaikoL1 contract. -type TaikoL1Paused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_TaikoL1 *TaikoL1Filterer) FilterPaused(opts *bind.FilterOpts) (*TaikoL1PausedIterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &TaikoL1PausedIterator{contract: _TaikoL1.contract, event: "Paused", logs: logs, sub: sub}, nil + return &TaikoL1PausedIterator{contract: _TaikoL1.contract, event: "Paused", logs: logs, sub: sub}, nil } // WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. @@ -3228,140 +3054,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseProvingPaused(log types.Log) (*TaikoL1Prov return event, nil } -// TaikoL1ProvingPaused0Iterator is returned from FilterProvingPaused0 and is used to iterate over the raw logs and unpacked data for ProvingPaused0 events raised by the TaikoL1 contract. -type TaikoL1ProvingPaused0Iterator struct { - Event *TaikoL1ProvingPaused0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1ProvingPaused0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1ProvingPaused0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1ProvingPaused0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1ProvingPaused0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1ProvingPaused0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1ProvingPaused0 represents a ProvingPaused0 event raised by the TaikoL1 contract. -type TaikoL1ProvingPaused0 struct { - Paused bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterProvingPaused0 is a free log retrieval operation binding the contract event 0xed64db85835d07c3c990b8ebdd55e32d64e5ed53143b6ef2179e7bfaf17ddc3b. -// -// Solidity: event ProvingPaused(bool paused) -func (_TaikoL1 *TaikoL1Filterer) FilterProvingPaused0(opts *bind.FilterOpts) (*TaikoL1ProvingPaused0Iterator, error) { - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "ProvingPaused0") - if err != nil { - return nil, err - } - return &TaikoL1ProvingPaused0Iterator{contract: _TaikoL1.contract, event: "ProvingPaused0", logs: logs, sub: sub}, nil -} - -// WatchProvingPaused0 is a free log subscription operation binding the contract event 0xed64db85835d07c3c990b8ebdd55e32d64e5ed53143b6ef2179e7bfaf17ddc3b. -// -// Solidity: event ProvingPaused(bool paused) -func (_TaikoL1 *TaikoL1Filterer) WatchProvingPaused0(opts *bind.WatchOpts, sink chan<- *TaikoL1ProvingPaused0) (event.Subscription, error) { - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "ProvingPaused0") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1ProvingPaused0) - if err := _TaikoL1.contract.UnpackLog(event, "ProvingPaused0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseProvingPaused0 is a log parse operation binding the contract event 0xed64db85835d07c3c990b8ebdd55e32d64e5ed53143b6ef2179e7bfaf17ddc3b. -// -// Solidity: event ProvingPaused(bool paused) -func (_TaikoL1 *TaikoL1Filterer) ParseProvingPaused0(log types.Log) (*TaikoL1ProvingPaused0, error) { - event := new(TaikoL1ProvingPaused0) - if err := _TaikoL1.contract.UnpackLog(event, "ProvingPaused0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TokenCreditedIterator is returned from FilterTokenCredited and is used to iterate over the raw logs and unpacked data for TokenCredited events raised by the TaikoL1 contract. type TaikoL1TokenCreditedIterator struct { Event *TaikoL1TokenCredited // Event containing the contract specifics and raw log @@ -4048,154 +3740,6 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTransitionContested(log types.Log) (*Taiko return event, nil } -// TaikoL1TransitionContested0Iterator is returned from FilterTransitionContested0 and is used to iterate over the raw logs and unpacked data for TransitionContested0 events raised by the TaikoL1 contract. -type TaikoL1TransitionContested0Iterator struct { - Event *TaikoL1TransitionContested0 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *TaikoL1TransitionContested0Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(TaikoL1TransitionContested0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(TaikoL1TransitionContested0) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TransitionContested0Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *TaikoL1TransitionContested0Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// TaikoL1TransitionContested0 represents a TransitionContested0 event raised by the TaikoL1 contract. -type TaikoL1TransitionContested0 struct { - BlockId *big.Int - Tran TaikoDataTransition - Contester common.Address - ContestBond *big.Int - Tier uint16 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransitionContested0 is a free log retrieval operation binding the contract event 0xb4c0a86c1ff239277697775b1e91d3375fd3a5ef6b345aa4e2f6001c890558f6. -// -// Solidity: event TransitionContested(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address contester, uint96 contestBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) FilterTransitionContested0(opts *bind.FilterOpts, blockId []*big.Int) (*TaikoL1TransitionContested0Iterator, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TransitionContested0", blockIdRule) - if err != nil { - return nil, err - } - return &TaikoL1TransitionContested0Iterator{contract: _TaikoL1.contract, event: "TransitionContested0", logs: logs, sub: sub}, nil -} - -// WatchTransitionContested0 is a free log subscription operation binding the contract event 0xb4c0a86c1ff239277697775b1e91d3375fd3a5ef6b345aa4e2f6001c890558f6. -// -// Solidity: event TransitionContested(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address contester, uint96 contestBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) WatchTransitionContested0(opts *bind.WatchOpts, sink chan<- *TaikoL1TransitionContested0, blockId []*big.Int) (event.Subscription, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } - - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TransitionContested0", blockIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(TaikoL1TransitionContested0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionContested0", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransitionContested0 is a log parse operation binding the contract event 0xb4c0a86c1ff239277697775b1e91d3375fd3a5ef6b345aa4e2f6001c890558f6. -// -// Solidity: event TransitionContested(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address contester, uint96 contestBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) ParseTransitionContested0(log types.Log) (*TaikoL1TransitionContested0, error) { - event := new(TaikoL1TransitionContested0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionContested0", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // TaikoL1TransitionProvedIterator is returned from FilterTransitionProved and is used to iterate over the raw logs and unpacked data for TransitionProved events raised by the TaikoL1 contract. type TaikoL1TransitionProvedIterator struct { Event *TaikoL1TransitionProved // Event containing the contract specifics and raw log @@ -4344,9 +3888,9 @@ func (_TaikoL1 *TaikoL1Filterer) ParseTransitionProved(log types.Log) (*TaikoL1T return event, nil } -// TaikoL1TransitionProved0Iterator is returned from FilterTransitionProved0 and is used to iterate over the raw logs and unpacked data for TransitionProved0 events raised by the TaikoL1 contract. -type TaikoL1TransitionProved0Iterator struct { - Event *TaikoL1TransitionProved0 // Event containing the contract specifics and raw log +// TaikoL1UnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the TaikoL1 contract. +type TaikoL1UnpausedIterator struct { + Event *TaikoL1Unpaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -4360,7 +3904,7 @@ type TaikoL1TransitionProved0Iterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1TransitionProved0Iterator) Next() bool { +func (it *TaikoL1UnpausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -4369,7 +3913,7 @@ func (it *TaikoL1TransitionProved0Iterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1TransitionProved0) + it.Event = new(TaikoL1Unpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4384,7 +3928,7 @@ func (it *TaikoL1TransitionProved0Iterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1TransitionProved0) + it.Event = new(TaikoL1Unpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4400,55 +3944,41 @@ func (it *TaikoL1TransitionProved0Iterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1TransitionProved0Iterator) Error() error { +func (it *TaikoL1UnpausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1TransitionProved0Iterator) Close() error { +func (it *TaikoL1UnpausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1TransitionProved0 represents a TransitionProved0 event raised by the TaikoL1 contract. -type TaikoL1TransitionProved0 struct { - BlockId *big.Int - Tran TaikoDataTransition - Prover common.Address - ValidityBond *big.Int - Tier uint16 - Raw types.Log // Blockchain specific contextual infos +// TaikoL1Unpaused represents a Unpaused event raised by the TaikoL1 contract. +type TaikoL1Unpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterTransitionProved0 is a free log retrieval operation binding the contract event 0xc195e4be3b936845492b8be4b1cf604db687a4d79ad84d979499c136f8e6701f. +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event TransitionProved(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address prover, uint96 validityBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) FilterTransitionProved0(opts *bind.FilterOpts, blockId []*big.Int) (*TaikoL1TransitionProved0Iterator, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } +// Solidity: event Unpaused(address account) +func (_TaikoL1 *TaikoL1Filterer) FilterUnpaused(opts *bind.FilterOpts) (*TaikoL1UnpausedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "TransitionProved0", blockIdRule) + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Unpaused") if err != nil { return nil, err } - return &TaikoL1TransitionProved0Iterator{contract: _TaikoL1.contract, event: "TransitionProved0", logs: logs, sub: sub}, nil + return &TaikoL1UnpausedIterator{contract: _TaikoL1.contract, event: "Unpaused", logs: logs, sub: sub}, nil } -// WatchTransitionProved0 is a free log subscription operation binding the contract event 0xc195e4be3b936845492b8be4b1cf604db687a4d79ad84d979499c136f8e6701f. +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event TransitionProved(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address prover, uint96 validityBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) WatchTransitionProved0(opts *bind.WatchOpts, sink chan<- *TaikoL1TransitionProved0, blockId []*big.Int) (event.Subscription, error) { - - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) - } +// Solidity: event Unpaused(address account) +func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *TaikoL1Unpaused) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "TransitionProved0", blockIdRule) + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "Unpaused") if err != nil { return nil, err } @@ -4458,8 +3988,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchTransitionProved0(opts *bind.WatchOpts, si select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1TransitionProved0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionProved0", log); err != nil { + event := new(TaikoL1Unpaused) + if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { return err } event.Raw = log @@ -4480,21 +4010,21 @@ func (_TaikoL1 *TaikoL1Filterer) WatchTransitionProved0(opts *bind.WatchOpts, si }), nil } -// ParseTransitionProved0 is a log parse operation binding the contract event 0xc195e4be3b936845492b8be4b1cf604db687a4d79ad84d979499c136f8e6701f. +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event TransitionProved(uint256 indexed blockId, (bytes32,bytes32,bytes32,bytes32) tran, address prover, uint96 validityBond, uint16 tier) -func (_TaikoL1 *TaikoL1Filterer) ParseTransitionProved0(log types.Log) (*TaikoL1TransitionProved0, error) { - event := new(TaikoL1TransitionProved0) - if err := _TaikoL1.contract.UnpackLog(event, "TransitionProved0", log); err != nil { +// Solidity: event Unpaused(address account) +func (_TaikoL1 *TaikoL1Filterer) ParseUnpaused(log types.Log) (*TaikoL1Unpaused, error) { + event := new(TaikoL1Unpaused) + if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL1UnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the TaikoL1 contract. -type TaikoL1UnpausedIterator struct { - Event *TaikoL1Unpaused // Event containing the contract specifics and raw log +// TaikoL1UpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the TaikoL1 contract. +type TaikoL1UpgradedIterator struct { + Event *TaikoL1Upgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -4508,7 +4038,7 @@ type TaikoL1UnpausedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL1UnpausedIterator) Next() bool { +func (it *TaikoL1UpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -4517,7 +4047,7 @@ func (it *TaikoL1UnpausedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL1Unpaused) + it.Event = new(TaikoL1Upgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4532,7 +4062,7 @@ func (it *TaikoL1UnpausedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL1Unpaused) + it.Event = new(TaikoL1Upgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4548,41 +4078,51 @@ func (it *TaikoL1UnpausedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL1UnpausedIterator) Error() error { +func (it *TaikoL1UpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL1UnpausedIterator) Close() error { +func (it *TaikoL1UpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL1Unpaused represents a Unpaused event raised by the TaikoL1 contract. -type TaikoL1Unpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos +// TaikoL1Upgraded represents a Upgraded event raised by the TaikoL1 contract. +type TaikoL1Upgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event Unpaused(address account) -func (_TaikoL1 *TaikoL1Filterer) FilterUnpaused(opts *bind.FilterOpts) (*TaikoL1UnpausedIterator, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL1 *TaikoL1Filterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*TaikoL1UpgradedIterator, error) { - logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Unpaused") + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TaikoL1.contract.FilterLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } - return &TaikoL1UnpausedIterator{contract: _TaikoL1.contract, event: "Unpaused", logs: logs, sub: sub}, nil + return &TaikoL1UpgradedIterator{contract: _TaikoL1.contract, event: "Upgraded", logs: logs, sub: sub}, nil } -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event Unpaused(address account) -func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *TaikoL1Unpaused) (event.Subscription, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL1 *TaikoL1Filterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *TaikoL1Upgraded, implementation []common.Address) (event.Subscription, error) { - logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "Unpaused") + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TaikoL1.contract.WatchLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } @@ -4592,8 +4132,8 @@ func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL1Unpaused) - if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { + event := new(TaikoL1Upgraded) + if err := _TaikoL1.contract.UnpackLog(event, "Upgraded", log); err != nil { return err } event.Raw = log @@ -4614,12 +4154,12 @@ func (_TaikoL1 *TaikoL1Filterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- }), nil } -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event Unpaused(address account) -func (_TaikoL1 *TaikoL1Filterer) ParseUnpaused(log types.Log) (*TaikoL1Unpaused, error) { - event := new(TaikoL1Unpaused) - if err := _TaikoL1.contract.UnpackLog(event, "Unpaused", log); err != nil { +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL1 *TaikoL1Filterer) ParseUpgraded(log types.Log) (*TaikoL1Upgraded, error) { + event := new(TaikoL1Upgraded) + if err := _TaikoL1.contract.UnpackLog(event, "Upgraded", log); err != nil { return nil, err } event.Raw = log diff --git a/packages/relayer/bindings/taikol2/TaikoL2.go b/packages/relayer/bindings/taikol2/TaikoL2.go index c42f60def9e..6690f2f6ea6 100644 --- a/packages/relayer/bindings/taikol2/TaikoL2.go +++ b/packages/relayer/bindings/taikol2/TaikoL2.go @@ -45,7 +45,7 @@ type TaikoL2Config struct { // TaikoL2MetaData contains all meta data concerning the TaikoL2 contract. var TaikoL2MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"EIP1559_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_BASEFEE_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_GOLDEN_TOUCH_K\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_SENDER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_PUBLIC_INPUT_HASH_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_TOO_LATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Overflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasExcess\",\"type\":\"uint64\"}],\"name\":\"Anchored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_PRIVATEKEY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l1SignalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"anchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasExcess\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"getBasefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"basefee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasTargetPerL1Block\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"basefeeAdjustmentQuotient\",\"type\":\"uint8\"}],\"internalType\":\"structTaikoL2.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signalService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_gasExcess\",\"type\":\"uint64\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"}],\"name\":\"l2Hashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestSyncedL1Height\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"k\",\"type\":\"uint8\"}],\"name\":\"signAnchor\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signalService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipFeeCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l1height\",\"type\":\"uint256\"}],\"name\":\"snippets\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"EIP1559_INVALID_PARAMS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_BASEFEE_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_CHAIN_ID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_GOLDEN_TOUCH_K\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_PARAM\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_INVALID_SENDER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_PUBLIC_INPUT_HASH_MISMATCH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L2_TOO_LATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Overflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_INVALID_MANAGER\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"RESOLVER_ZERO_ADDR\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"parentHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"gasExcess\",\"type\":\"uint64\"}],\"name\":\"Anchored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"name\":\"CrossChainSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOLDEN_TOUCH_PRIVATEKEY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l1SignalRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"anchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasExcess\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"l1Height\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"parentGasUsed\",\"type\":\"uint32\"}],\"name\":\"getBasefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"basefee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasTargetPerL1Block\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"basefeeAdjustmentQuotient\",\"type\":\"uint8\"}],\"internalType\":\"structTaikoL2.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockId\",\"type\":\"uint64\"}],\"name\":\"getSyncedSnippet\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structICrossChainSync.Snippet\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signalService\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_gasExcess\",\"type\":\"uint64\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockId\",\"type\":\"uint256\"}],\"name\":\"l2Hashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestSyncedL1Height\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"allowZeroAddress\",\"type\":\"bool\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"k\",\"type\":\"uint8\"}],\"name\":\"signAnchor\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signalService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipFeeCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l1height\",\"type\":\"uint256\"}],\"name\":\"snippets\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteBlockId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"syncedInBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"signalRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // TaikoL2ABI is the input ABI used to generate the binding from. @@ -566,35 +566,35 @@ func (_TaikoL2 *TaikoL2CallerSession) Paused() (bool, error) { return _TaikoL2.Contract.Paused(&_TaikoL2.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL2 *TaikoL2Caller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL2 *TaikoL2Caller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _TaikoL2.contract.Call(opts, &out, "pendingOwner") + err := _TaikoL2.contract.Call(opts, &out, "proxiableUUID") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL2 *TaikoL2Session) PendingOwner() (common.Address, error) { - return _TaikoL2.Contract.PendingOwner(&_TaikoL2.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL2 *TaikoL2Session) ProxiableUUID() ([32]byte, error) { + return _TaikoL2.Contract.ProxiableUUID(&_TaikoL2.CallOpts) } -// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function pendingOwner() view returns(address) -func (_TaikoL2 *TaikoL2CallerSession) PendingOwner() (common.Address, error) { - return _TaikoL2.Contract.PendingOwner(&_TaikoL2.CallOpts) +// Solidity: function proxiableUUID() view returns(bytes32) +func (_TaikoL2 *TaikoL2CallerSession) ProxiableUUID() ([32]byte, error) { + return _TaikoL2.Contract.ProxiableUUID(&_TaikoL2.CallOpts) } // PublicInputHash is a free data retrieval call binding the contract method 0xdac5df78. @@ -857,27 +857,6 @@ func (_TaikoL2 *TaikoL2CallerSession) Snippets(l1height *big.Int) (struct { return _TaikoL2.Contract.Snippets(&_TaikoL2.CallOpts, l1height) } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL2 *TaikoL2Transactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _TaikoL2.contract.Transact(opts, "acceptOwnership") -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL2 *TaikoL2Session) AcceptOwnership() (*types.Transaction, error) { - return _TaikoL2.Contract.AcceptOwnership(&_TaikoL2.TransactOpts) -} - -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_TaikoL2 *TaikoL2TransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _TaikoL2.Contract.AcceptOwnership(&_TaikoL2.TransactOpts) -} - // Anchor is a paid mutator transaction binding the contract method 0xda69d3db. // // Solidity: function anchor(bytes32 l1BlockHash, bytes32 l1SignalRoot, uint64 l1Height, uint32 parentGasUsed) returns() @@ -1004,6 +983,183 @@ func (_TaikoL2 *TaikoL2TransactorSession) Unpause() (*types.Transaction, error) return _TaikoL2.Contract.Unpause(&_TaikoL2.TransactOpts) } +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL2 *TaikoL2Transactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL2.contract.Transact(opts, "upgradeTo", newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL2 *TaikoL2Session) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL2.Contract.UpgradeTo(&_TaikoL2.TransactOpts, newImplementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address newImplementation) returns() +func (_TaikoL2 *TaikoL2TransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { + return _TaikoL2.Contract.UpgradeTo(&_TaikoL2.TransactOpts, newImplementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL2 *TaikoL2Transactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL2.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL2 *TaikoL2Session) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL2.Contract.UpgradeToAndCall(&_TaikoL2.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_TaikoL2 *TaikoL2TransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _TaikoL2.Contract.UpgradeToAndCall(&_TaikoL2.TransactOpts, newImplementation, data) +} + +// TaikoL2AdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the TaikoL2 contract. +type TaikoL2AdminChangedIterator struct { + Event *TaikoL2AdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TaikoL2AdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TaikoL2AdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TaikoL2AdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TaikoL2AdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TaikoL2AdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TaikoL2AdminChanged represents a AdminChanged event raised by the TaikoL2 contract. +type TaikoL2AdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL2 *TaikoL2Filterer) FilterAdminChanged(opts *bind.FilterOpts) (*TaikoL2AdminChangedIterator, error) { + + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &TaikoL2AdminChangedIterator{contract: _TaikoL2.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL2 *TaikoL2Filterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *TaikoL2AdminChanged) (event.Subscription, error) { + + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TaikoL2AdminChanged) + if err := _TaikoL2.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_TaikoL2 *TaikoL2Filterer) ParseAdminChanged(log types.Log) (*TaikoL2AdminChanged, error) { + event := new(TaikoL2AdminChanged) + if err := _TaikoL2.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // TaikoL2AnchoredIterator is returned from FilterAnchored and is used to iterate over the raw logs and unpacked data for Anchored events raised by the TaikoL2 contract. type TaikoL2AnchoredIterator struct { Event *TaikoL2Anchored // Event containing the contract specifics and raw log @@ -1139,9 +1295,9 @@ func (_TaikoL2 *TaikoL2Filterer) ParseAnchored(log types.Log) (*TaikoL2Anchored, return event, nil } -// TaikoL2CrossChainSyncedIterator is returned from FilterCrossChainSynced and is used to iterate over the raw logs and unpacked data for CrossChainSynced events raised by the TaikoL2 contract. -type TaikoL2CrossChainSyncedIterator struct { - Event *TaikoL2CrossChainSynced // Event containing the contract specifics and raw log +// TaikoL2BeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the TaikoL2 contract. +type TaikoL2BeaconUpgradedIterator struct { + Event *TaikoL2BeaconUpgraded // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1155,7 +1311,7 @@ type TaikoL2CrossChainSyncedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL2CrossChainSyncedIterator) Next() bool { +func (it *TaikoL2BeaconUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1164,7 +1320,7 @@ func (it *TaikoL2CrossChainSyncedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL2CrossChainSynced) + it.Event = new(TaikoL2BeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1179,7 +1335,7 @@ func (it *TaikoL2CrossChainSyncedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL2CrossChainSynced) + it.Event = new(TaikoL2BeaconUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1195,62 +1351,51 @@ func (it *TaikoL2CrossChainSyncedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL2CrossChainSyncedIterator) Error() error { +func (it *TaikoL2BeaconUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL2CrossChainSyncedIterator) Close() error { +func (it *TaikoL2BeaconUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL2CrossChainSynced represents a CrossChainSynced event raised by the TaikoL2 contract. -type TaikoL2CrossChainSynced struct { - SyncedInBlock uint64 - BlockId uint64 - BlockHash [32]byte - SignalRoot [32]byte - Raw types.Log // Blockchain specific contextual infos +// TaikoL2BeaconUpgraded represents a BeaconUpgraded event raised by the TaikoL2 contract. +type TaikoL2BeaconUpgraded struct { + Beacon common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterCrossChainSynced is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. +// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL2 *TaikoL2Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL2CrossChainSyncedIterator, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL2 *TaikoL2Filterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*TaikoL2BeaconUpgradedIterator, error) { - var syncedInBlockRule []interface{} - for _, syncedInBlockItem := range syncedInBlock { - syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) - } - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) } - logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } - return &TaikoL2CrossChainSyncedIterator{contract: _TaikoL2.contract, event: "CrossChainSynced", logs: logs, sub: sub}, nil + return &TaikoL2BeaconUpgradedIterator{contract: _TaikoL2.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil } -// WatchCrossChainSynced is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. +// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL2CrossChainSynced, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL2 *TaikoL2Filterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *TaikoL2BeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - var syncedInBlockRule []interface{} - for _, syncedInBlockItem := range syncedInBlock { - syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) - } - var blockIdRule []interface{} - for _, blockIdItem := range blockId { - blockIdRule = append(blockIdRule, blockIdItem) + var beaconRule []interface{} + for _, beaconItem := range beacon { + beaconRule = append(beaconRule, beaconItem) } - logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) if err != nil { return nil, err } @@ -1260,8 +1405,8 @@ func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sin select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL2CrossChainSynced) - if err := _TaikoL2.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { + event := new(TaikoL2BeaconUpgraded) + if err := _TaikoL2.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return err } event.Raw = log @@ -1282,21 +1427,21 @@ func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sin }), nil } -// ParseCrossChainSynced is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. +// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. // -// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) -func (_TaikoL2 *TaikoL2Filterer) ParseCrossChainSynced(log types.Log) (*TaikoL2CrossChainSynced, error) { - event := new(TaikoL2CrossChainSynced) - if err := _TaikoL2.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { +// Solidity: event BeaconUpgraded(address indexed beacon) +func (_TaikoL2 *TaikoL2Filterer) ParseBeaconUpgraded(log types.Log) (*TaikoL2BeaconUpgraded, error) { + event := new(TaikoL2BeaconUpgraded) + if err := _TaikoL2.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL2InitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the TaikoL2 contract. -type TaikoL2InitializedIterator struct { - Event *TaikoL2Initialized // Event containing the contract specifics and raw log +// TaikoL2CrossChainSyncedIterator is returned from FilterCrossChainSynced and is used to iterate over the raw logs and unpacked data for CrossChainSynced events raised by the TaikoL2 contract. +type TaikoL2CrossChainSyncedIterator struct { + Event *TaikoL2CrossChainSynced // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1310,7 +1455,7 @@ type TaikoL2InitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL2InitializedIterator) Next() bool { +func (it *TaikoL2CrossChainSyncedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1319,7 +1464,7 @@ func (it *TaikoL2InitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL2Initialized) + it.Event = new(TaikoL2CrossChainSynced) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1334,7 +1479,7 @@ func (it *TaikoL2InitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL2Initialized) + it.Event = new(TaikoL2CrossChainSynced) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1350,41 +1495,62 @@ func (it *TaikoL2InitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL2InitializedIterator) Error() error { +func (it *TaikoL2CrossChainSyncedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL2InitializedIterator) Close() error { +func (it *TaikoL2CrossChainSyncedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL2Initialized represents a Initialized event raised by the TaikoL2 contract. -type TaikoL2Initialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// TaikoL2CrossChainSynced represents a CrossChainSynced event raised by the TaikoL2 contract. +type TaikoL2CrossChainSynced struct { + SyncedInBlock uint64 + BlockId uint64 + BlockHash [32]byte + SignalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterCrossChainSynced is a free log retrieval operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event Initialized(uint8 version) -func (_TaikoL2 *TaikoL2Filterer) FilterInitialized(opts *bind.FilterOpts) (*TaikoL2InitializedIterator, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL2 *TaikoL2Filterer) FilterCrossChainSynced(opts *bind.FilterOpts, syncedInBlock []uint64, blockId []uint64) (*TaikoL2CrossChainSyncedIterator, error) { - logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "Initialized") + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) + } + + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } - return &TaikoL2InitializedIterator{contract: _TaikoL2.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &TaikoL2CrossChainSyncedIterator{contract: _TaikoL2.contract, event: "CrossChainSynced", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchCrossChainSynced is a free log subscription operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event Initialized(uint8 version) -func (_TaikoL2 *TaikoL2Filterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *TaikoL2Initialized) (event.Subscription, error) { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL2 *TaikoL2Filterer) WatchCrossChainSynced(opts *bind.WatchOpts, sink chan<- *TaikoL2CrossChainSynced, syncedInBlock []uint64, blockId []uint64) (event.Subscription, error) { - logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "Initialized") + var syncedInBlockRule []interface{} + for _, syncedInBlockItem := range syncedInBlock { + syncedInBlockRule = append(syncedInBlockRule, syncedInBlockItem) + } + var blockIdRule []interface{} + for _, blockIdItem := range blockId { + blockIdRule = append(blockIdRule, blockIdItem) + } + + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "CrossChainSynced", syncedInBlockRule, blockIdRule) if err != nil { return nil, err } @@ -1394,8 +1560,8 @@ func (_TaikoL2 *TaikoL2Filterer) WatchInitialized(opts *bind.WatchOpts, sink cha select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL2Initialized) - if err := _TaikoL2.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(TaikoL2CrossChainSynced) + if err := _TaikoL2.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { return err } event.Raw = log @@ -1416,21 +1582,21 @@ func (_TaikoL2 *TaikoL2Filterer) WatchInitialized(opts *bind.WatchOpts, sink cha }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseCrossChainSynced is a log parse operation binding the contract event 0xf35ec3b262cf74881db1b8051c635496bccb1497a1e776dacb463d0e0e2b0f51. // -// Solidity: event Initialized(uint8 version) -func (_TaikoL2 *TaikoL2Filterer) ParseInitialized(log types.Log) (*TaikoL2Initialized, error) { - event := new(TaikoL2Initialized) - if err := _TaikoL2.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event CrossChainSynced(uint64 indexed syncedInBlock, uint64 indexed blockId, bytes32 blockHash, bytes32 signalRoot) +func (_TaikoL2 *TaikoL2Filterer) ParseCrossChainSynced(log types.Log) (*TaikoL2CrossChainSynced, error) { + event := new(TaikoL2CrossChainSynced) + if err := _TaikoL2.contract.UnpackLog(event, "CrossChainSynced", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TaikoL2OwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the TaikoL2 contract. -type TaikoL2OwnershipTransferStartedIterator struct { - Event *TaikoL2OwnershipTransferStarted // Event containing the contract specifics and raw log +// TaikoL2InitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the TaikoL2 contract. +type TaikoL2InitializedIterator struct { + Event *TaikoL2Initialized // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1444,7 +1610,7 @@ type TaikoL2OwnershipTransferStartedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TaikoL2OwnershipTransferStartedIterator) Next() bool { +func (it *TaikoL2InitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1453,7 +1619,7 @@ func (it *TaikoL2OwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TaikoL2OwnershipTransferStarted) + it.Event = new(TaikoL2Initialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1468,7 +1634,7 @@ func (it *TaikoL2OwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TaikoL2OwnershipTransferStarted) + it.Event = new(TaikoL2Initialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1484,60 +1650,41 @@ func (it *TaikoL2OwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TaikoL2OwnershipTransferStartedIterator) Error() error { +func (it *TaikoL2InitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TaikoL2OwnershipTransferStartedIterator) Close() error { +func (it *TaikoL2InitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TaikoL2OwnershipTransferStarted represents a OwnershipTransferStarted event raised by the TaikoL2 contract. -type TaikoL2OwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// TaikoL2Initialized represents a Initialized event raised by the TaikoL2 contract. +type TaikoL2Initialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL2 *TaikoL2Filterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TaikoL2OwnershipTransferStartedIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: event Initialized(uint8 version) +func (_TaikoL2 *TaikoL2Filterer) FilterInitialized(opts *bind.FilterOpts) (*TaikoL2InitializedIterator, error) { - logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &TaikoL2OwnershipTransferStartedIterator{contract: _TaikoL2.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &TaikoL2InitializedIterator{contract: _TaikoL2.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL2 *TaikoL2Filterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *TaikoL2OwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: event Initialized(uint8 version) +func (_TaikoL2 *TaikoL2Filterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *TaikoL2Initialized) (event.Subscription, error) { - logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -1547,8 +1694,8 @@ func (_TaikoL2 *TaikoL2Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TaikoL2OwnershipTransferStarted) - if err := _TaikoL2.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(TaikoL2Initialized) + if err := _TaikoL2.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -1569,12 +1716,12 @@ func (_TaikoL2 *TaikoL2Filterer) WatchOwnershipTransferStarted(opts *bind.WatchO }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_TaikoL2 *TaikoL2Filterer) ParseOwnershipTransferStarted(log types.Log) (*TaikoL2OwnershipTransferStarted, error) { - event := new(TaikoL2OwnershipTransferStarted) - if err := _TaikoL2.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event Initialized(uint8 version) +func (_TaikoL2 *TaikoL2Filterer) ParseInitialized(log types.Log) (*TaikoL2Initialized, error) { + event := new(TaikoL2Initialized) + if err := _TaikoL2.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log @@ -2001,3 +2148,147 @@ func (_TaikoL2 *TaikoL2Filterer) ParseUnpaused(log types.Log) (*TaikoL2Unpaused, event.Raw = log return event, nil } + +// TaikoL2UpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the TaikoL2 contract. +type TaikoL2UpgradedIterator struct { + Event *TaikoL2Upgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TaikoL2UpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TaikoL2Upgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TaikoL2Upgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TaikoL2UpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TaikoL2UpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TaikoL2Upgraded represents a Upgraded event raised by the TaikoL2 contract. +type TaikoL2Upgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL2 *TaikoL2Filterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*TaikoL2UpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TaikoL2.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &TaikoL2UpgradedIterator{contract: _TaikoL2.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL2 *TaikoL2Filterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *TaikoL2Upgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _TaikoL2.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TaikoL2Upgraded) + if err := _TaikoL2.contract.UnpackLog(event, "Upgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_TaikoL2 *TaikoL2Filterer) ParseUpgraded(log types.Log) (*TaikoL2Upgraded, error) { + event := new(TaikoL2Upgraded) + if err := _TaikoL2.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} From ce23c55eecacf28a55d13b55ae998479127b06c8 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 2 Dec 2023 00:29:26 +0800 Subject: [PATCH 12/17] feat: update `AuthorizeRemoteTaikoProtocols` --- packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol b/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol index a0832a3fe55..60969210076 100644 --- a/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol +++ b/packages/protocol/script/AuthorizeRemoteTaikoProtocols.s.sol @@ -27,7 +27,10 @@ contract AuthorizeRemoteTaikoProtocols is Script { SignalService signalService = SignalService(payable(signalServiceAddress)); for (uint256 i; i < remoteChainIDs.length; ++i) { console2.log(remoteTaikoProtocols[i], "--->", remoteChainIDs[i]); - signalService.authorize(remoteTaikoProtocols[i], bytes32(remoteChainIDs[i])); + if (!signalService.isAuthorizedAs(remoteTaikoProtocols[i], bytes32(remoteChainIDs[i]))) + { + signalService.authorize(remoteTaikoProtocols[i], bytes32(remoteChainIDs[i])); + } } vm.stopBroadcast(); From 0dd007479c654da179a031d8cd8a41b2fadf1773 Mon Sep 17 00:00:00 2001 From: Jeffery Walsh Date: Fri, 1 Dec 2023 15:45:51 -0800 Subject: [PATCH 13/17] generator fix --- packages/eventindexer/generator/generator.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eventindexer/generator/generator.go b/packages/eventindexer/generator/generator.go index 3bf7a70fe72..d0b937f659e 100644 --- a/packages/eventindexer/generator/generator.go +++ b/packages/eventindexer/generator/generator.go @@ -193,7 +193,7 @@ func (g *Generator) queryByTask(task string, date time.Time) error { case tasks.TotalProofRewards: var feeTokenAddresses []string = make([]string, 0) // get unique fee token addresses - query := "SELECT DISTINCT(fee_token_address) FROM events WHERE stat_type = ?" + query := "SELECT DISTINCT(fee_token_address) FROM stats WHERE stat_type = ?" err = g.db.GormDB(). Raw(query, eventindexer.EventNameBlockAssigned). @@ -247,7 +247,7 @@ func (g *Generator) queryByTask(task string, date time.Time) error { case tasks.ProofRewardsPerDay: var feeTokenAddresses []string = make([]string, 0) // get unique fee token addresses - query := "SELECT DISTINCT(fee_token_address) FROM events WHERE stat_type = ?" + query := "SELECT DISTINCT(fee_token_address) FROM stats WHERE stat_type = ?" err = g.db.GormDB(). Raw(query, eventindexer.EventNameBlockAssigned). From df6917a6ff8fff28caf56f83a8e666e569392486 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 2 Dec 2023 17:44:50 +0300 Subject: [PATCH 14/17] feat(protocol): add `TIMELOCK_ADDRESS` to `SetRemoteBridgeSuites` script (#15310) Co-authored-by: Daniel Wang <99078276+dantaik@users.noreply.github.com> --- .../script/SetRemoteBridgeSuites.s.sol | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/packages/protocol/script/SetRemoteBridgeSuites.s.sol b/packages/protocol/script/SetRemoteBridgeSuites.s.sol index f79a04a48ee..e18042856e6 100644 --- a/packages/protocol/script/SetRemoteBridgeSuites.s.sol +++ b/packages/protocol/script/SetRemoteBridgeSuites.s.sol @@ -7,9 +7,12 @@ pragma solidity ^0.8.20; import "../test/DeployCapability.sol"; +import "../contracts/L1/gov/TaikoTimelockController.sol"; contract SetRemoteBridgeSuites is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); + uint256 public securityCouncilPrivateKey = vm.envUint("SECURITY_COUNCIL_PRIVATE_KEY"); + address public timelockAddress = vm.envAddress("TIMELOCK_ADDRESS"); address public addressManagerAddress = vm.envAddress("ADDRESS_MANAGER_ADDRESS"); uint256[] public remoteChainIDs = vm.envUint("REMOTE_CHAIN_IDS", ","); address[] public remoteBridges = vm.envAddress("REMOTE_BRIDGES", ","); @@ -39,15 +42,48 @@ contract SetRemoteBridgeSuites is DeployCapability { for (uint256 i; i < remoteChainIDs.length; ++i) { uint64 chainid = uint64(remoteChainIDs[i]); - register(addressManagerAddress, "bridge", remoteBridges[i], chainid); + if (securityCouncilPrivateKey == 0) { + register(addressManagerAddress, "bridge", remoteBridges[i], chainid); + register(addressManagerAddress, "erc20_vault", remoteERC20Vaults[i], chainid); + register(addressManagerAddress, "erc721_vault", remoteERC721Vaults[i], chainid); + register(addressManagerAddress, "erc1155_vault", remoteERC1155Vaults[i], chainid); + return; + } - register(addressManagerAddress, "erc20_vault", remoteERC20Vaults[i], chainid); - - register(addressManagerAddress, "erc721_vault", remoteERC721Vaults[i], chainid); - - register(addressManagerAddress, "erc1155_vault", remoteERC1155Vaults[i], chainid); + registerByTimelock(addressManagerAddress, "bridge", remoteBridges[i], chainid); + registerByTimelock(addressManagerAddress, "erc20_vault", remoteERC20Vaults[i], chainid); + registerByTimelock( + addressManagerAddress, "erc721_vault", remoteERC721Vaults[i], chainid + ); + registerByTimelock( + addressManagerAddress, "erc1155_vault", remoteERC1155Vaults[i], chainid + ); } vm.stopBroadcast(); } + + function registerByTimelock( + address registerTo, + string memory name, + address addr, + uint64 chainId + ) + internal + { + bytes32 salt = bytes32(block.timestamp); + + bytes memory payload = abi.encodeWithSelector( + bytes4(keccak256("setAddress(uint64,bytes32,address)")), name, addr, chainId + ); + + TaikoTimelockController timelock = TaikoTimelockController(payable(timelockAddress)); + + timelock.schedule(registerTo, 0, payload, bytes32(0), salt, 0); + + timelock.execute(registerTo, 0, payload, bytes32(0), salt); + + console2.log("> ", name, "@", registerTo); + console2.log("\t addr : ", addr); + } } From 8fc68a50a3f28b0525b149c274000d095b499225 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 2 Dec 2023 22:49:03 +0800 Subject: [PATCH 15/17] renam init function names --- packages/protocol/contracts/L1/TaikoL1.sol | 2 +- packages/protocol/contracts/L1/TaikoToken.sol | 2 +- packages/protocol/contracts/L1/gov/TaikoGovernor.sol | 2 +- .../contracts/L1/gov/TaikoTimelockController.sol | 2 +- .../protocol/contracts/L1/hooks/AssignmentHook.sol | 2 +- .../protocol/contracts/L1/provers/GuardianProver.sol | 2 +- .../contracts/L1/tiers/TaikoA6TierProvider.sol | 2 +- .../contracts/L1/verifiers/GuardianVerifier.sol | 2 +- .../protocol/contracts/L1/verifiers/PseZkVerifier.sol | 2 +- .../contracts/L1/verifiers/SgxAndZkVerifier.sol | 2 +- .../protocol/contracts/L1/verifiers/SgxVerifier.sol | 2 +- packages/protocol/contracts/L2/TaikoL2.sol | 2 +- packages/protocol/contracts/bridge/Bridge.sol | 2 +- packages/protocol/contracts/common/AddressManager.sol | 2 +- packages/protocol/contracts/common/AddressResolver.sol | 2 +- .../protocol/contracts/common/EssentialContract.sol | 10 +++++----- .../protocol/contracts/common/OwnerUUPSUpgradable.sol | 2 +- packages/protocol/contracts/signal/SignalService.sol | 2 +- packages/protocol/contracts/team/TimelockTokenPool.sol | 2 +- .../protocol/contracts/team/airdrop/ERC20Airdrop.sol | 2 +- .../protocol/contracts/team/airdrop/ERC20Airdrop2.sol | 2 +- .../protocol/contracts/team/airdrop/ERC721Airdrop.sol | 2 +- packages/protocol/contracts/tokenvault/BaseVault.sol | 2 +- .../protocol/contracts/tokenvault/BridgedERC1155.sol | 2 +- .../protocol/contracts/tokenvault/BridgedERC20.sol | 2 +- .../protocol/contracts/tokenvault/BridgedERC721.sol | 2 +- .../contracts/tokenvault/adaptors/USDCAdaptor.sol | 2 +- packages/protocol/test/L1/Guardians.t.sol | 2 +- packages/protocol/test/common/EssentialContract.t.sol | 2 +- 29 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index b7021cff04c..9358ff93e95 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -36,7 +36,7 @@ contract TaikoL1 is EssentialContract, ICrossChainSync, ITierProvider, TaikoEven /// @param _addressManager The {AddressManager} address. /// @param _genesisBlockHash The block hash of the genesis block. function init(address _addressManager, bytes32 _genesisBlockHash) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); LibVerifying.init(state, getConfig(), _genesisBlockHash); } diff --git a/packages/protocol/contracts/L1/TaikoToken.sol b/packages/protocol/contracts/L1/TaikoToken.sol index a87b49095ee..c2b4de3891e 100644 --- a/packages/protocol/contracts/L1/TaikoToken.sol +++ b/packages/protocol/contracts/L1/TaikoToken.sol @@ -34,7 +34,7 @@ contract TaikoToken is EssentialContract, ERC20SnapshotUpgradeable, ERC20VotesUp public initializer { - _Essential_init(); + __Essential_init(); __ERC20_init(_name, _symbol); __ERC20Snapshot_init(); __ERC20Votes_init(); diff --git a/packages/protocol/contracts/L1/gov/TaikoGovernor.sol b/packages/protocol/contracts/L1/gov/TaikoGovernor.sol index 2426aab59ed..88405915789 100644 --- a/packages/protocol/contracts/L1/gov/TaikoGovernor.sol +++ b/packages/protocol/contracts/L1/gov/TaikoGovernor.sol @@ -34,7 +34,7 @@ contract TaikoGovernor is external initializer { - _OwnerUUPSUpgradable_init(); + __OwnerUUPSUpgradable_init(); __Governor_init("TaikoGovernor"); __GovernorVotes_init(_token); __GovernorVotesQuorumFraction_init(4); diff --git a/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol b/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol index 7b48d8bbf4b..84cd8bee348 100644 --- a/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol +++ b/packages/protocol/contracts/L1/gov/TaikoTimelockController.sol @@ -14,7 +14,7 @@ contract TaikoTimelockController is OwnerUUPSUpgradable, TimelockControllerUpgra uint256[50] private __gap; function init(uint256 minDelay) external initializer { - _OwnerUUPSUpgradable_init(); + __OwnerUUPSUpgradable_init(); address[] memory nil = new address[](0); __TimelockController_init(minDelay, nil, nil, owner()); } diff --git a/packages/protocol/contracts/L1/hooks/AssignmentHook.sol b/packages/protocol/contracts/L1/hooks/AssignmentHook.sol index e9e5f53abbd..693334e1e8a 100644 --- a/packages/protocol/contracts/L1/hooks/AssignmentHook.sol +++ b/packages/protocol/contracts/L1/hooks/AssignmentHook.sol @@ -47,7 +47,7 @@ contract AssignmentHook is EssentialContract, IHook { error HOOK_TIER_NOT_FOUND(); function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); } function onBlockProposed( diff --git a/packages/protocol/contracts/L1/provers/GuardianProver.sol b/packages/protocol/contracts/L1/provers/GuardianProver.sol index 1844bfb85b8..4d49f127478 100644 --- a/packages/protocol/contracts/L1/provers/GuardianProver.sol +++ b/packages/protocol/contracts/L1/provers/GuardianProver.sol @@ -16,7 +16,7 @@ contract GuardianProver is Guardians { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); } /// @dev Called by guardians to approve a guardian proof diff --git a/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol b/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol index 7b11fa52cd7..66733440a90 100644 --- a/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol +++ b/packages/protocol/contracts/L1/tiers/TaikoA6TierProvider.sol @@ -22,7 +22,7 @@ contract TaikoA6TierProvider is EssentialContract, ITierProvider { /// @notice Initializes the contract with the provided address manager. function init() external initializer { - _Essential_init(); + __Essential_init(); } function getTier(uint16 tierId) public pure override returns (ITierProvider.Tier memory) { diff --git a/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol b/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol index aef7df3b462..dc077e869d6 100644 --- a/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/GuardianVerifier.sol @@ -19,7 +19,7 @@ contract GuardianVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); } /// @inheritdoc IVerifier diff --git a/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol b/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol index 16d7f8347a4..1cd78bfcde3 100644 --- a/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/PseZkVerifier.sol @@ -35,7 +35,7 @@ contract PseZkVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); } /// @inheritdoc IVerifier diff --git a/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol b/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol index 0d0550beced..5b50859b475 100644 --- a/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/SgxAndZkVerifier.sol @@ -20,7 +20,7 @@ contract SgxAndZkVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); } /// @inheritdoc IVerifier diff --git a/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol b/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol index f88fdcea043..8553f212d11 100644 --- a/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol +++ b/packages/protocol/contracts/L1/verifiers/SgxVerifier.sol @@ -54,7 +54,7 @@ contract SgxVerifier is EssentialContract, IVerifier { /// @notice Initializes the contract with the provided address manager. /// @param _addressManager The address of the address manager contract. function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); } /// @notice Adds trusted SGX instances to the registry. diff --git a/packages/protocol/contracts/L2/TaikoL2.sol b/packages/protocol/contracts/L2/TaikoL2.sol index ea67ca51afd..c38427f57c2 100644 --- a/packages/protocol/contracts/L2/TaikoL2.sol +++ b/packages/protocol/contracts/L2/TaikoL2.sol @@ -54,7 +54,7 @@ contract TaikoL2 is EssentialContract, TaikoL2Signer, ICrossChainSync { /// @param _signalService Address of the {ISignalService} contract. /// @param _gasExcess The initial gasExcess. function init(address _signalService, uint64 _gasExcess) external initializer { - _Essential_init(); + __Essential_init(); if (_signalService == address(0)) revert L2_INVALID_PARAM(); signalService = _signalService; diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 3c75fe23b0f..01866378dbd 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -62,7 +62,7 @@ contract Bridge is EssentialContract, IBridge { /// @notice Initializes the contract. /// @param _addressManager The address of the {AddressManager} contract. function init(address _addressManager) external initializer { - _Essential_init(_addressManager); + __Essential_init(_addressManager); _ctx.msgHash == bytes32(PLACEHOLDER); } diff --git a/packages/protocol/contracts/common/AddressManager.sol b/packages/protocol/contracts/common/AddressManager.sol index 334951e325f..79cbf3bc486 100644 --- a/packages/protocol/contracts/common/AddressManager.sol +++ b/packages/protocol/contracts/common/AddressManager.sol @@ -33,7 +33,7 @@ contract AddressManager is OwnerUUPSUpgradable, IAddressManager { /// @notice Initializes the owner for the upgradable contract. function init() external initializer { - _OwnerUUPSUpgradable_init(); + __OwnerUUPSUpgradable_init(); } /// @notice Sets the address for a specific chainId-name pair. diff --git a/packages/protocol/contracts/common/AddressResolver.sol b/packages/protocol/contracts/common/AddressResolver.sol index 311a43ecf9e..8c6a1dae0ad 100644 --- a/packages/protocol/contracts/common/AddressResolver.sol +++ b/packages/protocol/contracts/common/AddressResolver.sol @@ -77,7 +77,7 @@ abstract contract AddressResolver { /// @dev Initialization method for setting up AddressManager reference. /// @param _addressManager Address of the AddressManager. // solhint-disable-next-line func-name-mixedcase - function _AddressResolver_init(address _addressManager) internal virtual { + function __AddressResolver_init(address _addressManager) internal virtual { if (block.chainid >= type(uint64).max) { revert RESOLVER_UNEXPECTED_CHAINID(); } diff --git a/packages/protocol/contracts/common/EssentialContract.sol b/packages/protocol/contracts/common/EssentialContract.sol index 371bd275744..4ba7b71a16f 100644 --- a/packages/protocol/contracts/common/EssentialContract.sol +++ b/packages/protocol/contracts/common/EssentialContract.sol @@ -22,14 +22,14 @@ abstract contract EssentialContract is OwnerUUPSUpgradable, AddressResolver { /// @notice Initializes the contract with an address manager. /// @param _addressManager The address of the address manager. // solhint-disable-next-line func-name-mixedcase - function _Essential_init(address _addressManager) internal virtual { - _OwnerUUPSUpgradable_init(); - _AddressResolver_init(_addressManager); + function __Essential_init(address _addressManager) internal virtual { + __OwnerUUPSUpgradable_init(); + __AddressResolver_init(_addressManager); } /// @notice Initializes the contract with an address manager. // solhint-disable-next-line func-name-mixedcase - function _Essential_init() internal virtual { - _Essential_init(address(0)); + function __Essential_init() internal virtual { + __Essential_init(address(0)); } } diff --git a/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol b/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol index c6e84eb6955..f38f8aeb1f0 100644 --- a/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol +++ b/packages/protocol/contracts/common/OwnerUUPSUpgradable.sol @@ -67,7 +67,7 @@ abstract contract OwnerUUPSUpgradable is UUPSUpgradeable, OwnableUpgradeable { /// @notice Initializes the contract with an address manager. // solhint-disable-next-line func-name-mixedcase - function _OwnerUUPSUpgradable_init() internal virtual { + function __OwnerUUPSUpgradable_init() internal virtual { __Ownable_init(); _reentry = _FALSE; _paused = _FALSE; diff --git a/packages/protocol/contracts/signal/SignalService.sol b/packages/protocol/contracts/signal/SignalService.sol index 51694199662..9ba3918e1e7 100644 --- a/packages/protocol/contracts/signal/SignalService.sol +++ b/packages/protocol/contracts/signal/SignalService.sol @@ -45,7 +45,7 @@ contract SignalService is AuthorizableContract, ISignalService { /// @dev Initializer to be called after being deployed behind a proxy. function init() external initializer { - _OwnerUUPSUpgradable_init(); + __OwnerUUPSUpgradable_init(); } /// @inheritdoc ISignalService diff --git a/packages/protocol/contracts/team/TimelockTokenPool.sol b/packages/protocol/contracts/team/TimelockTokenPool.sol index 0cf25116404..e32463ae309 100644 --- a/packages/protocol/contracts/team/TimelockTokenPool.sol +++ b/packages/protocol/contracts/team/TimelockTokenPool.sol @@ -77,7 +77,7 @@ contract TimelockTokenPool is EssentialContract { error TOO_MANY(); function init(address _taikoToken, address _sharedVault) external initializer { - _Essential_init(); + __Essential_init(); if (_taikoToken == address(0)) revert INVALID_PARAM(); taikoToken = _taikoToken; diff --git a/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol b/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol index 5d602babb9e..dfa35eb1305 100644 --- a/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol +++ b/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol @@ -26,7 +26,7 @@ contract ERC20Airdrop is MerkleClaimable { external initializer { - _Essential_init(); + __Essential_init(); _setConfig(_claimStarts, _claimEnds, _merkleRoot); token = _token; diff --git a/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol b/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol index a4d862c5414..1a9f45a63f8 100644 --- a/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol +++ b/packages/protocol/contracts/team/airdrop/ERC20Airdrop2.sol @@ -49,7 +49,7 @@ contract ERC20Airdrop2 is MerkleClaimable { external initializer { - _Essential_init(); + __Essential_init(); // Unix timestamp=_claimEnds+1 marks the first timestamp the users are able to withdraw. _setConfig(_claimStarts, _claimEnds, _merkleRoot); diff --git a/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol b/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol index bb3526c4db3..aeda1c0a759 100644 --- a/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol +++ b/packages/protocol/contracts/team/airdrop/ERC721Airdrop.sol @@ -25,7 +25,7 @@ contract ERC721Airdrop is MerkleClaimable { external initializer { - _Essential_init(); + __Essential_init(); _setConfig(_claimStarts, _claimEnds, _merkleRoot); token = _token; diff --git a/packages/protocol/contracts/tokenvault/BaseVault.sol b/packages/protocol/contracts/tokenvault/BaseVault.sol index e685037c4a8..3fecdfbdd0c 100644 --- a/packages/protocol/contracts/tokenvault/BaseVault.sol +++ b/packages/protocol/contracts/tokenvault/BaseVault.sol @@ -24,7 +24,7 @@ abstract contract BaseVault is EssentialContract, IRecallableSender, IERC165Upgr /// @param addressManager Address manager contract address. function init(address addressManager) external initializer { - _Essential_init(addressManager); + __Essential_init(addressManager); } /// @notice Checks if the contract supports the given interface. diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol index 9a58720f6b6..97425d5af36 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol @@ -54,7 +54,7 @@ contract BridgedERC1155 is if (_srcToken == address(0) || _srcChainId == 0 || _srcChainId == block.chainid) { revert BTOKEN_INVALID_PARAMS(); } - _Essential_init(_addressManager); + __Essential_init(_addressManager); __ERC1155_init(""); srcToken = _srcToken; srcChainId = _srcChainId; diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20.sol b/packages/protocol/contracts/tokenvault/BridgedERC20.sol index d1763e5100a..683090bb574 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20.sol @@ -55,7 +55,7 @@ contract BridgedERC20 is BridgedERC20Base, IERC20MetadataUpgradeable, ERC20Upgra } // Initialize OwnerUUPSUpgradable and ERC20Upgradeable - _Essential_init(_addressManager); + __Essential_init(_addressManager); __ERC20_init({ name_: _name, symbol_: _symbol }); // Set contract properties diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/tokenvault/BridgedERC721.sol index 05bbbd34a53..45262fa976a 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC721.sol @@ -45,7 +45,7 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { ) { revert BTOKEN_INVALID_PARAMS(); } - _Essential_init(_addressManager); + __Essential_init(_addressManager); __ERC721_init(_name, _symbol); srcToken = _srcToken; srcChainId = _srcChainId; diff --git a/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol b/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol index f5b58a551ca..9476286ffff 100644 --- a/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol +++ b/packages/protocol/contracts/tokenvault/adaptors/USDCAdaptor.sol @@ -20,7 +20,7 @@ contract USDCAdaptor is BridgedERC20Base { uint256[49] private __gap; function init(address _adressManager, IUSDC _usdc) external initializer { - _Essential_init(_adressManager); + __Essential_init(_adressManager); usdc = _usdc; } diff --git a/packages/protocol/test/L1/Guardians.t.sol b/packages/protocol/test/L1/Guardians.t.sol index 04c8b180e89..e6ccb09c3a9 100644 --- a/packages/protocol/test/L1/Guardians.t.sol +++ b/packages/protocol/test/L1/Guardians.t.sol @@ -7,7 +7,7 @@ contract DummyGuardians is Guardians { uint256 public operationId; function init() external initializer { - _Essential_init(); + __Essential_init(); } function approve(bytes32 hash) public returns (bool) { diff --git a/packages/protocol/test/common/EssentialContract.t.sol b/packages/protocol/test/common/EssentialContract.t.sol index a0a83c7bd49..ae8ed54bd7b 100644 --- a/packages/protocol/test/common/EssentialContract.t.sol +++ b/packages/protocol/test/common/EssentialContract.t.sol @@ -7,7 +7,7 @@ contract Target1 is EssentialContract { uint256 public count; function init() external initializer { - _Essential_init(); + __Essential_init(); count = 100; } From ebf5b1316f6c7aa324fecadbb095005bea9a9f39 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 2 Dec 2023 22:59:36 +0800 Subject: [PATCH 16/17] Update IBridgedERC20.sol --- packages/protocol/contracts/tokenvault/IBridgedERC20.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/protocol/contracts/tokenvault/IBridgedERC20.sol b/packages/protocol/contracts/tokenvault/IBridgedERC20.sol index 4ddb21aa87c..aec9cd02d06 100644 --- a/packages/protocol/contracts/tokenvault/IBridgedERC20.sol +++ b/packages/protocol/contracts/tokenvault/IBridgedERC20.sol @@ -6,8 +6,6 @@ pragma solidity ^0.8.20; -import "../common/EssentialContract.sol"; - /// @title IBridgedERC20 /// @notice Interface for all bridged tokens. /// @dev To facilitate compatibility with third-party bridged tokens, such as USDC's native From 729e155044e3f81b4a8f21d87df34c2ab2644bc6 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 2 Dec 2023 22:59:42 +0800 Subject: [PATCH 17/17] Update ERC20Vault.sol --- packages/protocol/contracts/tokenvault/ERC20Vault.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/tokenvault/ERC20Vault.sol index 19d8c34e513..636f7d10944 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC20Vault.sol @@ -167,6 +167,7 @@ contract ERC20Vault is BaseVault { { if (op.amount == 0) revert VAULT_INVALID_AMOUNT(); if (op.token == address(0)) revert VAULT_INVALID_TOKEN(); + if (btokenBlacklist[op.token]) revert VAULT_BTOKEN_BLACKLISTED(); uint256 _amount; IBridge.Message memory message; @@ -298,8 +299,6 @@ contract ERC20Vault is BaseVault { IBridgedERC20(token).burn(msg.sender, amount); _balanceChange = amount; } else { - if (btokenBlacklist[token]) revert VAULT_BTOKEN_BLACKLISTED(); - // If it's a canonical token ERC20 t = ERC20(token); ctoken = CanonicalERC20({