@tokamak-network/thanos-contracts
Version:
1 lines • 33.9 kB
JSON
{"abi":[],"bytecode":{"object":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"1247:2685:91:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1247:2685:91;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"1247:2685:91:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ```solidity contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/tokamak-contracts/USDC/L1/libraries/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/tokamak-contracts/USDC/L1/libraries/StorageSlot.sol\":{\"keccak256\":\"0x787e1146303d8c96198e87b7af989cbebd915244bee4020d9f159de952e98b4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49f31c7732b2b886b9b6718745627936007aa23e8d6d309c316f8a60b936131a\",\"dweb:/ipfs/QmXVu5oFjH7eTM4oKrsiHAW5BrEk5d86RvZ2xMWBZvdw4G\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/tokamak-contracts/USDC/L1/libraries/StorageSlot.sol":"StorageSlot"},"evmVersion":"cancun","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"src/tokamak-contracts/USDC/L1/libraries/StorageSlot.sol":{"keccak256":"0x787e1146303d8c96198e87b7af989cbebd915244bee4020d9f159de952e98b4f","urls":["bzz-raw://49f31c7732b2b886b9b6718745627936007aa23e8d6d309c316f8a60b936131a","dweb:/ipfs/QmXVu5oFjH7eTM4oKrsiHAW5BrEk5d86RvZ2xMWBZvdw4G"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user"},"devdoc":{"version":1,"kind":"dev","details":"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ```solidity contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ```"},"ast":{"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/StorageSlot.sol","id":60183,"exportedSymbols":{"StorageSlot":[60182]},"nodeType":"SourceUnit","src":"193:3740:91","nodes":[{"id":60074,"nodeType":"PragmaDirective","src":"193:23:91","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":60182,"nodeType":"ContractDefinition","src":"1247:2685:91","nodes":[{"id":60078,"nodeType":"StructDefinition","src":"1273:49:91","nodes":[],"canonicalName":"StorageSlot.AddressSlot","members":[{"constant":false,"id":60077,"mutability":"mutable","name":"value","nameLocation":"1310:5:91","nodeType":"VariableDeclaration","scope":60078,"src":"1302:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60076,"name":"address","nodeType":"ElementaryTypeName","src":"1302:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1280:11:91","scope":60182,"visibility":"public"},{"id":60081,"nodeType":"StructDefinition","src":"1328:46:91","nodes":[],"canonicalName":"StorageSlot.BooleanSlot","members":[{"constant":false,"id":60080,"mutability":"mutable","name":"value","nameLocation":"1362:5:91","nodeType":"VariableDeclaration","scope":60081,"src":"1357:10:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60079,"name":"bool","nodeType":"ElementaryTypeName","src":"1357:4:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1335:11:91","scope":60182,"visibility":"public"},{"id":60084,"nodeType":"StructDefinition","src":"1380:49:91","nodes":[],"canonicalName":"StorageSlot.Bytes32Slot","members":[{"constant":false,"id":60083,"mutability":"mutable","name":"value","nameLocation":"1417:5:91","nodeType":"VariableDeclaration","scope":60084,"src":"1409:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1409:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1387:11:91","scope":60182,"visibility":"public"},{"id":60087,"nodeType":"StructDefinition","src":"1435:49:91","nodes":[],"canonicalName":"StorageSlot.Uint256Slot","members":[{"constant":false,"id":60086,"mutability":"mutable","name":"value","nameLocation":"1472:5:91","nodeType":"VariableDeclaration","scope":60087,"src":"1464:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1464:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1442:11:91","scope":60182,"visibility":"public"},{"id":60090,"nodeType":"StructDefinition","src":"1490:47:91","nodes":[],"canonicalName":"StorageSlot.StringSlot","members":[{"constant":false,"id":60089,"mutability":"mutable","name":"value","nameLocation":"1525:5:91","nodeType":"VariableDeclaration","scope":60090,"src":"1518:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":60088,"name":"string","nodeType":"ElementaryTypeName","src":"1518:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1497:10:91","scope":60182,"visibility":"public"},{"id":60093,"nodeType":"StructDefinition","src":"1543:45:91","nodes":[],"canonicalName":"StorageSlot.BytesSlot","members":[{"constant":false,"id":60092,"mutability":"mutable","name":"value","nameLocation":"1576:5:91","nodeType":"VariableDeclaration","scope":60093,"src":"1570:11:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":60091,"name":"bytes","nodeType":"ElementaryTypeName","src":"1570:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1550:9:91","scope":60182,"visibility":"public"},{"id":60104,"nodeType":"FunctionDefinition","src":"1686:190:91","nodes":[],"body":{"id":60103,"nodeType":"Block","src":"1770:106:91","nodes":[],"statements":[{"AST":{"nativeSrc":"1832:38:91","nodeType":"YulBlock","src":"1832:38:91","statements":[{"nativeSrc":"1846:14:91","nodeType":"YulAssignment","src":"1846:14:91","value":{"name":"slot","nativeSrc":"1856:4:91","nodeType":"YulIdentifier","src":"1856:4:91"},"variableNames":[{"name":"r.slot","nativeSrc":"1846:6:91","nodeType":"YulIdentifier","src":"1846:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60100,"isOffset":false,"isSlot":true,"src":"1846:6:91","suffix":"slot","valueSize":1},{"declaration":60096,"isOffset":false,"isSlot":false,"src":"1856:4:91","valueSize":1}],"id":60102,"nodeType":"InlineAssembly","src":"1823:47:91"}]},"documentation":{"id":60094,"nodeType":"StructuredDocumentation","src":"1594:87:91","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1695:14:91","parameters":{"id":60097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60096,"mutability":"mutable","name":"slot","nameLocation":"1718:4:91","nodeType":"VariableDeclaration","scope":60104,"src":"1710:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60095,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1710:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1709:14:91"},"returnParameters":{"id":60101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60100,"mutability":"mutable","name":"r","nameLocation":"1767:1:91","nodeType":"VariableDeclaration","scope":60104,"src":"1747:21:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$60078_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":60099,"nodeType":"UserDefinedTypeName","pathNode":{"id":60098,"name":"AddressSlot","nameLocations":["1747:11:91"],"nodeType":"IdentifierPath","referencedDeclaration":60078,"src":"1747:11:91"},"referencedDeclaration":60078,"src":"1747:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$60078_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1746:23:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60115,"nodeType":"FunctionDefinition","src":"1974:190:91","nodes":[],"body":{"id":60114,"nodeType":"Block","src":"2058:106:91","nodes":[],"statements":[{"AST":{"nativeSrc":"2120:38:91","nodeType":"YulBlock","src":"2120:38:91","statements":[{"nativeSrc":"2134:14:91","nodeType":"YulAssignment","src":"2134:14:91","value":{"name":"slot","nativeSrc":"2144:4:91","nodeType":"YulIdentifier","src":"2144:4:91"},"variableNames":[{"name":"r.slot","nativeSrc":"2134:6:91","nodeType":"YulIdentifier","src":"2134:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60111,"isOffset":false,"isSlot":true,"src":"2134:6:91","suffix":"slot","valueSize":1},{"declaration":60107,"isOffset":false,"isSlot":false,"src":"2144:4:91","valueSize":1}],"id":60113,"nodeType":"InlineAssembly","src":"2111:47:91"}]},"documentation":{"id":60105,"nodeType":"StructuredDocumentation","src":"1882:87:91","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"1983:14:91","parameters":{"id":60108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60107,"mutability":"mutable","name":"slot","nameLocation":"2006:4:91","nodeType":"VariableDeclaration","scope":60115,"src":"1998:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60106,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1998:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1997:14:91"},"returnParameters":{"id":60112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60111,"mutability":"mutable","name":"r","nameLocation":"2055:1:91","nodeType":"VariableDeclaration","scope":60115,"src":"2035:21:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$60081_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":60110,"nodeType":"UserDefinedTypeName","pathNode":{"id":60109,"name":"BooleanSlot","nameLocations":["2035:11:91"],"nodeType":"IdentifierPath","referencedDeclaration":60081,"src":"2035:11:91"},"referencedDeclaration":60081,"src":"2035:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$60081_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2034:23:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60126,"nodeType":"FunctionDefinition","src":"2262:190:91","nodes":[],"body":{"id":60125,"nodeType":"Block","src":"2346:106:91","nodes":[],"statements":[{"AST":{"nativeSrc":"2408:38:91","nodeType":"YulBlock","src":"2408:38:91","statements":[{"nativeSrc":"2422:14:91","nodeType":"YulAssignment","src":"2422:14:91","value":{"name":"slot","nativeSrc":"2432:4:91","nodeType":"YulIdentifier","src":"2432:4:91"},"variableNames":[{"name":"r.slot","nativeSrc":"2422:6:91","nodeType":"YulIdentifier","src":"2422:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60122,"isOffset":false,"isSlot":true,"src":"2422:6:91","suffix":"slot","valueSize":1},{"declaration":60118,"isOffset":false,"isSlot":false,"src":"2432:4:91","valueSize":1}],"id":60124,"nodeType":"InlineAssembly","src":"2399:47:91"}]},"documentation":{"id":60116,"nodeType":"StructuredDocumentation","src":"2170:87:91","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2271:14:91","parameters":{"id":60119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60118,"mutability":"mutable","name":"slot","nameLocation":"2294:4:91","nodeType":"VariableDeclaration","scope":60126,"src":"2286:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60117,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2286:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2285:14:91"},"returnParameters":{"id":60123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60122,"mutability":"mutable","name":"r","nameLocation":"2343:1:91","nodeType":"VariableDeclaration","scope":60126,"src":"2323:21:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$60084_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":60121,"nodeType":"UserDefinedTypeName","pathNode":{"id":60120,"name":"Bytes32Slot","nameLocations":["2323:11:91"],"nodeType":"IdentifierPath","referencedDeclaration":60084,"src":"2323:11:91"},"referencedDeclaration":60084,"src":"2323:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$60084_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2322:23:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60137,"nodeType":"FunctionDefinition","src":"2550:190:91","nodes":[],"body":{"id":60136,"nodeType":"Block","src":"2634:106:91","nodes":[],"statements":[{"AST":{"nativeSrc":"2696:38:91","nodeType":"YulBlock","src":"2696:38:91","statements":[{"nativeSrc":"2710:14:91","nodeType":"YulAssignment","src":"2710:14:91","value":{"name":"slot","nativeSrc":"2720:4:91","nodeType":"YulIdentifier","src":"2720:4:91"},"variableNames":[{"name":"r.slot","nativeSrc":"2710:6:91","nodeType":"YulIdentifier","src":"2710:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60133,"isOffset":false,"isSlot":true,"src":"2710:6:91","suffix":"slot","valueSize":1},{"declaration":60129,"isOffset":false,"isSlot":false,"src":"2720:4:91","valueSize":1}],"id":60135,"nodeType":"InlineAssembly","src":"2687:47:91"}]},"documentation":{"id":60127,"nodeType":"StructuredDocumentation","src":"2458:87:91","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2559:14:91","parameters":{"id":60130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60129,"mutability":"mutable","name":"slot","nameLocation":"2582:4:91","nodeType":"VariableDeclaration","scope":60137,"src":"2574:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60128,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2574:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2573:14:91"},"returnParameters":{"id":60134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60133,"mutability":"mutable","name":"r","nameLocation":"2631:1:91","nodeType":"VariableDeclaration","scope":60137,"src":"2611:21:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$60087_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":60132,"nodeType":"UserDefinedTypeName","pathNode":{"id":60131,"name":"Uint256Slot","nameLocations":["2611:11:91"],"nodeType":"IdentifierPath","referencedDeclaration":60087,"src":"2611:11:91"},"referencedDeclaration":60087,"src":"2611:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$60087_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2610:23:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60148,"nodeType":"FunctionDefinition","src":"2837:188:91","nodes":[],"body":{"id":60147,"nodeType":"Block","src":"2919:106:91","nodes":[],"statements":[{"AST":{"nativeSrc":"2981:38:91","nodeType":"YulBlock","src":"2981:38:91","statements":[{"nativeSrc":"2995:14:91","nodeType":"YulAssignment","src":"2995:14:91","value":{"name":"slot","nativeSrc":"3005:4:91","nodeType":"YulIdentifier","src":"3005:4:91"},"variableNames":[{"name":"r.slot","nativeSrc":"2995:6:91","nodeType":"YulIdentifier","src":"2995:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60144,"isOffset":false,"isSlot":true,"src":"2995:6:91","suffix":"slot","valueSize":1},{"declaration":60140,"isOffset":false,"isSlot":false,"src":"3005:4:91","valueSize":1}],"id":60146,"nodeType":"InlineAssembly","src":"2972:47:91"}]},"documentation":{"id":60138,"nodeType":"StructuredDocumentation","src":"2746:86:91","text":" @dev Returns an `StringSlot` with member `value` located at `slot`."},"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"2846:13:91","parameters":{"id":60141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60140,"mutability":"mutable","name":"slot","nameLocation":"2868:4:91","nodeType":"VariableDeclaration","scope":60148,"src":"2860:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60139,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2860:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2859:14:91"},"returnParameters":{"id":60145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60144,"mutability":"mutable","name":"r","nameLocation":"2916:1:91","nodeType":"VariableDeclaration","scope":60148,"src":"2897:20:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$60090_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":60143,"nodeType":"UserDefinedTypeName","pathNode":{"id":60142,"name":"StringSlot","nameLocations":["2897:10:91"],"nodeType":"IdentifierPath","referencedDeclaration":60090,"src":"2897:10:91"},"referencedDeclaration":60090,"src":"2897:10:91","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$60090_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"2896:22:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60159,"nodeType":"FunctionDefinition","src":"3137:202:91","nodes":[],"body":{"id":60158,"nodeType":"Block","src":"3227:112:91","nodes":[],"statements":[{"AST":{"nativeSrc":"3289:44:91","nodeType":"YulBlock","src":"3289:44:91","statements":[{"nativeSrc":"3303:20:91","nodeType":"YulAssignment","src":"3303:20:91","value":{"name":"store.slot","nativeSrc":"3313:10:91","nodeType":"YulIdentifier","src":"3313:10:91"},"variableNames":[{"name":"r.slot","nativeSrc":"3303:6:91","nodeType":"YulIdentifier","src":"3303:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60155,"isOffset":false,"isSlot":true,"src":"3303:6:91","suffix":"slot","valueSize":1},{"declaration":60151,"isOffset":false,"isSlot":true,"src":"3313:10:91","suffix":"slot","valueSize":1}],"id":60157,"nodeType":"InlineAssembly","src":"3280:53:91"}]},"documentation":{"id":60149,"nodeType":"StructuredDocumentation","src":"3031:101:91","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3146:13:91","parameters":{"id":60152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60151,"mutability":"mutable","name":"store","nameLocation":"3175:5:91","nodeType":"VariableDeclaration","scope":60159,"src":"3160:20:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":60150,"name":"string","nodeType":"ElementaryTypeName","src":"3160:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3159:22:91"},"returnParameters":{"id":60156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60155,"mutability":"mutable","name":"r","nameLocation":"3224:1:91","nodeType":"VariableDeclaration","scope":60159,"src":"3205:20:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$60090_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":60154,"nodeType":"UserDefinedTypeName","pathNode":{"id":60153,"name":"StringSlot","nameLocations":["3205:10:91"],"nodeType":"IdentifierPath","referencedDeclaration":60090,"src":"3205:10:91"},"referencedDeclaration":60090,"src":"3205:10:91","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$60090_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3204:22:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60170,"nodeType":"FunctionDefinition","src":"3435:186:91","nodes":[],"body":{"id":60169,"nodeType":"Block","src":"3515:106:91","nodes":[],"statements":[{"AST":{"nativeSrc":"3577:38:91","nodeType":"YulBlock","src":"3577:38:91","statements":[{"nativeSrc":"3591:14:91","nodeType":"YulAssignment","src":"3591:14:91","value":{"name":"slot","nativeSrc":"3601:4:91","nodeType":"YulIdentifier","src":"3601:4:91"},"variableNames":[{"name":"r.slot","nativeSrc":"3591:6:91","nodeType":"YulIdentifier","src":"3591:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60166,"isOffset":false,"isSlot":true,"src":"3591:6:91","suffix":"slot","valueSize":1},{"declaration":60162,"isOffset":false,"isSlot":false,"src":"3601:4:91","valueSize":1}],"id":60168,"nodeType":"InlineAssembly","src":"3568:47:91"}]},"documentation":{"id":60160,"nodeType":"StructuredDocumentation","src":"3345:85:91","text":" @dev Returns an `BytesSlot` with member `value` located at `slot`."},"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3444:12:91","parameters":{"id":60163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60162,"mutability":"mutable","name":"slot","nameLocation":"3465:4:91","nodeType":"VariableDeclaration","scope":60170,"src":"3457:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60161,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3457:7:91","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3456:14:91"},"returnParameters":{"id":60167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60166,"mutability":"mutable","name":"r","nameLocation":"3512:1:91","nodeType":"VariableDeclaration","scope":60170,"src":"3494:19:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$60093_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":60165,"nodeType":"UserDefinedTypeName","pathNode":{"id":60164,"name":"BytesSlot","nameLocations":["3494:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":60093,"src":"3494:9:91"},"referencedDeclaration":60093,"src":"3494:9:91","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$60093_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3493:21:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":60181,"nodeType":"FunctionDefinition","src":"3731:199:91","nodes":[],"body":{"id":60180,"nodeType":"Block","src":"3818:112:91","nodes":[],"statements":[{"AST":{"nativeSrc":"3880:44:91","nodeType":"YulBlock","src":"3880:44:91","statements":[{"nativeSrc":"3894:20:91","nodeType":"YulAssignment","src":"3894:20:91","value":{"name":"store.slot","nativeSrc":"3904:10:91","nodeType":"YulIdentifier","src":"3904:10:91"},"variableNames":[{"name":"r.slot","nativeSrc":"3894:6:91","nodeType":"YulIdentifier","src":"3894:6:91"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":60177,"isOffset":false,"isSlot":true,"src":"3894:6:91","suffix":"slot","valueSize":1},{"declaration":60173,"isOffset":false,"isSlot":true,"src":"3904:10:91","suffix":"slot","valueSize":1}],"id":60179,"nodeType":"InlineAssembly","src":"3871:53:91"}]},"documentation":{"id":60171,"nodeType":"StructuredDocumentation","src":"3627:99:91","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3740:12:91","parameters":{"id":60174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60173,"mutability":"mutable","name":"store","nameLocation":"3767:5:91","nodeType":"VariableDeclaration","scope":60181,"src":"3753:19:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":60172,"name":"bytes","nodeType":"ElementaryTypeName","src":"3753:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3752:21:91"},"returnParameters":{"id":60178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60177,"mutability":"mutable","name":"r","nameLocation":"3815:1:91","nodeType":"VariableDeclaration","scope":60181,"src":"3797:19:91","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$60093_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":60176,"nodeType":"UserDefinedTypeName","pathNode":{"id":60175,"name":"BytesSlot","nameLocations":["3797:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":60093,"src":"3797:9:91"},"referencedDeclaration":60093,"src":"3797:9:91","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$60093_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:91"},"scope":60182,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":60075,"nodeType":"StructuredDocumentation","src":"218:1028:91","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```solidity\n contract ERC1967 {\n bytes32 internal constant _IMPLEMENTATION_SLOT =\n 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```"},"fullyImplemented":true,"linearizedBaseContracts":[60182],"name":"StorageSlot","nameLocation":"1255:11:91","scope":60183,"usedErrors":[],"usedEvents":[]}],"license":"MIT"},"id":91}