Commit b21fe25f authored by inphi's avatar inphi

fix(ctb): fix abi/storage snapshot script

parent 18777fb9
......@@ -433,7 +433,7 @@ jobs:
name: snapshots
command: |
pnpm snapshots
if [ "$(git diff --exit-code snapshots)" ]; then
if git diff --exit-code snapshots > /dev/null; then
[ -z "$(git ls-files --others --exclude-standard snapshots)" ] || echo "export SNAPSHOTS_STATUS=1" >> "$BASH_ENV"
else
echo "export SNAPSHOTS_STATUS=1" >> "$BASH_ENV"
......
......@@ -4,7 +4,7 @@ import path from 'path'
const outdir = process.argv[2] || path.join(__dirname, '..', 'snapshots')
const forgeArtifactsDir = path.join(__dirname, '..', 'forge-artifacts')
const getAllContracts = (): Array<string> => {
const getAllContractsSources = (): Array<string> => {
const paths = []
const readFilesRecursively = (dir: string) => {
const files = fs.readdirSync(dir)
......@@ -22,21 +22,31 @@ const getAllContracts = (): Array<string> => {
}
readFilesRecursively(path.join(__dirname, '..', 'src'))
// Assumes there is a single contract per file
return paths
.filter((x) => x.endsWith('.sol'))
.map((p: string) => {
const b = path.basename(p)
return `${b}:${b.replace('.sol', '')}`
})
.map((p: string) => path.basename(p))
.sort()
}
type ForgeArtifact = {
abi: object
ast: {
nodeType: string
nodes: any[]
}
storageLayout: {
storage: [{ type: string; label: string; offset: number; slot: number }]
types: { [key: string]: { label: string; numberOfBytes: number } }
}
bytecode: {
object: string
}
}
type AbiSpecStorageLayoutEntry = {
label: string
slot: number
offset: number
type: string
bytes: number
}
const sortKeys = (obj: any) => {
......@@ -54,48 +64,39 @@ const sortKeys = (obj: any) => {
)
}
// ContractName.0.9.8.json -> ContractName.sol
// ContractName.json -> ContractName.sol
const parseArtifactName = (artifactVersionFile: string): string => {
return artifactVersionFile.match(/(.*?)\.([0-9]+\.[0-9]+\.[0-9]+)?/)[1]
}
const main = async () => {
console.log(`writing abi spec to ${outdir}`)
console.log(`writing abi and storage layout snapshots to ${outdir}`)
const storageLayoutDir = path.join(outdir, 'storageLayout')
const abiDir = path.join(outdir, 'abi')
fs.mkdirSync(storageLayoutDir, { recursive: true })
fs.mkdirSync(abiDir, { recursive: true })
const contracts = getAllContracts()
for (const contract of contracts) {
const toks = contract.split(':')
const contractFile = contract.split(':')[0]
const contractName = toks[1]
let artifactFile = path.join(
forgeArtifactsDir,
contractFile,
`${contractName}.json`
)
// NOTE: Read the first version in the directory. We may want to assert that all version's ABIs are identical
if (!fs.existsSync(artifactFile)) {
const filename = fs.readdirSync(path.dirname(artifactFile))[0]
artifactFile = path.join(path.dirname(artifactFile), filename)
}
const contractSources = getAllContractsSources()
const knownAbis = {}
const data = fs.readFileSync(artifactFile)
const artifact = JSON.parse(data.toString())
for (const contractFile of contractSources) {
const contractArtifacts = path.join(forgeArtifactsDir, contractFile)
for (const name of fs.readdirSync(contractArtifacts)) {
const data = fs.readFileSync(path.join(contractArtifacts, name))
const artifact: ForgeArtifact = JSON.parse(data.toString())
// ignore abstract contracts
if (artifact.bytecode.object === '0x') {
console.log(`ignoring interface ${contractName}`)
continue
}
const contractName = parseArtifactName(name)
// HACK: This is a hack to ignore libraries. Not robust against changes to solc's internal ast repr
// HACK: This is a hack to ignore libraries and abstract contracts. Not robust against changes to solc's internal ast repr
const isContract = artifact.ast.nodes.some((node: any) => {
return (
node.nodeType === 'ContractDefinition' &&
node.name === contractName &&
node.contractKind === 'contract'
node.contractKind === 'contract' &&
(node.abstract === undefined || // solc < 0.6 doesn't have explicit abstract contracts
node.abstract === false)
)
})
if (!isContract) {
......@@ -113,14 +114,25 @@ const main = async () => {
)
}
storageLayout.push({
label: typ.label,
label: storageEntry.label,
bytes: typ.numberOfBytes,
offset: storageEntry.offset,
slot: storageEntry.slot,
type: storageEntry.type,
})
}
if (knownAbis[contractName] === undefined) {
knownAbis[contractName] = artifact.abi
} else if (
JSON.stringify(knownAbis[contractName]) !== JSON.stringify(artifact.abi)
) {
throw Error(
`detected multiple artifact versions with different ABIs for ${contractFile}`
)
} else {
console.log(`detected multiple artifacts for ${contractName}`)
}
// Sort snapshots for easier manual inspection
fs.writeFileSync(
`${abiDir}/${contractName}.json`,
......@@ -131,6 +143,7 @@ const main = async () => {
JSON.stringify(sortKeys(storageLayout), null, 2)
)
}
}
}
main()
[
{
"inputs": [],
"stateMutability": "payable",
"type": "constructor"
}
]
\ No newline at end of file
......@@ -185,6 +185,19 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "GENESIS_BLOCK_NUMBER",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MAX_GAME_DEPTH",
......
[
{
"inputs": [
{
"internalType": "address payable",
"name": "_recipient",
"type": "address"
}
],
"stateMutability": "payable",
"type": "constructor"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(bytes32 => address)",
"label": "addresses",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_bytes32,t_address)"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => mapping(address => mapping(bytes32 => bytes)))",
"label": "attestations",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_bytes32,t_bytes_storage)))"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "uint256",
"label": "totalProcessed",
"offset": 0,
"slot": "0",
"type": "t_uint256"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(uint256 => struct BlockOracle.BlockInfo)",
"label": "blocks",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_uint256,t_struct(BlockInfo)72112_storage)"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "spacer_0_0_20",
"offset": 0,
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "1600",
"label": "spacer_1_0_1600",
"offset": 0,
"slot": "0"
},
{
"bytes": "20",
"label": "spacer_51_0_20",
"offset": 0,
"slot": "50"
},
{
"bytes": "1568",
"label": "spacer_52_0_1568",
"offset": 0,
"slot": "51"
},
{
"bytes": "1",
"label": "spacer_101_0_1",
"offset": 0,
"slot": "100"
},
{
"bytes": "1568",
"label": "spacer_102_0_1568",
"offset": 0,
"slot": "101"
},
{
"bytes": "32",
"label": "spacer_151_0_32",
"offset": 0,
"slot": "150"
},
{
"bytes": "1568",
"label": "spacer_152_0_1568",
"offset": 0,
"slot": "151"
},
{
"bytes": "32",
"label": "spacer_201_0_32",
"offset": 0,
"slot": "200"
},
{
"bytes": "32",
"label": "spacer_202_0_32",
"offset": 0,
"slot": "201"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "uint256",
"label": "_delay",
"offset": 0,
"slot": "0",
"type": "t_uint256"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(bytes32 => uint256)",
"label": "_queuedAt",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_bytes32,t_uint256)"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => bool)",
"label": "whitelist",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_bool)"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
"slot": "1"
},
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "51",
"type": "t_address"
"slot": "51"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "52",
"type": "t_array(t_uint256)49_storage"
"slot": "52"
},
{
"bytes": "32",
"label": "mapping(GameType => contract IDisputeGame)",
"label": "gameImpls",
"offset": 0,
"slot": "101",
"type": "t_mapping(t_userDefinedValueType(GameType)1585,t_contract(IDisputeGame)1063)"
"slot": "101"
},
{
"bytes": "32",
"label": "mapping(Hash => GameId)",
"label": "_disputeGames",
"offset": 0,
"slot": "102",
"type": "t_mapping(t_userDefinedValueType(Hash)1567,t_userDefinedValueType(GameId)1579)"
"slot": "102"
},
{
"bytes": "32",
"label": "GameId[]",
"label": "_disputeGameList",
"offset": 0,
"slot": "103",
"type": "t_array(t_userDefinedValueType(GameId)1579)dyn_storage"
"slot": "103"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(string => struct Drippie.DripState)",
"label": "drips",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_string_memory_ptr,t_struct(DripState)91663_storage)"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_nonces",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_uint256)"
"slot": "0"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)49_storage"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(bytes32 => struct Attestation)",
"label": "_db",
"offset": 0,
"slot": "50",
"type": "t_mapping(t_bytes32,t_struct(Attestation)44875_storage)"
"slot": "50"
},
{
"bytes": "32",
"label": "mapping(bytes32 => uint64)",
"label": "_timestamps",
"offset": 0,
"slot": "51",
"type": "t_mapping(t_bytes32,t_uint64)"
"slot": "51"
},
{
"bytes": "32",
"label": "mapping(address => mapping(bytes32 => uint64))",
"label": "_revocationsOffchain",
"offset": 0,
"slot": "52",
"type": "t_mapping(t_address,t_mapping(t_bytes32,t_uint64))"
"slot": "52"
},
{
"bytes": "1504",
"label": "uint256[47]",
"label": "__gap",
"offset": 0,
"slot": "53",
"type": "t_array(t_uint256)47_storage"
"slot": "53"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(contract IFaucetAuthModule => struct Faucet.ModuleConfig)",
"label": "modules",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_contract(IFaucetAuthModule)92584,t_struct(ModuleConfig)92261_storage)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(contract IFaucetAuthModule => mapping(bytes32 => uint256))",
"label": "timeouts",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_contract(IFaucetAuthModule)92584,t_mapping(t_bytes32,t_uint256))"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(bytes32 => mapping(bytes32 => bool))",
"label": "nonces",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_bool))"
"slot": "2"
}
]
\ No newline at end of file
[
{
"bytes": "8",
"label": "Timestamp",
"label": "createdAt",
"offset": 0,
"slot": "0",
"type": "t_userDefinedValueType(Timestamp)77431"
"slot": "0"
},
{
"bytes": "1",
"label": "enum GameStatus",
"label": "status",
"offset": 8,
"slot": "0",
"type": "t_enum(GameStatus)77447"
"slot": "0"
},
{
"bytes": "20",
"label": "contract IBondManager",
"label": "bondManager",
"offset": 9,
"slot": "0",
"type": "t_contract(IBondManager)75133"
"slot": "0"
},
{
"bytes": "32",
"label": "Hash",
"label": "l1Head",
"offset": 0,
"slot": "1",
"type": "t_userDefinedValueType(Hash)77423"
"slot": "1"
},
{
"bytes": "32",
"label": "struct IFaultDisputeGame.ClaimData[]",
"label": "claimData",
"offset": 0,
"slot": "2",
"type": "t_array(t_struct(ClaimData)75347_storage)dyn_storage"
"slot": "2"
},
{
"bytes": "128",
"label": "struct IFaultDisputeGame.OutputProposals",
"label": "proposals",
"offset": 0,
"slot": "3",
"type": "t_struct(OutputProposals)75362_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "mapping(ClaimHash => bool)",
"label": "claims",
"offset": 0,
"slot": "7",
"type": "t_mapping(t_userDefinedValueType(ClaimHash)77427,t_bool)"
"slot": "7"
},
{
"bytes": "32",
"label": "mapping(uint256 => uint256[])",
"label": "subgames",
"offset": 0,
"slot": "8",
"type": "t_mapping(t_uint256,t_array(t_uint256)dyn_storage)"
"slot": "8"
},
{
"bytes": "1",
"label": "bool",
"label": "subgameAtRootResolved",
"offset": 0,
"slot": "9",
"type": "t_bool"
"slot": "9"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_balances",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_uint256)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "_allowances",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "1"
},
{
"bytes": "32",
"label": "uint256",
"label": "_totalSupply",
"offset": 0,
"slot": "2",
"type": "t_uint256"
"slot": "2"
},
{
"bytes": "32",
"label": "string",
"label": "_name",
"offset": 0,
"slot": "3",
"type": "t_string_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "string",
"label": "_symbol",
"offset": 0,
"slot": "4",
"type": "t_string_storage"
"slot": "4"
},
{
"bytes": "32",
"label": "mapping(address => struct Counters.Counter)",
"label": "_nonces",
"offset": 0,
"slot": "5",
"type": "t_mapping(t_address,t_struct(Counter)49118_storage)"
"slot": "5"
},
{
"bytes": "32",
"label": "bytes32",
"label": "_PERMIT_TYPEHASH_DEPRECATED_SLOT",
"offset": 0,
"slot": "6",
"type": "t_bytes32"
"slot": "6"
},
{
"bytes": "32",
"label": "mapping(address => address)",
"label": "_delegates",
"offset": 0,
"slot": "7",
"type": "t_mapping(t_address,t_address)"
"slot": "7"
},
{
"bytes": "32",
"label": "mapping(address => struct ERC20Votes.Checkpoint[])",
"label": "_checkpoints",
"offset": 0,
"slot": "8",
"type": "t_mapping(t_address,t_array(t_struct(Checkpoint)46264_storage)dyn_storage)"
"slot": "8"
},
{
"bytes": "32",
"label": "struct ERC20Votes.Checkpoint[]",
"label": "_totalSupplyCheckpoints",
"offset": 0,
"slot": "9",
"type": "t_array(t_struct(Checkpoint)46264_storage)dyn_storage"
"slot": "9"
},
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "10",
"type": "t_address"
"slot": "10"
}
]
\ No newline at end of file
[
{
"bytes": "8",
"label": "uint64",
"label": "number",
"offset": 0,
"slot": "0",
"type": "t_uint64"
"slot": "0"
},
{
"bytes": "8",
"label": "uint64",
"label": "timestamp",
"offset": 8,
"slot": "0",
"type": "t_uint64"
"slot": "0"
},
{
"bytes": "32",
"label": "uint256",
"label": "basefee",
"offset": 0,
"slot": "1",
"type": "t_uint256"
"slot": "1"
},
{
"bytes": "32",
"label": "bytes32",
"label": "hash",
"offset": 0,
"slot": "2",
"type": "t_bytes32"
"slot": "2"
},
{
"bytes": "8",
"label": "uint64",
"label": "sequenceNumber",
"offset": 0,
"slot": "3",
"type": "t_uint64"
"slot": "3"
},
{
"bytes": "32",
"label": "bytes32",
"label": "batcherHash",
"offset": 0,
"slot": "4",
"type": "t_bytes32"
"slot": "4"
},
{
"bytes": "32",
"label": "uint256",
"label": "l1FeeOverhead",
"offset": 0,
"slot": "5",
"type": "t_uint256"
"slot": "5"
},
{
"bytes": "32",
"label": "uint256",
"label": "l1FeeScalar",
"offset": 0,
"slot": "6",
"type": "t_uint256"
"slot": "6"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "spacer_0_0_20",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 20,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 21,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "spacer_1_0_1600",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
"slot": "1"
},
{
"bytes": "20",
"label": "address",
"label": "spacer_51_0_20",
"offset": 0,
"slot": "51",
"type": "t_address"
"slot": "51"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "spacer_52_0_1568",
"offset": 0,
"slot": "52",
"type": "t_array(t_uint256)49_storage"
"slot": "52"
},
{
"bytes": "1",
"label": "bool",
"label": "spacer_101_0_1",
"offset": 0,
"slot": "101",
"type": "t_bool"
"slot": "101"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "spacer_102_0_1568",
"offset": 0,
"slot": "102",
"type": "t_array(t_uint256)49_storage"
"slot": "102"
},
{
"bytes": "32",
"label": "uint256",
"label": "spacer_151_0_32",
"offset": 0,
"slot": "151",
"type": "t_uint256"
"slot": "151"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "spacer_152_0_1568",
"offset": 0,
"slot": "152",
"type": "t_array(t_uint256)49_storage"
"slot": "152"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "spacer_201_0_32",
"offset": 0,
"slot": "201",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "201"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "spacer_202_0_32",
"offset": 0,
"slot": "202",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "202"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "successfulMessages",
"offset": 0,
"slot": "203",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "203"
},
{
"bytes": "20",
"label": "address",
"label": "xDomainMsgSender",
"offset": 0,
"slot": "204",
"type": "t_address"
"slot": "204"
},
{
"bytes": "30",
"label": "uint240",
"label": "msgNonce",
"offset": 0,
"slot": "205",
"type": "t_uint240"
"slot": "205"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "failedMessages",
"offset": 0,
"slot": "206",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "206"
},
{
"bytes": "1408",
"label": "uint256[44]",
"label": "__gap",
"offset": 0,
"slot": "207",
"type": "t_array(t_uint256)44_storage"
"slot": "207"
},
{
"bytes": "20",
"label": "contract SuperchainConfig",
"label": "superchainConfig",
"offset": 0,
"slot": "251",
"type": "t_contract(SuperchainConfig)4111"
"slot": "251"
}
]
\ No newline at end of file
[
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "0",
"type": "t_array(t_uint256)49_storage"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => mapping(uint256 => bool)))",
"label": "deposits",
"offset": 0,
"slot": "49",
"type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_uint256,t_bool)))"
"slot": "49"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "uint256",
"label": "totalProcessed",
"offset": 0,
"slot": "0",
"type": "t_uint256"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "spacer_0_0_20",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "20",
"label": "address",
"label": "spacer_1_0_20",
"offset": 0,
"slot": "1",
"type": "t_address"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "deposits",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "2"
},
{
"bytes": "1504",
"label": "uint256[47]",
"label": "__gap",
"offset": 0,
"slot": "3",
"type": "t_array(t_uint256)47_storage"
"slot": "3"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "spacer_0_0_20",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 20,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 21,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "spacer_1_0_1600",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
"slot": "1"
},
{
"bytes": "20",
"label": "address",
"label": "spacer_51_0_20",
"offset": 0,
"slot": "51",
"type": "t_address"
"slot": "51"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "spacer_52_0_1568",
"offset": 0,
"slot": "52",
"type": "t_array(t_uint256)49_storage"
"slot": "52"
},
{
"bytes": "1",
"label": "bool",
"label": "spacer_101_0_1",
"offset": 0,
"slot": "101",
"type": "t_bool"
"slot": "101"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "spacer_102_0_1568",
"offset": 0,
"slot": "102",
"type": "t_array(t_uint256)49_storage"
"slot": "102"
},
{
"bytes": "32",
"label": "uint256",
"label": "spacer_151_0_32",
"offset": 0,
"slot": "151",
"type": "t_uint256"
"slot": "151"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "spacer_152_0_1568",
"offset": 0,
"slot": "152",
"type": "t_array(t_uint256)49_storage"
"slot": "152"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "spacer_201_0_32",
"offset": 0,
"slot": "201",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "201"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "spacer_202_0_32",
"offset": 0,
"slot": "202",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "202"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "successfulMessages",
"offset": 0,
"slot": "203",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "203"
},
{
"bytes": "20",
"label": "address",
"label": "xDomainMsgSender",
"offset": 0,
"slot": "204",
"type": "t_address"
"slot": "204"
},
{
"bytes": "30",
"label": "uint240",
"label": "msgNonce",
"offset": 0,
"slot": "205",
"type": "t_uint240"
"slot": "205"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "failedMessages",
"offset": 0,
"slot": "206",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "206"
},
{
"bytes": "1408",
"label": "uint256[44]",
"label": "__gap",
"offset": 0,
"slot": "207",
"type": "t_array(t_uint256)44_storage"
"slot": "207"
}
]
\ No newline at end of file
[
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "0",
"type": "t_array(t_uint256)49_storage"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "32",
"label": "uint256",
"label": "startingBlockNumber",
"offset": 0,
"slot": "1",
"type": "t_uint256"
"slot": "1"
},
{
"bytes": "32",
"label": "uint256",
"label": "startingTimestamp",
"offset": 0,
"slot": "2",
"type": "t_uint256"
"slot": "2"
},
{
"bytes": "32",
"label": "struct Types.OutputProposal[]",
"label": "l2Outputs",
"offset": 0,
"slot": "3",
"type": "t_array(t_struct(OutputProposal)2677_storage)dyn_storage"
"slot": "3"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "spacer_0_0_20",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "20",
"label": "address",
"label": "spacer_1_0_20",
"offset": 0,
"slot": "1",
"type": "t_address"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "deposits",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "2"
},
{
"bytes": "1504",
"label": "uint256[47]",
"label": "__gap",
"offset": 0,
"slot": "3",
"type": "t_array(t_uint256)47_storage"
"slot": "3"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "sentMessages",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "0"
},
{
"bytes": "30",
"label": "uint240",
"label": "msgNonce",
"offset": 0,
"slot": "1",
"type": "t_uint240"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_balances",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_uint256)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "_allowances",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "1"
},
{
"bytes": "32",
"label": "uint256",
"label": "_totalSupply",
"offset": 0,
"slot": "2",
"type": "t_uint256"
"slot": "2"
},
{
"bytes": "32",
"label": "string",
"label": "_name",
"offset": 0,
"slot": "3",
"type": "t_string_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "string",
"label": "_symbol",
"offset": 0,
"slot": "4",
"type": "t_string_storage"
"slot": "4"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "sentMessages",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_balances",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_uint256)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "_allowances",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "1"
},
{
"bytes": "32",
"label": "uint256",
"label": "_totalSupply",
"offset": 0,
"slot": "2",
"type": "t_uint256"
"slot": "2"
},
{
"bytes": "32",
"label": "string",
"label": "_name",
"offset": 0,
"slot": "3",
"type": "t_string_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "string",
"label": "_symbol",
"offset": 0,
"slot": "4",
"type": "t_string_storage"
"slot": "4"
},
{
"bytes": "20",
"label": "address",
"label": "l1Token",
"offset": 0,
"slot": "5",
"type": "t_address"
"slot": "5"
},
{
"bytes": "20",
"label": "address",
"label": "l2Bridge",
"offset": 0,
"slot": "6",
"type": "t_address"
"slot": "6"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "lastLive",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_uint256)"
"slot": "0"
},
{
"bytes": "64",
"label": "struct EnumerableSet.AddressSet",
"label": "ownersBefore",
"offset": 0,
"slot": "1",
"type": "t_struct(AddressSet)55016_storage"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "32",
"label": "uint256",
"label": "mintPermittedAfter",
"offset": 0,
"slot": "1",
"type": "t_uint256"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_balances",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_uint256)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "_allowances",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "1"
},
{
"bytes": "32",
"label": "uint256",
"label": "_totalSupply",
"offset": 0,
"slot": "2",
"type": "t_uint256"
"slot": "2"
},
{
"bytes": "32",
"label": "string",
"label": "_name",
"offset": 0,
"slot": "3",
"type": "t_string_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "string",
"label": "_symbol",
"offset": 0,
"slot": "4",
"type": "t_string_storage"
"slot": "4"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "string",
"label": "_name",
"offset": 0,
"slot": "0",
"type": "t_string_storage"
"slot": "0"
},
{
"bytes": "32",
"label": "string",
"label": "_symbol",
"offset": 0,
"slot": "1",
"type": "t_string_storage"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(uint256 => address)",
"label": "_owners",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_uint256,t_address)"
"slot": "2"
},
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_balances",
"offset": 0,
"slot": "3",
"type": "t_mapping(t_address,t_uint256)"
"slot": "3"
},
{
"bytes": "32",
"label": "mapping(uint256 => address)",
"label": "_tokenApprovals",
"offset": 0,
"slot": "4",
"type": "t_mapping(t_uint256,t_address)"
"slot": "4"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => bool))",
"label": "_operatorApprovals",
"offset": 0,
"slot": "5",
"type": "t_mapping(t_address,t_mapping(t_address,t_bool))"
"slot": "5"
},
{
"bytes": "32",
"label": "mapping(address => mapping(uint256 => uint256))",
"label": "_ownedTokens",
"offset": 0,
"slot": "6",
"type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))"
"slot": "6"
},
{
"bytes": "32",
"label": "mapping(uint256 => uint256)",
"label": "_ownedTokensIndex",
"offset": 0,
"slot": "7",
"type": "t_mapping(t_uint256,t_uint256)"
"slot": "7"
},
{
"bytes": "32",
"label": "uint256[]",
"label": "_allTokens",
"offset": 0,
"slot": "8",
"type": "t_array(t_uint256)dyn_storage"
"slot": "8"
},
{
"bytes": "32",
"label": "mapping(uint256 => uint256)",
"label": "_allTokensIndex",
"offset": 0,
"slot": "9",
"type": "t_mapping(t_uint256,t_uint256)"
"slot": "9"
},
{
"bytes": "32",
"label": "string",
"label": "baseTokenURI",
"offset": 0,
"slot": "10",
"type": "t_string_storage"
"slot": "10"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => bool)",
"label": "isOptimismMintableERC721",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_bool)"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "32",
"label": "struct ResourceMetering.ResourceParams",
"label": "params",
"offset": 0,
"slot": "1",
"type": "t_struct(ResourceParams)3420_storage"
"slot": "1"
},
{
"bytes": "1536",
"label": "uint256[48]",
"label": "__gap",
"offset": 0,
"slot": "2",
"type": "t_array(t_uint256)48_storage"
"slot": "2"
},
{
"bytes": "20",
"label": "address",
"label": "l2Sender",
"offset": 0,
"slot": "50",
"type": "t_address"
"slot": "50"
},
{
"bytes": "32",
"label": "mapping(bytes32 => bool)",
"label": "finalizedWithdrawals",
"offset": 0,
"slot": "51",
"type": "t_mapping(t_bytes32,t_bool)"
"slot": "51"
},
{
"bytes": "32",
"label": "mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)",
"label": "provenWithdrawals",
"offset": 0,
"slot": "52",
"type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)2750_storage)"
"slot": "52"
},
{
"bytes": "1",
"label": "bool",
"label": "spacer_53_0_1",
"offset": 0,
"slot": "53",
"type": "t_bool"
"slot": "53"
},
{
"bytes": "20",
"label": "contract SuperchainConfig",
"label": "superchainConfig",
"offset": 1,
"slot": "53",
"type": "t_contract(SuperchainConfig)3943"
"slot": "53"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
"slot": "1"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "51",
"type": "t_array(t_uint256)50_storage"
"slot": "51"
},
{
"bytes": "32",
"label": "string",
"label": "_name",
"offset": 0,
"slot": "101",
"type": "t_string_storage"
"slot": "101"
},
{
"bytes": "32",
"label": "string",
"label": "_symbol",
"offset": 0,
"slot": "102",
"type": "t_string_storage"
"slot": "102"
},
{
"bytes": "32",
"label": "mapping(uint256 => address)",
"label": "_owners",
"offset": 0,
"slot": "103",
"type": "t_mapping(t_uint256,t_address)"
"slot": "103"
},
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "_balances",
"offset": 0,
"slot": "104",
"type": "t_mapping(t_address,t_uint256)"
"slot": "104"
},
{
"bytes": "32",
"label": "mapping(uint256 => address)",
"label": "_tokenApprovals",
"offset": 0,
"slot": "105",
"type": "t_mapping(t_uint256,t_address)"
"slot": "105"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => bool))",
"label": "_operatorApprovals",
"offset": 0,
"slot": "106",
"type": "t_mapping(t_address,t_mapping(t_address,t_bool))"
"slot": "106"
},
{
"bytes": "1408",
"label": "uint256[44]",
"label": "__gap",
"offset": 0,
"slot": "107",
"type": "t_array(t_uint256)44_storage"
"slot": "107"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "151",
"type": "t_array(t_uint256)50_storage"
"slot": "151"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "32",
"label": "bytes32",
"label": "_HASHED_NAME",
"offset": 0,
"slot": "1",
"type": "t_bytes32"
"slot": "1"
},
{
"bytes": "32",
"label": "bytes32",
"label": "_HASHED_VERSION",
"offset": 0,
"slot": "2",
"type": "t_bytes32"
"slot": "2"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "3",
"type": "t_array(t_uint256)50_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "mapping(bytes32 => uint256)",
"label": "commitmentTimestamps",
"offset": 0,
"slot": "53",
"type": "t_mapping(t_bytes32,t_uint256)"
"slot": "53"
},
{
"bytes": "32",
"label": "mapping(address => mapping(bytes32 => bool))",
"label": "usedNonces",
"offset": 0,
"slot": "54",
"type": "t_mapping(t_address,t_mapping(t_bytes32,t_bool))"
"slot": "54"
},
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "inviteCounts",
"offset": 0,
"slot": "55",
"type": "t_mapping(t_address,t_uint256)"
"slot": "55"
}
]
\ No newline at end of file
[
{
"bytes": "8",
"label": "Timestamp",
"label": "createdAt",
"offset": 0,
"slot": "0",
"type": "t_userDefinedValueType(Timestamp)77431"
"slot": "0"
},
{
"bytes": "8",
"label": "Timestamp",
"label": "resolvedAt",
"offset": 8,
"slot": "0",
"type": "t_userDefinedValueType(Timestamp)77431"
"slot": "0"
},
{
"bytes": "1",
"label": "enum GameStatus",
"label": "status",
"offset": 16,
"slot": "0",
"type": "t_enum(GameStatus)77447"
"slot": "0"
},
{
"bytes": "20",
"label": "contract IBondManager",
"label": "bondManager",
"offset": 0,
"slot": "1",
"type": "t_contract(IBondManager)75133"
"slot": "1"
},
{
"bytes": "32",
"label": "Hash",
"label": "l1Head",
"offset": 0,
"slot": "2",
"type": "t_userDefinedValueType(Hash)77423"
"slot": "2"
},
{
"bytes": "32",
"label": "struct IOutputBisectionGame.ClaimData[]",
"label": "claimData",
"offset": 0,
"slot": "3",
"type": "t_array(t_struct(ClaimData)75468_storage)dyn_storage"
"slot": "3"
},
{
"bytes": "32",
"label": "mapping(ClaimHash => bool)",
"label": "claims",
"offset": 0,
"slot": "4",
"type": "t_mapping(t_userDefinedValueType(ClaimHash)77427,t_bool)"
"slot": "4"
},
{
"bytes": "32",
"label": "mapping(uint256 => uint256[])",
"label": "subgames",
"offset": 0,
"slot": "5",
"type": "t_mapping(t_uint256,t_array(t_uint256)dyn_storage)"
"slot": "5"
},
{
"bytes": "1",
"label": "bool",
"label": "subgameAtRootResolved",
"offset": 0,
"slot": "6",
"type": "t_bool"
"slot": "6"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(bytes32 => uint256)",
"label": "preimageLengths",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_bytes32,t_uint256)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(bytes32 => mapping(uint256 => bytes32))",
"label": "preimageParts",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(bytes32 => mapping(uint256 => bool))",
"label": "preimagePartOk",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))"
"slot": "2"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
"slot": "1"
},
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "51",
"type": "t_address"
"slot": "51"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "52",
"type": "t_array(t_uint256)49_storage"
"slot": "52"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => enum ProxyAdmin.ProxyType)",
"label": "proxyType",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_enum(ProxyType)2988)"
"slot": "1"
},
{
"bytes": "32",
"label": "mapping(address => string)",
"label": "implementationName",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_address,t_string_storage)"
"slot": "2"
},
{
"bytes": "20",
"label": "contract AddressManager",
"label": "addressManager",
"offset": 0,
"slot": "3",
"type": "t_contract(AddressManager)2205"
"slot": "3"
},
{
"bytes": "1",
"label": "bool",
"label": "upgrading",
"offset": 20,
"slot": "3",
"type": "t_bool"
"slot": "3"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(address => string)",
"label": "implementationName",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_string_storage)"
"slot": "0"
},
{
"bytes": "32",
"label": "mapping(address => contract AddressManager)",
"label": "addressManager",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_address,t_contract(AddressManager)76117)"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "mapping(bytes32 => struct SchemaRecord)",
"label": "_registry",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_bytes32,t_struct(SchemaRecord)47255_storage)"
"slot": "0"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)49_storage"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "uint256",
"label": "totalProcessed",
"offset": 0,
"slot": "0",
"type": "t_uint256"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "1",
"label": "uint8",
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8"
"slot": "0"
},
{
"bytes": "1",
"label": "bool",
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool"
"slot": "0"
},
{
"bytes": "1600",
"label": "uint256[50]",
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage"
"slot": "1"
},
{
"bytes": "20",
"label": "address",
"label": "_owner",
"offset": 0,
"slot": "51",
"type": "t_address"
"slot": "51"
},
{
"bytes": "1568",
"label": "uint256[49]",
"label": "__gap",
"offset": 0,
"slot": "52",
"type": "t_array(t_uint256)49_storage"
"slot": "52"
},
{
"bytes": "32",
"label": "uint256",
"label": "overhead",
"offset": 0,
"slot": "101",
"type": "t_uint256"
"slot": "101"
},
{
"bytes": "32",
"label": "uint256",
"label": "scalar",
"offset": 0,
"slot": "102",
"type": "t_uint256"
"slot": "102"
},
{
"bytes": "32",
"label": "bytes32",
"label": "batcherHash",
"offset": 0,
"slot": "103",
"type": "t_bytes32"
"slot": "103"
},
{
"bytes": "8",
"label": "uint64",
"label": "gasLimit",
"offset": 0,
"slot": "104",
"type": "t_uint64"
"slot": "104"
},
{
"bytes": "32",
"label": "struct ResourceMetering.ResourceConfig",
"label": "_resourceConfig",
"offset": 0,
"slot": "105",
"type": "t_struct(ResourceConfig)3433_storage"
"slot": "105"
}
]
\ No newline at end of file
[
{
"bytes": "20",
"label": "address",
"label": "owner",
"offset": 0,
"slot": "0",
"type": "t_address"
"slot": "0"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "uint256",
"label": "_status",
"offset": 0,
"slot": "0",
"type": "t_uint256"
"slot": "0"
},
{
"bytes": "32",
"label": "bytes32",
"label": "shell",
"offset": 0,
"slot": "1",
"type": "t_bytes32"
"slot": "1"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "string",
"label": "name",
"offset": 0,
"slot": "0",
"type": "t_string_storage"
"slot": "0"
},
{
"bytes": "32",
"label": "string",
"label": "symbol",
"offset": 0,
"slot": "1",
"type": "t_string_storage"
"slot": "1"
},
{
"bytes": "1",
"label": "uint8",
"label": "decimals",
"offset": 0,
"slot": "2",
"type": "t_uint8"
"slot": "2"
},
{
"bytes": "32",
"label": "mapping(address => uint256)",
"label": "balanceOf",
"offset": 0,
"slot": "3",
"type": "t_mapping(t_address,t_uint256)"
"slot": "3"
},
{
"bytes": "32",
"label": "mapping(address => mapping(address => uint256))",
"label": "allowance",
"offset": 0,
"slot": "4",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
"slot": "4"
}
]
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment