@mantleio/contracts
Version:
[Mantle] L1 and L2 smart contracts for Mantle
1,101 lines • 447 kB
JSON
{
"address": "0x242a33ca49C564caFC9C83C700b79f1074c42A0D",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AssertionAlreadyResolved",
"type": "error"
},
{
"inputs": [],
"name": "AssertionOutOfRange",
"type": "error"
},
{
"inputs": [],
"name": "ChallengePeriodPending",
"type": "error"
},
{
"inputs": [],
"name": "ChallengedStaker",
"type": "error"
},
{
"inputs": [],
"name": "DifferentParent",
"type": "error"
},
{
"inputs": [],
"name": "EmptyAssertion",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker1Challenge",
"type": "address"
},
{
"internalType": "address",
"name": "staker2Challenge",
"type": "address"
}
],
"name": "InDifferentChallenge",
"type": "error"
},
{
"inputs": [],
"name": "InboxReadLimitExceeded",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientStake",
"type": "error"
},
{
"inputs": [],
"name": "InvalidParent",
"type": "error"
},
{
"inputs": [],
"name": "MinimumAssertionPeriodNotPassed",
"type": "error"
},
{
"inputs": [],
"name": "NoStaker",
"type": "error"
},
{
"inputs": [],
"name": "NoUnresolvedAssertion",
"type": "error"
},
{
"inputs": [],
"name": "NotAllStaked",
"type": "error"
},
{
"inputs": [],
"name": "NotInChallenge",
"type": "error"
},
{
"inputs": [],
"name": "NotStaked",
"type": "error"
},
{
"inputs": [],
"name": "ParentAssertionUnstaked",
"type": "error"
},
{
"inputs": [],
"name": "PreviousStateHash",
"type": "error"
},
{
"inputs": [],
"name": "RedundantInitialized",
"type": "error"
},
{
"inputs": [],
"name": "StakedOnUnconfirmedAssertion",
"type": "error"
},
{
"inputs": [],
"name": "StakerStakedOnTarget",
"type": "error"
},
{
"inputs": [],
"name": "StakersPresent",
"type": "error"
},
{
"inputs": [],
"name": "TransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "UnproposedAssertion",
"type": "error"
},
{
"inputs": [],
"name": "WrongOrder",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAddress",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "challengeAddr",
"type": "address"
}
],
"name": "AssertionChallenged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "AssertionConfirmed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "asserterAddr",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "vmHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "inboxSize",
"type": "uint256"
}
],
"name": "AssertionCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "AssertionRejected",
"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": "stakerAddr",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "StakerStaked",
"type": "event"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toAddAddresses",
"type": "address[]"
}
],
"name": "addToOperatorWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toAddAddresses",
"type": "address[]"
}
],
"name": "addToStakerWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
}
],
"name": "advanceStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "assertions",
"outputs": [
{
"internalType": "contract AssertionMap",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "baseStakeAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[2]",
"name": "players",
"type": "address[2]"
},
{
"internalType": "uint256[2]",
"name": "assertionIDs",
"type": "uint256[2]"
}
],
"name": "challengeAssertion",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "challengeCtx",
"outputs": [
{
"internalType": "bool",
"name": "completed",
"type": "bool"
},
{
"internalType": "address",
"name": "challengeAddress",
"type": "address"
},
{
"internalType": "address",
"name": "defenderAddress",
"type": "address"
},
{
"internalType": "address",
"name": "challengerAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "defenderAssertionID",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "challengerAssertionID",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "winner",
"type": "address"
},
{
"internalType": "address",
"name": "loser",
"type": "address"
}
],
"name": "completeChallenge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "confirmFirstUnresolvedAssertion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "confirmedInboxSize",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "vmHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "inboxSize",
"type": "uint256"
}
],
"name": "createAssertion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "vmHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "inboxSize",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "_batch",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "_shouldStartAtElement",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_signature",
"type": "bytes"
}
],
"name": "createAssertionWithStateBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "currentRequiredStake",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "address",
"name": "_verifier",
"type": "address"
},
{
"internalType": "address",
"name": "_stakeToken",
"type": "address"
},
{
"internalType": "address",
"name": "_libAddressManager",
"type": "address"
},
{
"internalType": "address",
"name": "_assertionMap",
"type": "address"
},
{
"internalType": "uint256",
"name": "_minimumAssertionPeriod",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_baseStakeAmount",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "_initialVMhash",
"type": "bytes32"
},
{
"internalType": "address[]",
"name": "stakerWhitelists",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "operatorWhitelists",
"type": "address[]"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "isStaked",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastConfirmedAssertionID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastCreatedAssertionID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastResolvedAssertionID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "libAddressManager",
"outputs": [
{
"internalType": "contract Lib_AddressManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "minimumAssertionPeriod",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "numStakers",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "operatorWhitelist",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "operatorslist",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "registers",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rejectFirstUnresolvedAssertion",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "batchIndex",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "batchRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "batchSize",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "prevTotalElements",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"internalType": "struct Lib_BVMCodec.ChainBatchHeader",
"name": "_batchHeader",
"type": "tuple"
}
],
"name": "rejectLatestCreatedAssertionWithBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toRemoveAddresses",
"type": "address[]"
}
],
"name": "removeFromOperatorWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toRemoveAddresses",
"type": "address[]"
}
],
"name": "removeFromStakerWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "removeOldZombies",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "stakerAddress",
"type": "address"
}
],
"name": "removeStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
}
],
"name": "resolve",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_shouldRollBack",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_shouldStartAtElement",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_signature",
"type": "bytes"
}
],
"name": "rollbackL2Chain",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "stakeAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "stake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "stakeToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "stakerWhitelist",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "stakers",
"outputs": [
{
"internalType": "bool",
"name": "isStaked",
"type": "bool"
},
{
"internalType": "uint256",
"name": "amountStaked",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "assertionID",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "currentChallenge",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "stakerslist",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "stakeAmount",
"type": "uint256"
}
],
"name": "unstake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "verifier",
"outputs": [
{
"internalType": "contract IVerifierEntry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "withdrawableFunds",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "zombies",
"outputs": [
{
"internalType": "address",
"name": "stakerAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "lastAssertionID",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"transactionHash": "0x889d02b77ab2c21f5e8db8336d273a37fab77744057e9c63d0e35145ebec1b2a",
"receipt": {
"to": null,
"from": "0x2A2954F3989a83Cc43DD58B0f038D5F276f21333",
"contractAddress": "0x242a33ca49C564caFC9C83C700b79f1074c42A0D",
"transactionIndex": 0,
"gasUsed": "5258208",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000800000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000",
"blockHash": "0xfd524e6a053b50888eee52fa8edc7c199d80eec0960e93f6977328edb4971c08",
"transactionHash": "0x889d02b77ab2c21f5e8db8336d273a37fab77744057e9c63d0e35145ebec1b2a",
"logs": [
{
"transactionIndex": 0,
"blockNumber": 17578242,
"transactionHash": "0x889d02b77ab2c21f5e8db8336d273a37fab77744057e9c63d0e35145ebec1b2a",
"address": "0x242a33ca49C564caFC9C83C700b79f1074c42A0D",
"topics": [
"0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
],
"data": "0x00000000000000000000000000000000000000000000000000000000000000ff",
"logIndex": 0,
"blockHash": "0xfd524e6a053b50888eee52fa8edc7c199d80eec0960e93f6977328edb4971c08"
}
],
"blockNumber": 17578242,
"cumulativeGasUsed": "5258208",
"status": 1,
"byzantium": true
},
"args": [],
"numDeployments": 1,
"solcInputHash": "322573d8b501a415312ae007ebdbca9f",
"metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AssertionAlreadyResolved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssertionOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChallengePeriodPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChallengedStaker\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DifferentParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyAssertion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker1Challenge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"staker2Challenge\",\"type\":\"address\"}],\"name\":\"InDifferentChallenge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxReadLimitExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinimumAssertionPeriodNotPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoStaker\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoUnresolvedAssertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllStaked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInChallenge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParentAssertionUnstaked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PreviousStateHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RedundantInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakedOnUnconfirmedAssertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakerStakedOnTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakersPresent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnproposedAssertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongOrder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeAddr\",\"type\":\"address\"}],\"name\":\"AssertionChallenged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserterAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"vmHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxSize\",\"type\":\"uint256\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"}],\"name\":\"AssertionRejected\",\"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\":\"stakerAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"}],\"name\":\"StakerStaked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"toAddAddresses\",\"type\":\"address[]\"}],\"name\":\"addToOperatorWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"toAddAddresses\",\"type\":\"address[]\"}],\"name\":\"addToStakerWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"}],\"name\":\"advanceStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assertions\",\"outputs\":[{\"internalType\":\"contract AssertionMap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStakeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[2]\",\"name\":\"players\",\"type\":\"address[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"assertionIDs\",\"type\":\"uint256[2]\"}],\"name\":\"challengeAssertion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeCtx\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"completed\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"challengeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"defenderAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"defenderAssertionID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengerAssertionID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loser\",\"type\":\"address\"}],\"name\":\"completeChallenge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmFirstUnresolvedAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmedInboxSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"vmHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"inboxSize\",\"type\":\"uint256\"}],\"name\":\"createAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"vmHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"inboxSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_batch\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"createAssertionWithStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRequiredStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stakeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_assertionMap\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minimumAssertionPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_baseStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_initialVMhash\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"stakerWhitelists\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"operatorWhitelists\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastConfirmedAssertionID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCreatedAssertionID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastResolvedAssertionID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contract Lib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numStakers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorWhitelist\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorslist\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"registers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rejectFirstUnresolvedAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct Lib_BVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"rejectLatestCreatedAssertionWithBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"toRemoveAddresses\",\"type\":\"address[]\"}],\"name\":\"removeFromOperatorWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"toRemoveAddresses\",\"type\":\"address[]\"}],\"name\":\"removeFromStakerWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeOldZombies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"}],\"name\":\"removeStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_shouldRollBack\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"rollbackL2Chain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakerWhitelist\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"assertionID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currentChallenge\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"stakerslist\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"contract IVerifierEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"zombies\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lastAssertionID\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AssertionAlreadyResolved()\":[{\"details\":\"Thrown when the assertion is already resolved\"}],\"AssertionOutOfRange()\":[{\"details\":\"Thrown when a staker tries to advance stake to invalid assertionId.\"}],\"ChallengePeriodPending()\":[{\"details\":\"Thrown when the challenge period has not passed\"}],\"ChallengedStaker()\":[{\"details\":\"Thrown when the staker is currently in Challenge\"}],\"DifferentParent()\":[{\"details\":\"Thrown when the challenger and defender didn't attest to sibling assertions\"}],\"EmptyAssertion()\":[{\"details\":\"Thrown when a sender tries to create assertion without any tx.\"}],\"InDifferentChallenge(address,address)\":[{\"details\":\"Thrown when the two stakers are in different challenge\",\"params\":{\"staker1Challenge\":\"challenge address of staker 1\",\"staker2Challenge\":\"challenge address of staker 2\"}}],\"InboxReadLimitExceeded()\":[{\"details\":\"Thrown when the requested assertion read past the end of current Inbox.\"}],\"InsufficientStake()\":[{\"details\":\"Thrown when the function is called with Insufficient Stake\"}],\"InvalidParent()\":[{\"details\":\"Thrown when the assertion's parent is not the last confirmed assertion\"}],\"MinimumAssertionPeriodNotPassed()\":[{\"details\":\"Thrown when a sender tries to create assertion before the minimum assertion time period\"}],\"NoStaker()\":[{\"details\":\"Thrown when there are zero stakers\"}],\"NoUnresolvedAssertion()\":[{\"details\":\"Thrown when there is no unresolved assertion\"}],\"NotAllStaked()\":[{\"details\":\"Thrown when all the stakers are not staked\"}],\"NotInChallenge()\":[{\"details\":\"Thrown when the staker is not in a challenge\"}],\"NotStaked()\":[{\"details\":\"Thrown when address that have not staked any token calls a only-staked function\"}],\"ParentAssertionUnstaked()\":[{\"details\":\"Thrown when a staker tries to advance stake to non-child assertion\"}],\"PreviousStateHash()\":[{\"details\":\"Thrown when parent's statehash is not equal to the start state(or previous state)/\"}],\"RedundantInitialized()\":[{\"details\":\"Thrown when slot is not blank in initialize step\"}],\"StakedOnUnconfirmedAssertion()\":[{\"details\":\"Thrown when the caller is staked on unconfirmed assertion.\"}],\"StakerStakedOnTarget()\":[{\"details\":\"Thrown staker's assertion is descendant of firstUnresolved assertion\"}],\"StakersPresent()\":[{\"details\":\"Thrown when there are staker's present on the assertion\"}],\"TransferFailed()\":[{\"details\":\"Thrown when transfer fails\"}],\"UnproposedAssertion()\":[{\"details\":\"Thrown when the challenger tries to challenge an unproposed assertion\"}],\"WrongOrder()\":[{\"details\":\"Thrown when the challenge assertion Id is not ordered or in range.\"}],\"ZeroAddress()\":[{\"details\":\"Thrown when function is called with a zero address argument\"}]},\"kind\":\"dev\",\"methods\":{\"advanceStake(uint256)\":{\"params\":{\"assertionID\":\"ID of assertion to advance stake to. Currently this must be a child of the current assertion. TODO: generalize to arbitrary descendants.\"}},\"challengeAssertion(address[2],uint256[2])\":{\"params\":{\"assertionIDs\":\"Assertion IDs of the players engaged in the challenge. The first ID should be the earlier-created and is the one being challenged.\",\"players\":\"Defender (first) and challenger (second) addresses. Must be staked on DAs on different branches.\"},\"returns\":{\"_0\":\"Newly created challenge contract address.\"}},\"completeChallenge(address,address)\":{\"params\":{\"loser\":\"Address of losing staker.\",\"winner\":\"Address of winning staker.\"}},\"confirmedInboxSize()\":{\"returns\":{\"_0\":\"confirmedInboxSize size of inbox confirmed\"}},\"createAssertion(bytes32,uint256)\":{\"params\":{\"inboxSize\":\"Size of inbox corresponding to assertion (number of transactions).\",\"vmHash\":\"New VM hash.\"}},\"createAssertionWithStateBatch(bytes32,uint256,bytes32[],uint256,bytes)\":{\"params\":{\"_batch\":\"Batch of state roots.\",\"_shouldStartAtElement\":\"Index of the element at which this batch should start.\",\"_signature\":\"tss group signature of state batches.\",\"inboxSize\":\"Size of inbox corresponding to assertion (number of transactions).\",\"vmHash\":\"New VM hash.\"}},\"currentRequiredStake()\":{\"returns\":{\"_0\":\"The current required stake amount.\"}},\"isStaked(address)\":{\"params\":{\"addr\":\"User address.\"},\"returns\":{\"_0\":\"True if address is staked, else False.\"}},\"removeStake(address)\":{\"params\":{\"stakerAddress\":\"Address of staker for which to unstake.\"}},\"resolve(string)\":{\"params\":{\"_name\":\"Name to resolve an address for.\"},\"returns\":{\"_0\":\"Address associated with the given name.\"}},\"rollbackL2Chain(uint256,uint256,bytes)\":{\"params\":{\"_shouldRollBack\":\"roll back to should start.\",\"_shouldStartAtElement\":\"Index of the element at which this batch should start\",\"_signature\":\"signature of rollback message\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unstake(uint256)\":{\"params\":{\"stakeAmount\":\"Token amount to withdraw. Must be <= sender's current stake minus the current required stake.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addToOperatorWhitelist(address[])\":{\"notice\":\"Add to whitelist\"},\"addToStakerWhitelist(address[])\":{\"notice\":\"Add to staker whitelist\"},\"advanceStake(uint256)\":{\"notice\":\"Advances msg.sender's existing sake to assertionID.\"},\"challengeAssertion(address[2],uint256[2])\":{\"notice\":\"Initiates a dispute between a defender and challenger on an unconfirmed DA.\"},\"completeChallenge(address,address)\":{\"notice\":\"Completes ongoing challenge. Callback, called by a challenge contract.\"},\"confirmFirstUnresolvedAssertion()\":{\"notice\":\"Confirms first unresolved assertion. Assertion is confirmed if and only if: (1) there is at least one staker, and (2) challenge period has passed, and (3) predecessor has been confirmed, and (4) all stakers are staked on the assertion.\"},\"createAssertion(bytes32,uint256)\":{\"notice\":\"Creates a new DA representing the rollup state after executing a block of transactions (sequenced in SequencerInbox). Block is represented by all transactions in range [prevInboxSize, inboxSize]. The latest staked DA of the sender is considered to be the predecessor. Moves sender stake onto the new DA. The new DA stores the hash of the parameters: vmHash\"},\"createAssertionWithStateBatch(bytes32,uint256,bytes32[],uint256,bytes)\":{\"notice\":\"create assertion with scc state batch\"},\"rejectFirstUnresolvedAssertion()\":{\"notice\":\"Rejects first unresolved assertion. Assertion is rejected if and only if: (1) all of the following are true: (a) challenge period has passed, and (b) at least one staker exists, and (c) no staker remains staked on the assertion (all have been destroyed). OR (2) predecessor has been rejected\"},\"removeFromOperatorWhitelist(address[])\":{\"notice\":\"Remove from whitelist\"},\"removeFromStakerWhitelist(address[])\":{\"notice\":\"Remove from whitelist\"},\"removeStake(address)\":{\"notice\":\"Removes stakerAddress from the set of stakers and withdraws the full stake amount to stakerAddress. This can be called by anyone since it is currently necessary to keep the chain progressing.\"},\"resolve(string)\":{\"notice\":\"Resolves the address associated with a given name.\"},\"rollbackL2Chain(uint256,uint256,bytes)\":{\"notice\":\"Emit event to notify sequencers to roll back.\"},\"stake(uint256,address)\":{\"notice\":\"Deposits stake on staker's current assertion (or the last confirmed assertion if not currently staked).currently use MNT to stake; stakeAmount Token amount to deposit. Must be > than defined threshold if this is a new stake.\"},\"unstake(uint256)\":{\"notice\":\"Withdraws stakeAmount from staker's stake by if assertion it is staked on is confirmed.\"},\"withdraw()\":{\"notice\":\"Withdraws all of msg.sender's withdrawable funds.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/fraud-proof/Rollup.sol\":\"Rollup\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that al