Commit b21fe25f authored by inphi's avatar inphi

fix(ctb): fix abi/storage snapshot script

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