diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..34a4a52 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,43 @@ +name: CI + +on: + push: + pull_request: + workflow_dispatch: + +env: + FOUNDRY_PROFILE: ci + +jobs: + check: + strategy: + fail-fast: true + + name: Foundry project + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Show Forge version + run: | + forge --version + + - name: Run Forge fmt + run: | + forge fmt --check + id: fmt + + - name: Run Forge build + run: | + forge build --sizes + id: build + + - name: Run Forge tests + run: | + forge test -vvv + id: test diff --git a/.gitignore b/.gitignore index f9fe6c2..17e8074 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ out/ .yarn/build-state.yml .yarn/install-state.gz .pnp.* + +/cache diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..888d42d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lib/forge-std"] + path = lib/forge-std + url = https://github.com/foundry-rs/forge-std diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..2ab6b2f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,20 @@ +enableGlobalCache: true + +enableTelemetry: false + +npmRegistryServer: "https://registry.npmjs.org" + +nodeLinker: node-modules + +supportedArchitectures: + cpu: + - x64 + - arm64 + libc: + - glibc + - musl + os: + - darwin + - linux + +yarnPath: .yarn/releases/yarn-4.6.0.cjs \ No newline at end of file diff --git a/README.md b/README.md index 4642644..e7036b1 100644 --- a/README.md +++ b/README.md @@ -1 +1,79 @@ -# namespace +## Foundry + +**Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.** + +Foundry consists of: + +- **Forge**: Ethereum testing framework (like Truffle, Hardhat and DappTools). +- **Cast**: Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data. +- **Anvil**: Local Ethereum node, akin to Ganache, Hardhat Network. +- **Chisel**: Fast, utilitarian, and verbose solidity REPL. + +## Documentation + +https://book.getfoundry.sh/ + +## Usage + +### Build + +```shell +$ forge build +``` + +### Test + +```shell +$ forge test +``` + +### Format + +```shell +$ forge fmt +``` + +### Gas Snapshots + +```shell +$ forge snapshot +``` + +### Anvil + +```shell +$ anvil +``` + +### Deploy + +```shell +$ forge script script/Counter.s.sol:CounterScript --rpc-url --private-key +``` + +### Cast + +```shell +$ cast +``` + +### Help + +```shell +$ forge --help +$ anvil --help +$ cast --help +``` + +# Verify contract + +```shell +forge verify-contract \ +$CONTRACT_ADDRESS \ +src/Namespace.sol:Namespace \ +--chain-id $CHAIN_ID \ +--constructor-args $(cast abi-encode "constructor(address)" "$OWNER_ADDRESS") \ +--etherscan-api-key $ETHERSCAN_API_KEY \ +--compiler-version $COMPILER_VERSION \ +--watch +``` diff --git a/broadcast/NamespaceDeployment.s.sol/11155420/run-1737130083.json b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737130083.json new file mode 100644 index 0000000..6899815 --- /dev/null +++ b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737130083.json @@ -0,0 +1,70 @@ +{ + "transactions": [ + { + "hash": "0xbd0ef47e33b4fd904e5383c70abb57cb5aa5890dd8bdd32769b5eb0611f84000", + "transactionType": "CREATE", + "contractName": "Namespace", + "contractAddress": "0x4c306972aa3d8ae7f32b9e29dd48bacda2c53a30", + "function": null, + "arguments": [ + "0x2E79317053399D2b45E32B35aBb1a592723fD061" + ], + "transaction": { + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "gas": "0x1d0b13", + "value": "0x0", + "input": "0x60806040526001600b55348015610014575f5ffd5b50604051611a54380380611a5483398101604081905261003391610123565b806040518060400160405280600f81526020016e2730b6b2b9b830b1b2902a37b5b2b760891b815250604051806040016040528060028152602001614e5360f01b815250815f908161008591906101e8565b50600161009282826101e8565b5050506001600160a01b0381166100c257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100cb816100d2565b50506102a2565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f60208284031215610133575f5ffd5b81516001600160a01b0381168114610149575f5ffd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061017857607f821691505b60208210810361019657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101e357805f5260205f20601f840160051c810160208510156101c15750805b601f840160051c820191505b818110156101e0575f81556001016101cd565b50505b505050565b81516001600160401b0381111561020157610201610150565b6102158161020f8454610164565b8461019c565b6020601f821160018114610247575f83156102305750848201515b5f19600385901b1c1916600184901b1784556101e0565b5f84815260208120601f198516915b828110156102765787850151825560209485019460019092019101610256565b508482101561029357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6117a5806102af5f395ff3fe608060405234801561000f575f5ffd5b506004361061013d575f3560e01c80636352211e116100b457806395d89b411161007957806395d89b41146102ac578063a22cb465146102b4578063b88d4fde146102c7578063c87b56dd146102da578063e985e9c5146102ed578063f2fde38b14610300575f5ffd5b80636352211e1461025a578063695850fb1461026d57806370a0823114610280578063715018a6146102935780638da5cb5b1461029b575f5ffd5b806323b872dd1161010557806323b872dd146101d05780632f745c59146101e357806332e89943146101f657806342842e0e146102215780634f6ccce714610234578063595a0d3f14610247575f5ffd5b806301ffc9a71461014157806306fdde0314610169578063081812fc1461017e578063095ea7b3146101a957806318160ddd146101be575b5f5ffd5b61015461014f36600461128b565b610313565b60405190151581526020015b60405180910390f35b610171610323565b60405161016091906112d4565b61019161018c3660046112e6565b6103b2565b6040516001600160a01b039091168152602001610160565b6101bc6101b7366004611318565b6103d9565b005b6008545b604051908152602001610160565b6101bc6101de366004611340565b6103e8565b6101c26101f1366004611318565b610476565b6101c2610204366004611405565b8051602081830181018051600d8252928201919093012091525481565b6101bc61022f366004611340565b6104d9565b6101c26102423660046112e6565b6104f8565b6101716102553660046112e6565b61054d565b6101916102683660046112e6565b6105e4565b6101bc61027b366004611405565b6105ee565b6101c261028e36600461144a565b610711565b6101bc610756565b600a546001600160a01b0316610191565b610171610769565b6101bc6102c2366004611463565b610778565b6101bc6102d536600461149c565b610783565b6101716102e83660046112e6565b61079b565b6101546102fb366004611513565b61080c565b6101bc61030e36600461144a565b610839565b5f61031d82610876565b92915050565b60605f805461033190611544565b80601f016020809104026020016040519081016040528092919081815260200182805461035d90611544565b80156103a85780601f1061037f576101008083540402835291602001916103a8565b820191905f5260205f20905b81548152906001019060200180831161038b57829003601f168201915b5050505050905090565b5f6103bc8261089a565b505f828152600460205260409020546001600160a01b031661031d565b6103e48282336108d2565b5050565b6001600160a01b03821661041657604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f6104228383336108df565b9050836001600160a01b0316816001600160a01b031614610470576040516364283d7b60e01b81526001600160a01b038086166004830152602482018490528216604482015260640161040d565b50505050565b5f61048083610711565b82106104b15760405163295f44f760e21b81526001600160a01b03841660048201526024810183905260440161040d565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b6104f383838360405180602001604052805f815250610783565b505050565b5f61050260085490565b821061052a5760405163295f44f760e21b81525f60048201526024810183905260440161040d565b6008828154811061053d5761053d61157c565b905f5260205f2001549050919050565b600c6020525f90815260409020805461056590611544565b80601f016020809104026020016040519081016040528092919081815260200182805461059190611544565b80156105dc5780601f106105b3576101008083540402835291602001916105dc565b820191905f5260205f20905b8154815290600101906020018083116105bf57829003601f168201915b505050505081565b5f61031d8261089a565b6105f66108f3565b805133906106465760405162461bcd60e51b815260206004820152601960248201527f4e616d6573706163652063616e6e6f7420626520656d70747900000000000000604482015260640161040d565b600d8260405161065691906115a7565b9081526020016040518091039020545f146106b35760405162461bcd60e51b815260206004820152601a60248201527f4e616d65737061636520697320616c72656164792074616b656e000000000000604482015260640161040d565b600b80545f91826106c3836115c6565b9190505590506106d38282610920565b5f818152600c602052604090206106ea8482611622565b5080600d846040516106fc91906115a7565b90815260405190819003602001902055505050565b5f6001600160a01b03821661073b576040516322718ad960e21b81525f600482015260240161040d565b506001600160a01b03165f9081526003602052604090205490565b61075e6108f3565b6107675f610939565b565b60606001805461033190611544565b6103e433838361098a565b61078e8484846103e8565b6104703385858585610a28565b60606107a68261089a565b505f6107bc60408051602081019091525f815290565b90505f8151116107da5760405180602001604052805f815250610805565b806107e484610b50565b6040516020016107f59291906116dd565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6108416108f3565b6001600160a01b03811661086a57604051631e4fbdf760e01b81525f600482015260240161040d565b61087381610939565b50565b5f6001600160e01b0319821663780e9d6360e01b148061031d575061031d82610be0565b5f818152600260205260408120546001600160a01b03168061031d57604051637e27328960e01b81526004810184905260240161040d565b6104f38383836001610c2f565b5f6108eb848484610d33565b949350505050565b600a546001600160a01b031633146107675760405163118cdaa760e01b815233600482015260240161040d565b6103e4828260405180602001604052805f815250610dfe565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166109bc57604051630b61174360e31b81526001600160a01b038316600482015260240161040d565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610b4957604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a6a9088908890879087906004016116f1565b6020604051808303815f875af1925050508015610aa4575060408051601f3d908101601f19168201909252610aa19181019061172d565b60015b610b0b573d808015610ad1576040519150601f19603f3d011682016040523d82523d5f602084013e610ad6565b606091505b5080515f03610b0357604051633250574960e11b81526001600160a01b038516600482015260240161040d565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b4757604051633250574960e11b81526001600160a01b038516600482015260240161040d565b505b5050505050565b60605f610b5c83610e15565b60010190505f8167ffffffffffffffff811115610b7b57610b7b61137a565b6040519080825280601f01601f191660200182016040528015610ba5576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610baf57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480610c1057506001600160e01b03198216635b5e139f60e01b145b8061031d57506301ffc9a760e01b6001600160e01b031983161461031d565b8080610c4357506001600160a01b03821615155b15610d04575f610c528461089a565b90506001600160a01b03831615801590610c7e5750826001600160a01b0316816001600160a01b031614155b8015610c915750610c8f818461080c565b155b15610cba5760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161040d565b8115610d025783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f610d40858585610eec565b90506001600160a01b038116610d9c57610d9784600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610dbf565b846001600160a01b0316816001600160a01b031614610dbf57610dbf8185610fde565b6001600160a01b038516610ddb57610dd68461105b565b6108eb565b846001600160a01b0316816001600160a01b0316146108eb576108eb8585611102565b610e088383611150565b6104f3335f858585610a28565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e535772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610e7f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610e9d57662386f26fc10000830492506010015b6305f5e1008310610eb5576305f5e100830492506008015b6127108310610ec957612710830492506004015b60648310610edb576064830492506002015b600a831061031d5760010192915050565b5f828152600260205260408120546001600160a01b0390811690831615610f1857610f188184866111b1565b6001600160a01b03811615610f5257610f335f855f5f610c2f565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610f80576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610fe883610711565b5f838152600760209081526040808320546001600160a01b038816845260069092529091209192509081831461103d575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f9061106c90600190611748565b5f83815260096020526040812054600880549394509092849081106110935761109361157c565b905f5260205f200154905080600883815481106110b2576110b261157c565b5f9182526020808320909101929092558281526009909152604080822084905585825281205560088054806110e9576110e961175b565b600190038181905f5260205f20015f9055905550505050565b5f600161110e84610711565b6111189190611748565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661117957604051633250574960e11b81525f600482015260240161040d565b5f61118583835f6108df565b90506001600160a01b038116156104f3576040516339e3563760e11b81525f600482015260240161040d565b6111bc838383611215565b6104f3576001600160a01b0383166111ea57604051637e27328960e01b81526004810182905260240161040d565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161040d565b5f6001600160a01b038316158015906108eb5750826001600160a01b0316846001600160a01b0316148061124e575061124e848461080c565b806108eb5750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610873575f5ffd5b5f6020828403121561129b575f5ffd5b813561080581611276565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61080560208301846112a6565b5f602082840312156112f6575f5ffd5b5035919050565b80356001600160a01b0381168114611313575f5ffd5b919050565b5f5f60408385031215611329575f5ffd5b611332836112fd565b946020939093013593505050565b5f5f5f60608486031215611352575f5ffd5b61135b846112fd565b9250611369602085016112fd565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156113a8576113a861137a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156113d7576113d761137a565b6040528381529050808284018510156113ee575f5ffd5b838360208301375f60208583010152509392505050565b5f60208284031215611415575f5ffd5b813567ffffffffffffffff81111561142b575f5ffd5b8201601f8101841361143b575f5ffd5b6108eb8482356020840161138e565b5f6020828403121561145a575f5ffd5b610805826112fd565b5f5f60408385031215611474575f5ffd5b61147d836112fd565b915060208301358015158114611491575f5ffd5b809150509250929050565b5f5f5f5f608085870312156114af575f5ffd5b6114b8856112fd565b93506114c6602086016112fd565b925060408501359150606085013567ffffffffffffffff8111156114e8575f5ffd5b8501601f810187136114f8575f5ffd5b6115078782356020840161138e565b91505092959194509250565b5f5f60408385031215611524575f5ffd5b61152d836112fd565b915061153b602084016112fd565b90509250929050565b600181811c9082168061155857607f821691505b60208210810361157657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6108058284611590565b634e487b7160e01b5f52601160045260245ffd5b5f600182016115d7576115d76115b2565b5060010190565b601f8211156104f357805f5260205f20601f840160051c810160208510156116035750805b601f840160051c820191505b81811015610b49575f815560010161160f565b815167ffffffffffffffff81111561163c5761163c61137a565b6116508161164a8454611544565b846115de565b6020601f821160018114611682575f831561166b5750848201515b5f19600385901b1c1916600184901b178455610b49565b5f84815260208120601f198516915b828110156116b15787850151825560209485019460019092019101611691565b50848210156116ce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f6108eb6116eb8386611590565b84611590565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611723908301846112a6565b9695505050505050565b5f6020828403121561173d575f5ffd5b815161080581611276565b8181038181111561031d5761031d6115b2565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212201f9fdb794d4a4c2c2e65fa978359a712fc93381956efddaf0875fa62ff2edfdc64736f6c634300081b00330000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061", + "nonce": "0xa", + "chainId": "0xaa37dc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x3de2d3", + "logs": [ + { + "address": "0x4c306972aa3d8ae7f32b9e29dd48bacda2c53a30", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061" + ], + "data": "0x", + "blockHash": "0xae6fa7c379487757f6e00d1798bbcf5045f0ae13267480c5bff9a6bc340c178c", + "blockNumber": "0x159d250", + "transactionHash": "0xbd0ef47e33b4fd904e5383c70abb57cb5aa5890dd8bdd32769b5eb0611f84000", + "transactionIndex": "0xa", + "logIndex": "0x28", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000400000000000000000000001000000000000000000000000001000000000000001800000000000000000000020000000000000000000800000000000000000000000000000000400000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xbd0ef47e33b4fd904e5383c70abb57cb5aa5890dd8bdd32769b5eb0611f84000", + "transactionIndex": "0xa", + "blockHash": "0xae6fa7c379487757f6e00d1798bbcf5045f0ae13267480c5bff9a6bc340c178c", + "blockNumber": "0x159d250", + "gasUsed": "0x16574a", + "effectiveGasPrice": "0xc69d", + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "to": null, + "contractAddress": "0x4c306972aa3d8ae7f32b9e29dd48bacda2c53a30", + "l1BaseFeeScalar": "0x1db0", + "l1BlobBaseFee": "0xd", + "l1BlobBaseFeeScalar": "0xd2730", + "l1Fee": "0xa736f6d796", + "l1GasPrice": "0x57c3ab47", + "l1GasUsed": "0xfab1" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1737130083, + "chain": 11155420, + "commit": "843fea6" +} \ No newline at end of file diff --git a/broadcast/NamespaceDeployment.s.sol/11155420/run-1737161536.json b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737161536.json new file mode 100644 index 0000000..a3b2775 --- /dev/null +++ b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737161536.json @@ -0,0 +1,71 @@ +{ + "transactions": [ + { + "hash": "0xb7740d9749e5c40770ca3f69d1a1975ddf27b40616a6e4e7ab2b202a26641cb3", + "transactionType": "CREATE", + "contractName": "Namespace", + "contractAddress": "0x8899355c97ce2eed95f12b062478b7b05e9f0e0a", + "function": null, + "arguments": [ + "0x2E79317053399D2b45E32B35aBb1a592723fD061", + "0x007128cBcD31C2251a6Ea76Fc71FBe3bFe691396" + ], + "transaction": { + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "gas": "0x2013a2", + "value": "0x0", + "input": "0x60806040526001600c55348015610014575f5ffd5b50604051611ce9380380611ce98339810160408190526100339161015e565b816040518060400160405280600f81526020016e2730b6b2b9b830b1b2902a37b5b2b760891b815250604051806040016040528060028152602001614e5360f01b815250815f90816100859190610227565b5060016100928282610227565b5050506001600160a01b0381166100c257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100cb816100f2565b50600b80546001600160a01b0319166001600160a01b0392909216919091179055506102e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b0381168114610159575f5ffd5b919050565b5f5f6040838503121561016f575f5ffd5b61017883610143565b915061018660208401610143565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101b757607f821691505b6020821081036101d557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022257805f5260205f20601f840160051c810160208510156102005750805b601f840160051c820191505b8181101561021f575f815560010161020c565b50505b505050565b81516001600160401b038111156102405761024061018f565b6102548161024e84546101a3565b846101db565b6020601f821160018114610286575f831561026f5750848201515b5f19600385901b1c1916600184901b17845561021f565b5f84815260208120601f198516915b828110156102b55787850151825560209485019460019092019101610295565b50848210156102d257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6119fb806102ee5f395ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c8063695850fb116100bf57806395d89b411161007957806395d89b41146102e8578063a22cb465146102f0578063b88d4fde14610303578063c87b56dd14610316578063e985e9c514610329578063f2fde38b1461033c575f5ffd5b8063695850fb1461028357806370a0823114610296578063715018a6146102a9578063854cff2f146102b15780638da5cb5b146102c457806393e59dc1146102d5575f5ffd5b80632f745c59116101105780632f745c59146101f957806332e899431461020c57806342842e0e146102375780634f6ccce71461024a578063595a0d3f1461025d5780636352211e14610270575f5ffd5b806301ffc9a71461015757806306fdde031461017f578063081812fc14610194578063095ea7b3146101bf57806318160ddd146101d457806323b872dd146101e6575b5f5ffd5b61016a6101653660046114a6565b61034f565b60405190151581526020015b60405180910390f35b61018761035f565b60405161017691906114ef565b6101a76101a2366004611501565b6103ee565b6040516001600160a01b039091168152602001610176565b6101d26101cd366004611533565b610415565b005b6008545b604051908152602001610176565b6101d26101f436600461155b565b610424565b6101d8610207366004611533565b6104b2565b6101d861021a366004611620565b8051602081830181018051600e8252928201919093012091525481565b6101d261024536600461155b565b610515565b6101d8610258366004611501565b610534565b61018761026b366004611501565b610589565b6101a761027e366004611501565b610620565b6101d2610291366004611620565b61062a565b6101d86102a4366004611665565b61085f565b6101d26108a4565b6101d26102bf366004611665565b6108b7565b600a546001600160a01b03166101a7565b600b546101a7906001600160a01b031681565b610187610984565b6101d26102fe36600461168b565b610993565b6101d26103113660046116c0565b61099e565b610187610324366004611501565b6109b6565b61016a610337366004611737565b610a27565b6101d261034a366004611665565b610a54565b5f61035982610a91565b92915050565b60605f805461036d90611768565b80601f016020809104026020016040519081016040528092919081815260200182805461039990611768565b80156103e45780601f106103bb576101008083540402835291602001916103e4565b820191905f5260205f20905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b5f6103f882610ab5565b505f828152600460205260409020546001600160a01b0316610359565b610420828233610aed565b5050565b6001600160a01b03821661045257604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61045e838333610afa565b9050836001600160a01b0316816001600160a01b0316146104ac576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610449565b50505050565b5f6104bc8361085f565b82106104ed5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610449565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b61052f83838360405180602001604052805f81525061099e565b505050565b5f61053e60085490565b82106105665760405163295f44f760e21b81525f600482015260248101839052604401610449565b60088281548110610579576105796117a0565b905f5260205f2001549050919050565b600d6020525f9081526040902080546105a190611768565b80601f01602080910402602001604051908101604052809291908181526020018280546105cd90611768565b80156106185780601f106105ef57610100808354040283529160200191610618565b820191905f5260205f20905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b5f61035982610ab5565b600b54604080516334b093bf60e21b8152905133926001600160a01b0316916391d1485491839163d2c24efc9160048083019260209291908290030181865afa158015610679573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069d91906117b4565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b0384166024820152604401602060405180830381865afa1580156106e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a91906117cb565b6107445760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610449565b5f8251116107945760405162461bcd60e51b815260206004820152601960248201527f4e616d6573706163652063616e6e6f7420626520656d707479000000000000006044820152606401610449565b600e826040516107a491906117fd565b9081526020016040518091039020545f146108015760405162461bcd60e51b815260206004820152601a60248201527f4e616d65737061636520697320616c72656164792074616b656e0000000000006044820152606401610449565b600c80545f91826108118361181c565b9190505590506108218282610b0e565b5f818152600d602052604090206108388482611878565b5080600e8460405161084a91906117fd565b90815260405190819003602001902055505050565b5f6001600160a01b038216610889576040516322718ad960e21b81525f6004820152602401610449565b506001600160a01b03165f9081526003602052604090205490565b6108ac610b27565b6108b55f610b54565b565b6108bf610b27565b6001600160a01b03811661093b5760405162461bcd60e51b815260206004820152603a60248201527f4e65772077686974656c69737420636f6e74726163742061646472657373206360448201527f616e6e6f7420626520746865207a65726f20616464726573732e0000000000006064820152608401610449565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f29d77446d0fb0dcebabf25ce79ea69ba1382a4525d4acf615a38c89c798aef71905f90a250565b60606001805461036d90611768565b610420338383610ba5565b6109a9848484610424565b6104ac3385858585610c43565b60606109c182610ab5565b505f6109d760408051602081019091525f815290565b90505f8151116109f55760405180602001604052805f815250610a20565b806109ff84610d6b565b604051602001610a10929190611933565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b610a5c610b27565b6001600160a01b038116610a8557604051631e4fbdf760e01b81525f6004820152602401610449565b610a8e81610b54565b50565b5f6001600160e01b0319821663780e9d6360e01b1480610359575061035982610dfb565b5f818152600260205260408120546001600160a01b03168061035957604051637e27328960e01b815260048101849052602401610449565b61052f8383836001610e4a565b5f610b06848484610f4e565b949350505050565b610420828260405180602001604052805f815250611019565b600a546001600160a01b031633146108b55760405163118cdaa760e01b8152336004820152602401610449565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610bd757604051630b61174360e31b81526001600160a01b0383166004820152602401610449565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610d6457604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610c85908890889087908790600401611947565b6020604051808303815f875af1925050508015610cbf575060408051601f3d908101601f19168201909252610cbc91810190611983565b60015b610d26573d808015610cec576040519150601f19603f3d011682016040523d82523d5f602084013e610cf1565b606091505b5080515f03610d1e57604051633250574960e11b81526001600160a01b0385166004820152602401610449565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610d6257604051633250574960e11b81526001600160a01b0385166004820152602401610449565b505b5050505050565b60605f610d7783611030565b60010190505f8167ffffffffffffffff811115610d9657610d96611595565b6040519080825280601f01601f191660200182016040528015610dc0576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610dca57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480610e2b57506001600160e01b03198216635b5e139f60e01b145b8061035957506301ffc9a760e01b6001600160e01b0319831614610359565b8080610e5e57506001600160a01b03821615155b15610f1f575f610e6d84610ab5565b90506001600160a01b03831615801590610e995750826001600160a01b0316816001600160a01b031614155b8015610eac5750610eaa8184610a27565b155b15610ed55760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610449565b8115610f1d5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f610f5b858585611107565b90506001600160a01b038116610fb757610fb284600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610fda565b846001600160a01b0316816001600160a01b031614610fda57610fda81856111f9565b6001600160a01b038516610ff657610ff184611276565b610b06565b846001600160a01b0316816001600160a01b031614610b0657610b06858561131d565b611023838361136b565b61052f335f858585610c43565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061106e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061109a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106110b857662386f26fc10000830492506010015b6305f5e10083106110d0576305f5e100830492506008015b61271083106110e457612710830492506004015b606483106110f6576064830492506002015b600a83106103595760010192915050565b5f828152600260205260408120546001600160a01b0390811690831615611133576111338184866113cc565b6001600160a01b0381161561116d5761114e5f855f5f610e4a565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561119b576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f6112038361085f565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314611258575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f906112879060019061199e565b5f83815260096020526040812054600880549394509092849081106112ae576112ae6117a0565b905f5260205f200154905080600883815481106112cd576112cd6117a0565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480611304576113046119b1565b600190038181905f5260205f20015f9055905550505050565b5f60016113298461085f565b611333919061199e565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661139457604051633250574960e11b81525f6004820152602401610449565b5f6113a083835f610afa565b90506001600160a01b0381161561052f576040516339e3563760e11b81525f6004820152602401610449565b6113d7838383611430565b61052f576001600160a01b03831661140557604051637e27328960e01b815260048101829052602401610449565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610449565b5f6001600160a01b03831615801590610b065750826001600160a01b0316846001600160a01b0316148061146957506114698484610a27565b80610b065750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610a8e575f5ffd5b5f602082840312156114b6575f5ffd5b8135610a2081611491565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a2060208301846114c1565b5f60208284031215611511575f5ffd5b5035919050565b80356001600160a01b038116811461152e575f5ffd5b919050565b5f5f60408385031215611544575f5ffd5b61154d83611518565b946020939093013593505050565b5f5f5f6060848603121561156d575f5ffd5b61157684611518565b925061158460208501611518565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156115c3576115c3611595565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156115f2576115f2611595565b604052838152905080828401851015611609575f5ffd5b838360208301375f60208583010152509392505050565b5f60208284031215611630575f5ffd5b813567ffffffffffffffff811115611646575f5ffd5b8201601f81018413611656575f5ffd5b610b06848235602084016115a9565b5f60208284031215611675575f5ffd5b610a2082611518565b8015158114610a8e575f5ffd5b5f5f6040838503121561169c575f5ffd5b6116a583611518565b915060208301356116b58161167e565b809150509250929050565b5f5f5f5f608085870312156116d3575f5ffd5b6116dc85611518565b93506116ea60208601611518565b925060408501359150606085013567ffffffffffffffff81111561170c575f5ffd5b8501601f8101871361171c575f5ffd5b61172b878235602084016115a9565b91505092959194509250565b5f5f60408385031215611748575f5ffd5b61175183611518565b915061175f60208401611518565b90509250929050565b600181811c9082168061177c57607f821691505b60208210810361179a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156117c4575f5ffd5b5051919050565b5f602082840312156117db575f5ffd5b8151610a208161167e565b5f81518060208401855e5f93019283525090919050565b5f610a2082846117e6565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161182d5761182d611808565b5060010190565b601f82111561052f57805f5260205f20601f840160051c810160208510156118595750805b601f840160051c820191505b81811015610d64575f8155600101611865565b815167ffffffffffffffff81111561189257611892611595565b6118a6816118a08454611768565b84611834565b6020601f8211600181146118d8575f83156118c15750848201515b5f19600385901b1c1916600184901b178455610d64565b5f84815260208120601f198516915b8281101561190757878501518255602094850194600190920191016118e7565b508482101561192457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f610b0661194183866117e6565b846117e6565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611979908301846114c1565b9695505050505050565b5f60208284031215611993575f5ffd5b8151610a2081611491565b8181038181111561035957610359611808565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122000b37112433a2f3ff5d205f66178c049d107bf7f505326216c2293992f377b1764736f6c634300081b00330000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061000000000000000000000000007128cbcd31c2251a6ea76fc71fbe3bfe691396", + "nonce": "0x12", + "chainId": "0xaa37dc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2a4319", + "logs": [ + { + "address": "0x8899355c97ce2eed95f12b062478b7b05e9f0e0a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061" + ], + "data": "0x", + "blockHash": "0xaae0c950fbc6a5f687cfd3b2c030f33d7381355c7d3f8a446dbcec1ba73252bf", + "blockNumber": "0x15a0fc1", + "transactionHash": "0xb7740d9749e5c40770ca3f69d1a1975ddf27b40616a6e4e7ab2b202a26641cb3", + "transactionIndex": "0x8", + "logIndex": "0xe", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000002000000000000400000000000000000000001000000000000000000000000001000000000000001000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000020000000000000000000080000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb7740d9749e5c40770ca3f69d1a1975ddf27b40616a6e4e7ab2b202a26641cb3", + "transactionIndex": "0x8", + "blockHash": "0xaae0c950fbc6a5f687cfd3b2c030f33d7381355c7d3f8a446dbcec1ba73252bf", + "blockNumber": "0x15a0fc1", + "gasUsed": "0x18aca4", + "effectiveGasPrice": "0x163b", + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "to": null, + "contractAddress": "0x8899355c97ce2eed95f12b062478b7b05e9f0e0a", + "l1BaseFeeScalar": "0x1db0", + "l1BlobBaseFee": "0x3e0d5", + "l1BlobBaseFeeScalar": "0xd2730", + "l1Fee": "0xab4d894799", + "l1GasPrice": "0x521ec75f", + "l1GasUsed": "0x1121d" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1737161536, + "chain": 11155420, + "commit": "fdf7814" +} \ No newline at end of file diff --git a/broadcast/NamespaceDeployment.s.sol/11155420/run-1737162562.json b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737162562.json new file mode 100644 index 0000000..f70b644 --- /dev/null +++ b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737162562.json @@ -0,0 +1,71 @@ +{ + "transactions": [ + { + "hash": "0x53316b279d6d1afca27d454549d269f4a555b0a87e4422d5239f5fe3a1c74273", + "transactionType": "CREATE", + "contractName": "Namespace", + "contractAddress": "0xaf1381789605b8d2638d5b818bb494caf16c490e", + "function": null, + "arguments": [ + "0x2E79317053399D2b45E32B35aBb1a592723fD061", + "0x007128cBcD31C2251a6Ea76Fc71FBe3bFe691396" + ], + "transaction": { + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "gas": "0x1f7f70", + "value": "0x0", + "input": "0x60806040526001600c55348015610014575f5ffd5b50604051611c62380380611c628339810160408190526100339161015e565b816040518060400160405280600f81526020016e2730b6b2b9b830b1b2902a37b5b2b760891b815250604051806040016040528060028152602001614e5360f01b815250815f90816100859190610227565b5060016100928282610227565b5050506001600160a01b0381166100c257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100cb816100f2565b50600b80546001600160a01b0319166001600160a01b0392909216919091179055506102e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b0381168114610159575f5ffd5b919050565b5f5f6040838503121561016f575f5ffd5b61017883610143565b915061018660208401610143565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101b757607f821691505b6020821081036101d557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022257805f5260205f20601f840160051c810160208510156102005750805b601f840160051c820191505b8181101561021f575f815560010161020c565b50505b505050565b81516001600160401b038111156102405761024061018f565b6102548161024e84546101a3565b846101db565b6020601f821160018114610286575f831561026f5750848201515b5f19600385901b1c1916600184901b17845561021f565b5f84815260208120601f198516915b828110156102b55787850151825560209485019460019092019101610295565b50848210156102d257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b611974806102ee5f395ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c8063695850fb116100bf57806395d89b411161007957806395d89b41146102e8578063a22cb465146102f0578063b88d4fde14610303578063c87b56dd14610316578063e985e9c514610329578063f2fde38b1461033c575f5ffd5b8063695850fb1461028357806370a0823114610296578063715018a6146102a9578063854cff2f146102b15780638da5cb5b146102c457806393e59dc1146102d5575f5ffd5b80632f745c59116101105780632f745c59146101f957806332e899431461020c57806342842e0e146102375780634f6ccce71461024a578063595a0d3f1461025d5780636352211e14610270575f5ffd5b806301ffc9a71461015757806306fdde031461017f578063081812fc14610194578063095ea7b3146101bf57806318160ddd146101d457806323b872dd146101e6575b5f5ffd5b61016a610165366004611436565b61034f565b60405190151581526020015b60405180910390f35b61018761035f565b604051610176919061147f565b6101a76101a2366004611491565b6103ee565b6040516001600160a01b039091168152602001610176565b6101d26101cd3660046114c3565b610415565b005b6008545b604051908152602001610176565b6101d26101f43660046114eb565b610424565b6101d86102073660046114c3565b6104b2565b6101d861021a3660046115b0565b8051602081830181018051600e8252928201919093012091525481565b6101d26102453660046114eb565b610515565b6101d8610258366004611491565b610534565b61018761026b366004611491565b610589565b6101a761027e366004611491565b610620565b6101d26102913660046115b0565b61062a565b6101d86102a43660046115f5565b6107ef565b6101d2610834565b6101d26102bf3660046115f5565b610847565b600a546001600160a01b03166101a7565b600b546101a7906001600160a01b031681565b610187610914565b6101d26102fe36600461161b565b610923565b6101d2610311366004611650565b61092e565b610187610324366004611491565b610946565b61016a6103373660046116c7565b6109b7565b6101d261034a3660046115f5565b6109e4565b5f61035982610a21565b92915050565b60605f805461036d906116f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610399906116f8565b80156103e45780601f106103bb576101008083540402835291602001916103e4565b820191905f5260205f20905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b5f6103f882610a45565b505f828152600460205260409020546001600160a01b0316610359565b610420828233610a7d565b5050565b6001600160a01b03821661045257604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61045e838333610a8a565b9050836001600160a01b0316816001600160a01b0316146104ac576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610449565b50505050565b5f6104bc836107ef565b82106104ed5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610449565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b61052f83838360405180602001604052805f81525061092e565b505050565b5f61053e60085490565b82106105665760405163295f44f760e21b81525f600482015260248101839052604401610449565b6008828154811061057957610579611730565b905f5260205f2001549050919050565b600d6020525f9081526040902080546105a1906116f8565b80601f01602080910402602001604051908101604052809291908181526020018280546105cd906116f8565b80156106185780601f106105ef57610100808354040283529160200191610618565b820191905f5260205f20905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b5f61035982610a45565b5f33600b54604051634c5f1bc360e11b81526001600160a01b0380841660048301529293509116906398be378690602401602060405180830381865afa158015610676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069a9190611744565b6106d45760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610449565b5f8251116107245760405162461bcd60e51b815260206004820152601960248201527f4e616d6573706163652063616e6e6f7420626520656d707479000000000000006044820152606401610449565b600e826040516107349190611776565b9081526020016040518091039020545f146107915760405162461bcd60e51b815260206004820152601a60248201527f4e616d65737061636520697320616c72656164792074616b656e0000000000006044820152606401610449565b600c80545f91826107a183611795565b9190505590506107b18282610a9e565b5f818152600d602052604090206107c884826117f1565b5080600e846040516107da9190611776565b90815260405190819003602001902055505050565b5f6001600160a01b038216610819576040516322718ad960e21b81525f6004820152602401610449565b506001600160a01b03165f9081526003602052604090205490565b61083c610ab7565b6108455f610ae4565b565b61084f610ab7565b6001600160a01b0381166108cb5760405162461bcd60e51b815260206004820152603a60248201527f4e65772077686974656c69737420636f6e74726163742061646472657373206360448201527f616e6e6f7420626520746865207a65726f20616464726573732e0000000000006064820152608401610449565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f29d77446d0fb0dcebabf25ce79ea69ba1382a4525d4acf615a38c89c798aef71905f90a250565b60606001805461036d906116f8565b610420338383610b35565b610939848484610424565b6104ac3385858585610bd3565b606061095182610a45565b505f61096760408051602081019091525f815290565b90505f8151116109855760405180602001604052805f8152506109b0565b8061098f84610cfb565b6040516020016109a09291906118ac565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6109ec610ab7565b6001600160a01b038116610a1557604051631e4fbdf760e01b81525f6004820152602401610449565b610a1e81610ae4565b50565b5f6001600160e01b0319821663780e9d6360e01b1480610359575061035982610d8b565b5f818152600260205260408120546001600160a01b03168061035957604051637e27328960e01b815260048101849052602401610449565b61052f8383836001610dda565b5f610a96848484610ede565b949350505050565b610420828260405180602001604052805f815250610fa9565b600a546001600160a01b031633146108455760405163118cdaa760e01b8152336004820152602401610449565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610b6757604051630b61174360e31b81526001600160a01b0383166004820152602401610449565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610cf457604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610c159088908890879087906004016118c0565b6020604051808303815f875af1925050508015610c4f575060408051601f3d908101601f19168201909252610c4c918101906118fc565b60015b610cb6573d808015610c7c576040519150601f19603f3d011682016040523d82523d5f602084013e610c81565b606091505b5080515f03610cae57604051633250574960e11b81526001600160a01b0385166004820152602401610449565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610cf257604051633250574960e11b81526001600160a01b0385166004820152602401610449565b505b5050505050565b60605f610d0783610fc0565b60010190505f8167ffffffffffffffff811115610d2657610d26611525565b6040519080825280601f01601f191660200182016040528015610d50576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610d5a57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480610dbb57506001600160e01b03198216635b5e139f60e01b145b8061035957506301ffc9a760e01b6001600160e01b0319831614610359565b8080610dee57506001600160a01b03821615155b15610eaf575f610dfd84610a45565b90506001600160a01b03831615801590610e295750826001600160a01b0316816001600160a01b031614155b8015610e3c5750610e3a81846109b7565b155b15610e655760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610449565b8115610ead5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f610eeb858585611097565b90506001600160a01b038116610f4757610f4284600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610f6a565b846001600160a01b0316816001600160a01b031614610f6a57610f6a8185611189565b6001600160a01b038516610f8657610f8184611206565b610a96565b846001600160a01b0316816001600160a01b031614610a9657610a9685856112ad565b610fb383836112fb565b61052f335f858585610bd3565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610ffe5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061102a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061104857662386f26fc10000830492506010015b6305f5e1008310611060576305f5e100830492506008015b612710831061107457612710830492506004015b60648310611086576064830492506002015b600a83106103595760010192915050565b5f828152600260205260408120546001600160a01b03908116908316156110c3576110c381848661135c565b6001600160a01b038116156110fd576110de5f855f5f610dda565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561112b576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f611193836107ef565b5f838152600760209081526040808320546001600160a01b03881684526006909252909120919250908183146111e8575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f9061121790600190611917565b5f838152600960205260408120546008805493945090928490811061123e5761123e611730565b905f5260205f2001549050806008838154811061125d5761125d611730565b5f9182526020808320909101929092558281526009909152604080822084905585825281205560088054806112945761129461192a565b600190038181905f5260205f20015f9055905550505050565b5f60016112b9846107ef565b6112c39190611917565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661132457604051633250574960e11b81525f6004820152602401610449565b5f61133083835f610a8a565b90506001600160a01b0381161561052f576040516339e3563760e11b81525f6004820152602401610449565b6113678383836113c0565b61052f576001600160a01b03831661139557604051637e27328960e01b815260048101829052602401610449565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610449565b5f6001600160a01b03831615801590610a965750826001600160a01b0316846001600160a01b031614806113f957506113f984846109b7565b80610a965750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610a1e575f5ffd5b5f60208284031215611446575f5ffd5b81356109b081611421565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109b06020830184611451565b5f602082840312156114a1575f5ffd5b5035919050565b80356001600160a01b03811681146114be575f5ffd5b919050565b5f5f604083850312156114d4575f5ffd5b6114dd836114a8565b946020939093013593505050565b5f5f5f606084860312156114fd575f5ffd5b611506846114a8565b9250611514602085016114a8565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff84111561155357611553611525565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561158257611582611525565b604052838152905080828401851015611599575f5ffd5b838360208301375f60208583010152509392505050565b5f602082840312156115c0575f5ffd5b813567ffffffffffffffff8111156115d6575f5ffd5b8201601f810184136115e6575f5ffd5b610a9684823560208401611539565b5f60208284031215611605575f5ffd5b6109b0826114a8565b8015158114610a1e575f5ffd5b5f5f6040838503121561162c575f5ffd5b611635836114a8565b915060208301356116458161160e565b809150509250929050565b5f5f5f5f60808587031215611663575f5ffd5b61166c856114a8565b935061167a602086016114a8565b925060408501359150606085013567ffffffffffffffff81111561169c575f5ffd5b8501601f810187136116ac575f5ffd5b6116bb87823560208401611539565b91505092959194509250565b5f5f604083850312156116d8575f5ffd5b6116e1836114a8565b91506116ef602084016114a8565b90509250929050565b600181811c9082168061170c57607f821691505b60208210810361172a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611754575f5ffd5b81516109b08161160e565b5f81518060208401855e5f93019283525090919050565b5f6109b0828461175f565b634e487b7160e01b5f52601160045260245ffd5b5f600182016117a6576117a6611781565b5060010190565b601f82111561052f57805f5260205f20601f840160051c810160208510156117d25750805b601f840160051c820191505b81811015610cf4575f81556001016117de565b815167ffffffffffffffff81111561180b5761180b611525565b61181f8161181984546116f8565b846117ad565b6020601f821160018114611851575f831561183a5750848201515b5f19600385901b1c1916600184901b178455610cf4565b5f84815260208120601f198516915b828110156118805787850151825560209485019460019092019101611860565b508482101561189d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f610a966118ba838661175f565b8461175f565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906118f290830184611451565b9695505050505050565b5f6020828403121561190c575f5ffd5b81516109b081611421565b8181038181111561035957610359611781565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212202b93941936c0b3acf99bd5c0aadd831e6d3c0f4d739e17f9973f7f76cfe227cb64736f6c634300081b00330000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061000000000000000000000000007128cbcd31c2251a6ea76fc71fbe3bfe691396", + "nonce": "0x13", + "chainId": "0xaa37dc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x26e3ff", + "logs": [ + { + "address": "0xaf1381789605b8d2638d5b818bb494caf16c490e", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061" + ], + "data": "0x", + "blockHash": "0xe81ee90f6e2fbcccc38c5fe9666951d654eb31d382c6e6a673adf7ef416bd918", + "blockNumber": "0x15a11b8", + "transactionHash": "0x53316b279d6d1afca27d454549d269f4a555b0a87e4422d5239f5fe3a1c74273", + "transactionIndex": "0x8", + "logIndex": "0xf", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000400000000000000000000001000000000000010000000000001000000000000001000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x53316b279d6d1afca27d454549d269f4a555b0a87e4422d5239f5fe3a1c74273", + "transactionIndex": "0x8", + "blockHash": "0xe81ee90f6e2fbcccc38c5fe9666951d654eb31d382c6e6a673adf7ef416bd918", + "blockNumber": "0x15a11b8", + "gasUsed": "0x183aa5", + "effectiveGasPrice": "0x7c8b0", + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "to": null, + "contractAddress": "0xaf1381789605b8d2638d5b818bb494caf16c490e", + "l1BaseFeeScalar": "0x1db0", + "l1BlobBaseFee": "0x37fce9", + "l1BlobBaseFeeScalar": "0xd2730", + "l1Fee": "0xa151887018", + "l1GasPrice": "0x4d253b04", + "l1GasUsed": "0x10db9" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1737162562, + "chain": 11155420, + "commit": "54f14cb" +} \ No newline at end of file diff --git a/broadcast/NamespaceDeployment.s.sol/11155420/run-1737163324.json b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737163324.json new file mode 100644 index 0000000..2366ee1 --- /dev/null +++ b/broadcast/NamespaceDeployment.s.sol/11155420/run-1737163324.json @@ -0,0 +1,71 @@ +{ + "transactions": [ + { + "hash": "0xd623901a33f87b714dcc2a1fdb0c7f26374459b2622755b785df5c348fdca427", + "transactionType": "CREATE", + "contractName": "Namespace", + "contractAddress": "0x4432611c1d5120481f400056d3d6201438113c92", + "function": null, + "arguments": [ + "0x2E79317053399D2b45E32B35aBb1a592723fD061", + "0x70b4d3249437E2a84EdE557B1952d06A42B344F6" + ], + "transaction": { + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "gas": "0x1f7f7f", + "value": "0x0", + "input": "0x60806040526001600c55348015610014575f5ffd5b50604051611c62380380611c628339810160408190526100339161015e565b816040518060400160405280600f81526020016e2730b6b2b9b830b1b2902a37b5b2b760891b815250604051806040016040528060028152602001614e5360f01b815250815f90816100859190610227565b5060016100928282610227565b5050506001600160a01b0381166100c257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100cb816100f2565b50600b80546001600160a01b0319166001600160a01b0392909216919091179055506102e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b0381168114610159575f5ffd5b919050565b5f5f6040838503121561016f575f5ffd5b61017883610143565b915061018660208401610143565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101b757607f821691505b6020821081036101d557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022257805f5260205f20601f840160051c810160208510156102005750805b601f840160051c820191505b8181101561021f575f815560010161020c565b50505b505050565b81516001600160401b038111156102405761024061018f565b6102548161024e84546101a3565b846101db565b6020601f821160018114610286575f831561026f5750848201515b5f19600385901b1c1916600184901b17845561021f565b5f84815260208120601f198516915b828110156102b55787850151825560209485019460019092019101610295565b50848210156102d257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b611974806102ee5f395ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c8063695850fb116100bf57806395d89b411161007957806395d89b41146102e8578063a22cb465146102f0578063b88d4fde14610303578063c87b56dd14610316578063e985e9c514610329578063f2fde38b1461033c575f5ffd5b8063695850fb1461028357806370a0823114610296578063715018a6146102a9578063854cff2f146102b15780638da5cb5b146102c457806393e59dc1146102d5575f5ffd5b80632f745c59116101105780632f745c59146101f957806332e899431461020c57806342842e0e146102375780634f6ccce71461024a578063595a0d3f1461025d5780636352211e14610270575f5ffd5b806301ffc9a71461015757806306fdde031461017f578063081812fc14610194578063095ea7b3146101bf57806318160ddd146101d457806323b872dd146101e6575b5f5ffd5b61016a610165366004611436565b61034f565b60405190151581526020015b60405180910390f35b61018761035f565b604051610176919061147f565b6101a76101a2366004611491565b6103ee565b6040516001600160a01b039091168152602001610176565b6101d26101cd3660046114c3565b610415565b005b6008545b604051908152602001610176565b6101d26101f43660046114eb565b610424565b6101d86102073660046114c3565b6104b2565b6101d861021a3660046115b0565b8051602081830181018051600e8252928201919093012091525481565b6101d26102453660046114eb565b610515565b6101d8610258366004611491565b610534565b61018761026b366004611491565b610589565b6101a761027e366004611491565b610620565b6101d26102913660046115b0565b61062a565b6101d86102a43660046115f5565b6107ef565b6101d2610834565b6101d26102bf3660046115f5565b610847565b600a546001600160a01b03166101a7565b600b546101a7906001600160a01b031681565b610187610914565b6101d26102fe36600461161b565b610923565b6101d2610311366004611650565b61092e565b610187610324366004611491565b610946565b61016a6103373660046116c7565b6109b7565b6101d261034a3660046115f5565b6109e4565b5f61035982610a21565b92915050565b60605f805461036d906116f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610399906116f8565b80156103e45780601f106103bb576101008083540402835291602001916103e4565b820191905f5260205f20905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b5f6103f882610a45565b505f828152600460205260409020546001600160a01b0316610359565b610420828233610a7d565b5050565b6001600160a01b03821661045257604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61045e838333610a8a565b9050836001600160a01b0316816001600160a01b0316146104ac576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610449565b50505050565b5f6104bc836107ef565b82106104ed5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610449565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b61052f83838360405180602001604052805f81525061092e565b505050565b5f61053e60085490565b82106105665760405163295f44f760e21b81525f600482015260248101839052604401610449565b6008828154811061057957610579611730565b905f5260205f2001549050919050565b600d6020525f9081526040902080546105a1906116f8565b80601f01602080910402602001604051908101604052809291908181526020018280546105cd906116f8565b80156106185780601f106105ef57610100808354040283529160200191610618565b820191905f5260205f20905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b5f61035982610a45565b5f33600b54604051634c5f1bc360e11b81526001600160a01b0380841660048301529293509116906398be378690602401602060405180830381865afa158015610676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069a9190611744565b6106d45760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610449565b5f8251116107245760405162461bcd60e51b815260206004820152601960248201527f4e616d6573706163652063616e6e6f7420626520656d707479000000000000006044820152606401610449565b600e826040516107349190611776565b9081526020016040518091039020545f146107915760405162461bcd60e51b815260206004820152601a60248201527f4e616d65737061636520697320616c72656164792074616b656e0000000000006044820152606401610449565b600c80545f91826107a183611795565b9190505590506107b18282610a9e565b5f818152600d602052604090206107c884826117f1565b5080600e846040516107da9190611776565b90815260405190819003602001902055505050565b5f6001600160a01b038216610819576040516322718ad960e21b81525f6004820152602401610449565b506001600160a01b03165f9081526003602052604090205490565b61083c610ab7565b6108455f610ae4565b565b61084f610ab7565b6001600160a01b0381166108cb5760405162461bcd60e51b815260206004820152603a60248201527f4e65772077686974656c69737420636f6e74726163742061646472657373206360448201527f616e6e6f7420626520746865207a65726f20616464726573732e0000000000006064820152608401610449565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f29d77446d0fb0dcebabf25ce79ea69ba1382a4525d4acf615a38c89c798aef71905f90a250565b60606001805461036d906116f8565b610420338383610b35565b610939848484610424565b6104ac3385858585610bd3565b606061095182610a45565b505f61096760408051602081019091525f815290565b90505f8151116109855760405180602001604052805f8152506109b0565b8061098f84610cfb565b6040516020016109a09291906118ac565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6109ec610ab7565b6001600160a01b038116610a1557604051631e4fbdf760e01b81525f6004820152602401610449565b610a1e81610ae4565b50565b5f6001600160e01b0319821663780e9d6360e01b1480610359575061035982610d8b565b5f818152600260205260408120546001600160a01b03168061035957604051637e27328960e01b815260048101849052602401610449565b61052f8383836001610dda565b5f610a96848484610ede565b949350505050565b610420828260405180602001604052805f815250610fa9565b600a546001600160a01b031633146108455760405163118cdaa760e01b8152336004820152602401610449565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610b6757604051630b61174360e31b81526001600160a01b0383166004820152602401610449565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610cf457604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610c159088908890879087906004016118c0565b6020604051808303815f875af1925050508015610c4f575060408051601f3d908101601f19168201909252610c4c918101906118fc565b60015b610cb6573d808015610c7c576040519150601f19603f3d011682016040523d82523d5f602084013e610c81565b606091505b5080515f03610cae57604051633250574960e11b81526001600160a01b0385166004820152602401610449565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610cf257604051633250574960e11b81526001600160a01b0385166004820152602401610449565b505b5050505050565b60605f610d0783610fc0565b60010190505f8167ffffffffffffffff811115610d2657610d26611525565b6040519080825280601f01601f191660200182016040528015610d50576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610d5a57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480610dbb57506001600160e01b03198216635b5e139f60e01b145b8061035957506301ffc9a760e01b6001600160e01b0319831614610359565b8080610dee57506001600160a01b03821615155b15610eaf575f610dfd84610a45565b90506001600160a01b03831615801590610e295750826001600160a01b0316816001600160a01b031614155b8015610e3c5750610e3a81846109b7565b155b15610e655760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610449565b8115610ead5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f610eeb858585611097565b90506001600160a01b038116610f4757610f4284600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610f6a565b846001600160a01b0316816001600160a01b031614610f6a57610f6a8185611189565b6001600160a01b038516610f8657610f8184611206565b610a96565b846001600160a01b0316816001600160a01b031614610a9657610a9685856112ad565b610fb383836112fb565b61052f335f858585610bd3565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610ffe5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061102a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061104857662386f26fc10000830492506010015b6305f5e1008310611060576305f5e100830492506008015b612710831061107457612710830492506004015b60648310611086576064830492506002015b600a83106103595760010192915050565b5f828152600260205260408120546001600160a01b03908116908316156110c3576110c381848661135c565b6001600160a01b038116156110fd576110de5f855f5f610dda565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561112b576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f611193836107ef565b5f838152600760209081526040808320546001600160a01b03881684526006909252909120919250908183146111e8575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f9061121790600190611917565b5f838152600960205260408120546008805493945090928490811061123e5761123e611730565b905f5260205f2001549050806008838154811061125d5761125d611730565b5f9182526020808320909101929092558281526009909152604080822084905585825281205560088054806112945761129461192a565b600190038181905f5260205f20015f9055905550505050565b5f60016112b9846107ef565b6112c39190611917565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661132457604051633250574960e11b81525f6004820152602401610449565b5f61133083835f610a8a565b90506001600160a01b0381161561052f576040516339e3563760e11b81525f6004820152602401610449565b6113678383836113c0565b61052f576001600160a01b03831661139557604051637e27328960e01b815260048101829052602401610449565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610449565b5f6001600160a01b03831615801590610a965750826001600160a01b0316846001600160a01b031614806113f957506113f984846109b7565b80610a965750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610a1e575f5ffd5b5f60208284031215611446575f5ffd5b81356109b081611421565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109b06020830184611451565b5f602082840312156114a1575f5ffd5b5035919050565b80356001600160a01b03811681146114be575f5ffd5b919050565b5f5f604083850312156114d4575f5ffd5b6114dd836114a8565b946020939093013593505050565b5f5f5f606084860312156114fd575f5ffd5b611506846114a8565b9250611514602085016114a8565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff84111561155357611553611525565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561158257611582611525565b604052838152905080828401851015611599575f5ffd5b838360208301375f60208583010152509392505050565b5f602082840312156115c0575f5ffd5b813567ffffffffffffffff8111156115d6575f5ffd5b8201601f810184136115e6575f5ffd5b610a9684823560208401611539565b5f60208284031215611605575f5ffd5b6109b0826114a8565b8015158114610a1e575f5ffd5b5f5f6040838503121561162c575f5ffd5b611635836114a8565b915060208301356116458161160e565b809150509250929050565b5f5f5f5f60808587031215611663575f5ffd5b61166c856114a8565b935061167a602086016114a8565b925060408501359150606085013567ffffffffffffffff81111561169c575f5ffd5b8501601f810187136116ac575f5ffd5b6116bb87823560208401611539565b91505092959194509250565b5f5f604083850312156116d8575f5ffd5b6116e1836114a8565b91506116ef602084016114a8565b90509250929050565b600181811c9082168061170c57607f821691505b60208210810361172a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611754575f5ffd5b81516109b08161160e565b5f81518060208401855e5f93019283525090919050565b5f6109b0828461175f565b634e487b7160e01b5f52601160045260245ffd5b5f600182016117a6576117a6611781565b5060010190565b601f82111561052f57805f5260205f20601f840160051c810160208510156117d25750805b601f840160051c820191505b81811015610cf4575f81556001016117de565b815167ffffffffffffffff81111561180b5761180b611525565b61181f8161181984546116f8565b846117ad565b6020601f821160018114611851575f831561183a5750848201515b5f19600385901b1c1916600184901b178455610cf4565b5f84815260208120601f198516915b828110156118805787850151825560209485019460019092019101611860565b508482101561189d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f610a966118ba838661175f565b8461175f565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906118f290830184611451565b9695505050505050565b5f6020828403121561190c575f5ffd5b81516109b081611421565b8181038181111561035957610359611781565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212202b93941936c0b3acf99bd5c0aadd831e6d3c0f4d739e17f9973f7f76cfe227cb64736f6c634300081b00330000000000000000000000002e79317053399d2b45e32b35abb1a592723fd06100000000000000000000000070b4d3249437e2a84ede557b1952d06a42b344f6", + "nonce": "0x14", + "chainId": "0xaa37dc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x38e16b", + "logs": [ + { + "address": "0x4432611c1d5120481f400056d3d6201438113c92", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061" + ], + "data": "0x", + "blockHash": "0x8c56cc0d5e4dfb63f9c44d8957fba2fdc69d1b691f438e06f93298b6e5d49bfa", + "blockNumber": "0x15a133f", + "transactionHash": "0xd623901a33f87b714dcc2a1fdb0c7f26374459b2622755b785df5c348fdca427", + "transactionIndex": "0x7", + "logIndex": "0x15", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000400000000000000000000001000000000000000000000000001000000000000001000000000000000000000020000000000000000000800000000000000000000000000020000400000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd623901a33f87b714dcc2a1fdb0c7f26374459b2622755b785df5c348fdca427", + "transactionIndex": "0x7", + "blockHash": "0x8c56cc0d5e4dfb63f9c44d8957fba2fdc69d1b691f438e06f93298b6e5d49bfa", + "blockNumber": "0x15a133f", + "gasUsed": "0x183ab1", + "effectiveGasPrice": "0x163b", + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "to": null, + "contractAddress": "0x4432611c1d5120481f400056d3d6201438113c92", + "l1BaseFeeScalar": "0x1db0", + "l1BlobBaseFee": "0xef5174", + "l1BlobBaseFeeScalar": "0xd2730", + "l1Fee": "0xb47817b0aa", + "l1GasPrice": "0x516d9d4e", + "l1GasUsed": "0x10dab" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1737163324, + "chain": 11155420, + "commit": "b0de43c" +} \ No newline at end of file diff --git a/broadcast/NamespaceDeployment.s.sol/11155420/run-latest.json b/broadcast/NamespaceDeployment.s.sol/11155420/run-latest.json new file mode 100644 index 0000000..784496b --- /dev/null +++ b/broadcast/NamespaceDeployment.s.sol/11155420/run-latest.json @@ -0,0 +1,71 @@ +{ + "transactions": [ + { + "hash": "0x586986b75ac55074b7de900c60dc523c3e1a3d0300379b365d510d5b6a9efec9", + "transactionType": "CREATE", + "contractName": "Namespace", + "contractAddress": "0x359384bffadde2aa48c43579d25729cd852da3ab", + "function": null, + "arguments": [ + "0x2E79317053399D2b45E32B35aBb1a592723fD061", + "0x70b4d3249437E2a84EdE557B1952d06A42B344F6" + ], + "transaction": { + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "gas": "0x1f7f7f", + "value": "0x0", + "input": "0x60806040526001600c55348015610014575f5ffd5b50604051611c62380380611c628339810160408190526100339161015e565b816040518060400160405280600f81526020016e2730b6b2b9b830b1b2902a37b5b2b760891b815250604051806040016040528060028152602001614e5360f01b815250815f90816100859190610227565b5060016100928282610227565b5050506001600160a01b0381166100c257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100cb816100f2565b50600b80546001600160a01b0319166001600160a01b0392909216919091179055506102e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b0381168114610159575f5ffd5b919050565b5f5f6040838503121561016f575f5ffd5b61017883610143565b915061018660208401610143565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101b757607f821691505b6020821081036101d557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022257805f5260205f20601f840160051c810160208510156102005750805b601f840160051c820191505b8181101561021f575f815560010161020c565b50505b505050565b81516001600160401b038111156102405761024061018f565b6102548161024e84546101a3565b846101db565b6020601f821160018114610286575f831561026f5750848201515b5f19600385901b1c1916600184901b17845561021f565b5f84815260208120601f198516915b828110156102b55787850151825560209485019460019092019101610295565b50848210156102d257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b611974806102ee5f395ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c8063695850fb116100bf57806395d89b411161007957806395d89b41146102e8578063a22cb465146102f0578063b88d4fde14610303578063c87b56dd14610316578063e985e9c514610329578063f2fde38b1461033c575f5ffd5b8063695850fb1461028357806370a0823114610296578063715018a6146102a9578063854cff2f146102b15780638da5cb5b146102c457806393e59dc1146102d5575f5ffd5b80632f745c59116101105780632f745c59146101f957806332e899431461020c57806342842e0e146102375780634f6ccce71461024a578063595a0d3f1461025d5780636352211e14610270575f5ffd5b806301ffc9a71461015757806306fdde031461017f578063081812fc14610194578063095ea7b3146101bf57806318160ddd146101d457806323b872dd146101e6575b5f5ffd5b61016a610165366004611436565b61034f565b60405190151581526020015b60405180910390f35b61018761035f565b604051610176919061147f565b6101a76101a2366004611491565b6103ee565b6040516001600160a01b039091168152602001610176565b6101d26101cd3660046114c3565b610415565b005b6008545b604051908152602001610176565b6101d26101f43660046114eb565b610424565b6101d86102073660046114c3565b6104b2565b6101d861021a3660046115b0565b8051602081830181018051600e8252928201919093012091525481565b6101d26102453660046114eb565b610515565b6101d8610258366004611491565b610534565b61018761026b366004611491565b610589565b6101a761027e366004611491565b610620565b6101d26102913660046115b0565b61062a565b6101d86102a43660046115f5565b6107ef565b6101d2610834565b6101d26102bf3660046115f5565b610847565b600a546001600160a01b03166101a7565b600b546101a7906001600160a01b031681565b610187610914565b6101d26102fe36600461161b565b610923565b6101d2610311366004611650565b61092e565b610187610324366004611491565b610946565b61016a6103373660046116c7565b6109b7565b6101d261034a3660046115f5565b6109e4565b5f61035982610a21565b92915050565b60605f805461036d906116f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610399906116f8565b80156103e45780601f106103bb576101008083540402835291602001916103e4565b820191905f5260205f20905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b5f6103f882610a45565b505f828152600460205260409020546001600160a01b0316610359565b610420828233610a7d565b5050565b6001600160a01b03821661045257604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61045e838333610a8a565b9050836001600160a01b0316816001600160a01b0316146104ac576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610449565b50505050565b5f6104bc836107ef565b82106104ed5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610449565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b61052f83838360405180602001604052805f81525061092e565b505050565b5f61053e60085490565b82106105665760405163295f44f760e21b81525f600482015260248101839052604401610449565b6008828154811061057957610579611730565b905f5260205f2001549050919050565b600d6020525f9081526040902080546105a1906116f8565b80601f01602080910402602001604051908101604052809291908181526020018280546105cd906116f8565b80156106185780601f106105ef57610100808354040283529160200191610618565b820191905f5260205f20905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b5f61035982610a45565b5f33600b54604051634c5f1bc360e11b81526001600160a01b0380841660048301529293509116906398be378690602401602060405180830381865afa158015610676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069a9190611744565b6106d45760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610449565b5f8251116107245760405162461bcd60e51b815260206004820152601960248201527f4e616d6573706163652063616e6e6f7420626520656d707479000000000000006044820152606401610449565b600e826040516107349190611776565b9081526020016040518091039020545f146107915760405162461bcd60e51b815260206004820152601a60248201527f4e616d65737061636520697320616c72656164792074616b656e0000000000006044820152606401610449565b600c80545f91826107a183611795565b9190505590506107b18282610a9e565b5f818152600d602052604090206107c884826117f1565b5080600e846040516107da9190611776565b90815260405190819003602001902055505050565b5f6001600160a01b038216610819576040516322718ad960e21b81525f6004820152602401610449565b506001600160a01b03165f9081526003602052604090205490565b61083c610ab7565b6108455f610ae4565b565b61084f610ab7565b6001600160a01b0381166108cb5760405162461bcd60e51b815260206004820152603a60248201527f4e65772077686974656c69737420636f6e74726163742061646472657373206360448201527f616e6e6f7420626520746865207a65726f20616464726573732e0000000000006064820152608401610449565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f29d77446d0fb0dcebabf25ce79ea69ba1382a4525d4acf615a38c89c798aef71905f90a250565b60606001805461036d906116f8565b610420338383610b35565b610939848484610424565b6104ac3385858585610bd3565b606061095182610a45565b505f61096760408051602081019091525f815290565b90505f8151116109855760405180602001604052805f8152506109b0565b8061098f84610cfb565b6040516020016109a09291906118ac565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6109ec610ab7565b6001600160a01b038116610a1557604051631e4fbdf760e01b81525f6004820152602401610449565b610a1e81610ae4565b50565b5f6001600160e01b0319821663780e9d6360e01b1480610359575061035982610d8b565b5f818152600260205260408120546001600160a01b03168061035957604051637e27328960e01b815260048101849052602401610449565b61052f8383836001610dda565b5f610a96848484610ede565b949350505050565b610420828260405180602001604052805f815250610fa9565b600a546001600160a01b031633146108455760405163118cdaa760e01b8152336004820152602401610449565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610b6757604051630b61174360e31b81526001600160a01b0383166004820152602401610449565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610cf457604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610c159088908890879087906004016118c0565b6020604051808303815f875af1925050508015610c4f575060408051601f3d908101601f19168201909252610c4c918101906118fc565b60015b610cb6573d808015610c7c576040519150601f19603f3d011682016040523d82523d5f602084013e610c81565b606091505b5080515f03610cae57604051633250574960e11b81526001600160a01b0385166004820152602401610449565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610cf257604051633250574960e11b81526001600160a01b0385166004820152602401610449565b505b5050505050565b60605f610d0783610fc0565b60010190505f8167ffffffffffffffff811115610d2657610d26611525565b6040519080825280601f01601f191660200182016040528015610d50576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610d5a57509392505050565b5f6001600160e01b031982166380ac58cd60e01b1480610dbb57506001600160e01b03198216635b5e139f60e01b145b8061035957506301ffc9a760e01b6001600160e01b0319831614610359565b8080610dee57506001600160a01b03821615155b15610eaf575f610dfd84610a45565b90506001600160a01b03831615801590610e295750826001600160a01b0316816001600160a01b031614155b8015610e3c5750610e3a81846109b7565b155b15610e655760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610449565b8115610ead5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f610eeb858585611097565b90506001600160a01b038116610f4757610f4284600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610f6a565b846001600160a01b0316816001600160a01b031614610f6a57610f6a8185611189565b6001600160a01b038516610f8657610f8184611206565b610a96565b846001600160a01b0316816001600160a01b031614610a9657610a9685856112ad565b610fb383836112fb565b61052f335f858585610bd3565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610ffe5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061102a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061104857662386f26fc10000830492506010015b6305f5e1008310611060576305f5e100830492506008015b612710831061107457612710830492506004015b60648310611086576064830492506002015b600a83106103595760010192915050565b5f828152600260205260408120546001600160a01b03908116908316156110c3576110c381848661135c565b6001600160a01b038116156110fd576110de5f855f5f610dda565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561112b576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f611193836107ef565b5f838152600760209081526040808320546001600160a01b03881684526006909252909120919250908183146111e8575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f9061121790600190611917565b5f838152600960205260408120546008805493945090928490811061123e5761123e611730565b905f5260205f2001549050806008838154811061125d5761125d611730565b5f9182526020808320909101929092558281526009909152604080822084905585825281205560088054806112945761129461192a565b600190038181905f5260205f20015f9055905550505050565b5f60016112b9846107ef565b6112c39190611917565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661132457604051633250574960e11b81525f6004820152602401610449565b5f61133083835f610a8a565b90506001600160a01b0381161561052f576040516339e3563760e11b81525f6004820152602401610449565b6113678383836113c0565b61052f576001600160a01b03831661139557604051637e27328960e01b815260048101829052602401610449565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610449565b5f6001600160a01b03831615801590610a965750826001600160a01b0316846001600160a01b031614806113f957506113f984846109b7565b80610a965750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610a1e575f5ffd5b5f60208284031215611446575f5ffd5b81356109b081611421565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109b06020830184611451565b5f602082840312156114a1575f5ffd5b5035919050565b80356001600160a01b03811681146114be575f5ffd5b919050565b5f5f604083850312156114d4575f5ffd5b6114dd836114a8565b946020939093013593505050565b5f5f5f606084860312156114fd575f5ffd5b611506846114a8565b9250611514602085016114a8565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff84111561155357611553611525565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561158257611582611525565b604052838152905080828401851015611599575f5ffd5b838360208301375f60208583010152509392505050565b5f602082840312156115c0575f5ffd5b813567ffffffffffffffff8111156115d6575f5ffd5b8201601f810184136115e6575f5ffd5b610a9684823560208401611539565b5f60208284031215611605575f5ffd5b6109b0826114a8565b8015158114610a1e575f5ffd5b5f5f6040838503121561162c575f5ffd5b611635836114a8565b915060208301356116458161160e565b809150509250929050565b5f5f5f5f60808587031215611663575f5ffd5b61166c856114a8565b935061167a602086016114a8565b925060408501359150606085013567ffffffffffffffff81111561169c575f5ffd5b8501601f810187136116ac575f5ffd5b6116bb87823560208401611539565b91505092959194509250565b5f5f604083850312156116d8575f5ffd5b6116e1836114a8565b91506116ef602084016114a8565b90509250929050565b600181811c9082168061170c57607f821691505b60208210810361172a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611754575f5ffd5b81516109b08161160e565b5f81518060208401855e5f93019283525090919050565b5f6109b0828461175f565b634e487b7160e01b5f52601160045260245ffd5b5f600182016117a6576117a6611781565b5060010190565b601f82111561052f57805f5260205f20601f840160051c810160208510156117d25750805b601f840160051c820191505b81811015610cf4575f81556001016117de565b815167ffffffffffffffff81111561180b5761180b611525565b61181f8161181984546116f8565b846117ad565b6020601f821160018114611851575f831561183a5750848201515b5f19600385901b1c1916600184901b178455610cf4565b5f84815260208120601f198516915b828110156118805787850151825560209485019460019092019101611860565b508482101561189d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f610a966118ba838661175f565b8461175f565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906118f290830184611451565b9695505050505050565b5f6020828403121561190c575f5ffd5b81516109b081611421565b8181038181111561035957610359611781565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212202b93941936c0b3acf99bd5c0aadd831e6d3c0f4d739e17f9973f7f76cfe227cb64736f6c634300081b00330000000000000000000000002e79317053399d2b45e32b35abb1a592723fd06100000000000000000000000070b4d3249437e2a84ede557b1952d06a42b344f6", + "nonce": "0x8c", + "chainId": "0xaa37dc" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2505cd", + "logs": [ + { + "address": "0x359384bffadde2aa48c43579d25729cd852da3ab", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000002e79317053399d2b45e32b35abb1a592723fd061" + ], + "data": "0x", + "blockHash": "0x74ece722c37ea58c1397678fd524803ea77fb6cb8197dbdc0dd7b68f67c4b86b", + "blockNumber": "0x160f847", + "transactionHash": "0x586986b75ac55074b7de900c60dc523c3e1a3d0300379b365d510d5b6a9efec9", + "transactionIndex": "0xa", + "logIndex": "0x12", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000400000000000000000000041000000000000000000000000001000000000000001000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000400000000000000000000000", + "type": "0x2", + "transactionHash": "0x586986b75ac55074b7de900c60dc523c3e1a3d0300379b365d510d5b6a9efec9", + "transactionIndex": "0xa", + "blockHash": "0x74ece722c37ea58c1397678fd524803ea77fb6cb8197dbdc0dd7b68f67c4b86b", + "blockNumber": "0x160f847", + "gasUsed": "0x183ab1", + "effectiveGasPrice": "0x270e", + "from": "0x2e79317053399d2b45e32b35abb1a592723fd061", + "to": null, + "contractAddress": "0x359384bffadde2aa48c43579d25729cd852da3ab", + "l1BaseFeeScalar": "0x1db0", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xd2730", + "l1Fee": "0x886221a8175", + "l1GasPrice": "0x42881cd90", + "l1GasUsed": "0x10db9" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1738067024, + "chain": 11155420, + "commit": "1f46d03" +} \ No newline at end of file diff --git a/codegen.js b/codegen.js new file mode 100755 index 0000000..d77299a --- /dev/null +++ b/codegen.js @@ -0,0 +1,82 @@ +#!/usr/bin/env node + + +const fs = require('node:fs').promises; +const ethers = require('ethers'); + +async function codegen(chainId) { + try { + console.log(`Cleaning './deployments/${chainId}'`); + await fs.rm(`./deployments/${chainId}`, {force: true, recursive: true}); + await fs.mkdir(`./deployments/${chainId}`, {recursive: true}); + + const Namespace = {}; + + console.log(`Reading build from './out/Namespace.sol/Namespace.json'`); + Namespace.build = JSON.parse(await fs.readFile('./out/Namespace.sol/Namespace.json', 'utf8')); + + console.log( + `Reading broadcast for Namespace ${chainId} from './broadcast/NamespaceDeployment.s.sol/${chainId}/run-latest.json'` + ); + Namespace.broadcast = JSON.parse( + await fs.readFile(`./broadcast/NamespaceDeployment.s.sol/${chainId}/run-latest.json`, 'utf8') + ); + + console.log(`Reading deployments for Namespace from './deployments_${chainId}.json'`); + Namespace.address = JSON.parse(await fs.readFile(`./deployments_${chainId}.json`, 'utf8')).Namespace; + + console.log(`Copying 'deployments_${chainId}.json' to 'deployments/${chainId}/deployments.json'`); + await fs.copyFile(`./deployments_${chainId}.json`, `deployments/${chainId}/deployments.json`); + + console.log(`Writing 'deployments/${chainId}/Namespace.json'`); + await fs.writeFile(`deployments/${chainId}/Namespace.json`, JSON.stringify(Namespace.build.abi, null, 2), 'utf8'); + + console.log(`Writing 'deployments/${chainId}/Namespace.meta.json'`); + await fs.writeFile( + `deployments/${chainId}/Namespace.meta.json`, + JSON.stringify( + { + blockNumber: Number.parseInt(Namespace.broadcast.receipts[0].blockNumber, 16), + transactionHash: Namespace.broadcast.transactions[0].hash, + deployer: Namespace.broadcast.transactions[0].transaction.from, + }, + null, + 2 + ), + 'utf8' + ); + + console.log(`Writing 'deployments/${chainId}/Namespace.js'`); + await fs.writeFile( + `deployments/${chainId}/Namespace.js`, + [ + `exports.address = "${Namespace.address}";`, + `exports.abi = ${JSON.stringify(new ethers.Interface(Namespace.build.abi).format(), null, 2)};`, + ].join('\n'), + 'utf8' + ); + } catch (error) { + console.error(`Error processing chainId ${chainId}:`, error.message || error); + } +} + +async function main() { + try { + const namespaceDirectories = await fs.readdir('./broadcast/NamespaceDeployment.s.sol/', {withFileTypes: true}); + if (namespaceDirectories.length === 0) { + throw new Error(`No chainId folders found in NamespaceDeployment.s.sol.`); + } + for (const dir of namespaceDirectories) { + if (dir.isDirectory()) { + const chainId = dir.name; + console.log(`Processing NamespaceDeployment for chainId ${chainId}`); + await codegen(chainId); + } + } + + } catch (error) { + console.error(`Unhandled error in main function:`, error.message || error); + } +} + +main(); diff --git a/cov.sh b/cov.sh new file mode 100755 index 0000000..4c28722 --- /dev/null +++ b/cov.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +forge coverage -vvvvv --report lcov --report-file /tmp/lcov.info "$@" +lcov --rc derive_function_end_line=0 --remove /tmp/lcov.info -o /tmp/clean.lcov.info '../node_modules/' 'test/' 'src/lib' +genhtml --rc derive_function_end_line=0 /tmp/clean.lcov.info --output-directory coverage +cp /tmp/clean.lcov.info ./coverage/lcov.info diff --git a/deployments/11155420/Namespace.js b/deployments/11155420/Namespace.js new file mode 100644 index 0000000..cee109a --- /dev/null +++ b/deployments/11155420/Namespace.js @@ -0,0 +1,45 @@ +exports.address = "0x359384BFFAddE2aA48c43579D25729cd852DA3ab"; +exports.abi = [ + "constructor(address initialOwner, address whitelistAddress)", + "function approve(address to, uint256 tokenId)", + "function balanceOf(address owner) view returns (uint256)", + "function getApproved(uint256 tokenId) view returns (address)", + "function isApprovedForAll(address owner, address operator) view returns (bool)", + "function name() view returns (string)", + "function namespaceToTokenId(string) view returns (uint256)", + "function owner() view returns (address)", + "function ownerOf(uint256 tokenId) view returns (address)", + "function renounceOwnership()", + "function safeMint(string nameSpace)", + "function safeTransferFrom(address from, address to, uint256 tokenId)", + "function safeTransferFrom(address from, address to, uint256 tokenId, bytes data)", + "function setApprovalForAll(address operator, bool approved)", + "function setWhitelist(address _newWhitelistAddress)", + "function supportsInterface(bytes4 interfaceId) view returns (bool)", + "function symbol() view returns (string)", + "function tokenByIndex(uint256 index) view returns (uint256)", + "function tokenIdToNamespace(uint256) view returns (string)", + "function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)", + "function tokenURI(uint256 tokenId) view returns (string)", + "function totalSupply() view returns (uint256)", + "function transferFrom(address from, address to, uint256 tokenId)", + "function transferOwnership(address newOwner)", + "function whitelist() view returns (address)", + "event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)", + "event ApprovalForAll(address indexed owner, address indexed operator, bool approved)", + "event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)", + "event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)", + "event WhitelistSet(address indexed newWhitelistAddress)", + "error ERC721EnumerableForbiddenBatchMint()", + "error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)", + "error ERC721InsufficientApproval(address operator, uint256 tokenId)", + "error ERC721InvalidApprover(address approver)", + "error ERC721InvalidOperator(address operator)", + "error ERC721InvalidOwner(address owner)", + "error ERC721InvalidReceiver(address receiver)", + "error ERC721InvalidSender(address sender)", + "error ERC721NonexistentToken(uint256 tokenId)", + "error ERC721OutOfBoundsIndex(address owner, uint256 index)", + "error OwnableInvalidOwner(address owner)", + "error OwnableUnauthorizedAccount(address account)" +]; \ No newline at end of file diff --git a/deployments/11155420/Namespace.json b/deployments/11155420/Namespace.json new file mode 100644 index 0000000..23ea25a --- /dev/null +++ b/deployments/11155420/Namespace.json @@ -0,0 +1,692 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "whitelistAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApproved", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isApprovedForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "namespaceToTokenId", + "inputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ownerOf", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeMint", + "inputs": [ + { + "name": "nameSpace", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setApprovalForAll", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setWhitelist", + "inputs": [ + { + "name": "_newWhitelistAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenByIndex", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenIdToNamespace", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenOfOwnerByIndex", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tokenURI", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "whitelist", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Whitelist" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ApprovalForAll", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "approved", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WhitelistSet", + "inputs": [ + { + "name": "newWhitelistAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ERC721EnumerableForbiddenBatchMint", + "inputs": [] + }, + { + "type": "error", + "name": "ERC721IncorrectOwner", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InsufficientApproval", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidApprover", + "inputs": [ + { + "name": "approver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidReceiver", + "inputs": [ + { + "name": "receiver", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721InvalidSender", + "inputs": [ + { + "name": "sender", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC721NonexistentToken", + "inputs": [ + { + "name": "tokenId", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC721OutOfBoundsIndex", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + } +] \ No newline at end of file diff --git a/deployments/11155420/Namespace.meta.json b/deployments/11155420/Namespace.meta.json new file mode 100644 index 0000000..dde7f57 --- /dev/null +++ b/deployments/11155420/Namespace.meta.json @@ -0,0 +1,5 @@ +{ + "blockNumber": 23132231, + "transactionHash": "0x586986b75ac55074b7de900c60dc523c3e1a3d0300379b365d510d5b6a9efec9", + "deployer": "0x2e79317053399d2b45e32b35abb1a592723fd061" +} \ No newline at end of file diff --git a/deployments/11155420/deployments.json b/deployments/11155420/deployments.json new file mode 100644 index 0000000..6ea46ac --- /dev/null +++ b/deployments/11155420/deployments.json @@ -0,0 +1,3 @@ +{ + "Namespace": "0x359384BFFAddE2aA48c43579D25729cd852DA3ab" +} \ No newline at end of file diff --git a/deployments_11155420.json b/deployments_11155420.json new file mode 100644 index 0000000..6ea46ac --- /dev/null +++ b/deployments_11155420.json @@ -0,0 +1,3 @@ +{ + "Namespace": "0x359384BFFAddE2aA48c43579D25729cd852DA3ab" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 0000000..6601000 --- /dev/null +++ b/foundry.toml @@ -0,0 +1,14 @@ +[profile.default] +src = "src" +out = "out" +libs = ["node_modules"] +allow_paths = ["node_modules"] +fs_permissions = [{ access = "read-write", path = "./" }] + +optimizer = true +optimizer_runs = 200 +compiler.version = "0.8.27+commit.40a35a09" + +[etherscan] +optimism-sepolia = { key = "${ETHERSCAN_API_KEY}" } +mainnet = { key = "${ETHERSCAN_API_KEY}" } \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..7ed89e5 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "namespace", + "packageManager": "yarn@4.6.0", + "scripts": { + "build": "forge build", + "lint": "forge fmt", + "test": "forge test", + "codegen": "node codegen", + "deploy:sepolia": "forge clean && forge script script/NamespaceDeployment.s.sol --fork-url wss://optimism-sepolia-rpc.publicnode.com --broadcast --verify -vv" + }, + "dependencies": { + "@openzeppelin/contracts": "^5.2.0", + "ethers": "^6.13.5", + "forge-std": "github:foundry-rs/forge-std#master" + } +} diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..b0866a6 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,2 @@ +@openzeppelin/=node_modules/@openzeppelin/ +forge-std/=node_modules/forge-std/ diff --git a/script/DeploymentScript.s.sol b/script/DeploymentScript.s.sol new file mode 100644 index 0000000..6fb1a0e --- /dev/null +++ b/script/DeploymentScript.s.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.27; + +import {Script} from "forge-std/src/Script.sol"; +import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; +import {console} from "forge-std/src/console.sol"; +import {stdJson} from "forge-std/src/StdJson.sol"; + +abstract contract DeploymentScript is Script { + using stdJson for string; + + string public DEPLOYMENTS_PATH = string.concat("deployments_", Strings.toString(vm.envUint("CHAIN_ID")), ".json"); + + function run() external { + uint256 deployerPrivateKey_ = vm.envOr("PRIVATE_KEY", uint256(0)); + if (deployerPrivateKey_ == 0) { + vm.startBroadcast(); + } else { + vm.startBroadcast(deployerPrivateKey_); + } + _run(); + + vm.stopBroadcast(); + } + + function _run() internal virtual; + + function _deployedAddress(string memory name, address addr) internal { + _writeDeployedAddress(name, addr); + console.log("Deployed %s at %s", name, Strings.toHexString(uint160(addr), 20)); + } + + function _writeDeployedAddress(string memory name, address addr) internal { + if (vm.isFile(DEPLOYMENTS_PATH)) { + vm.serializeJson("contracts", vm.readFile(DEPLOYMENTS_PATH)); + } + string memory newJson = vm.serializeAddress("contracts", name, addr); + vm.writeJson(newJson, DEPLOYMENTS_PATH); + } + + function _getDeployedAddress(string memory name) internal view returns (address) { + string memory json = vm.readFile(DEPLOYMENTS_PATH); + string memory key = string.concat(".", name); + return json.readAddress(key); + } +} diff --git a/script/NamespaceDeployment.s.sol b/script/NamespaceDeployment.s.sol new file mode 100644 index 0000000..7008bd0 --- /dev/null +++ b/script/NamespaceDeployment.s.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.27; + +import {Namespace} from "../src/Namespace.sol"; +import {DeploymentScript} from "./DeploymentScript.s.sol"; +import {CommonBase} from "forge-std/src/Base.sol"; +import {StdChains} from "forge-std/src/StdChains.sol"; +import {StdCheatsSafe} from "forge-std/src/StdCheats.sol"; +import {StdUtils} from "forge-std/src/StdUtils.sol"; + +contract NamespaceDeployment is DeploymentScript { + Namespace public namespace; + + function _run() internal override { + namespace = new Namespace(vm.addr(vm.envUint("PRIVATE_KEY")), vm.envAddress("WHITELIST_ADDRESS")); + _deployedAddress("Namespace", address(namespace)); + } +} diff --git a/src/Namespace.sol b/src/Namespace.sol new file mode 100644 index 0000000..b5ebef2 --- /dev/null +++ b/src/Namespace.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.27; + +import {Whitelist} from "./Whitelist.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import {ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; + +contract Namespace is ERC721, ERC721Enumerable, Ownable { + Whitelist public whitelist; + + uint256 private _nextTokenId = 1; + + mapping(uint256 => string) public tokenIdToNamespace; + mapping(string => uint256) public namespaceToTokenId; + + event WhitelistSet(address indexed newWhitelistAddress); + + constructor(address initialOwner, address whitelistAddress) ERC721("Namespace Token", "NS") Ownable(initialOwner) { + whitelist = Whitelist(whitelistAddress); + } + + function safeMint(string memory nameSpace) external { + address to = _msgSender(); + require(whitelist.isGranted(to), "Not allowed"); + require(bytes(nameSpace).length > 0, "Namespace cannot be empty"); + require(namespaceToTokenId[nameSpace] == 0, "Namespace is already taken"); + + uint256 tokenId = _nextTokenId++; + _safeMint(to, tokenId); + + tokenIdToNamespace[tokenId] = nameSpace; + namespaceToTokenId[nameSpace] = tokenId; + } + + function setWhitelist(address _newWhitelistAddress) external onlyOwner { + require(_newWhitelistAddress != address(0), "New whitelist contract address cannot be the zero address."); + whitelist = Whitelist(_newWhitelistAddress); + emit WhitelistSet(_newWhitelistAddress); + } + + function _update(address to, uint256 tokenId, address auth) + internal + override(ERC721, ERC721Enumerable) + returns (address) + { + return super._update(to, tokenId, auth); + } + + function _increaseBalance(address account, uint128 value) internal override(ERC721, ERC721Enumerable) { + super._increaseBalance(account, value); + } + + function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { + return super.supportsInterface(interfaceId); + } +} diff --git a/src/Whitelist.sol b/src/Whitelist.sol new file mode 100644 index 0000000..e37330d --- /dev/null +++ b/src/Whitelist.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; + +contract Whitelist is AccessControl { + bytes32 public constant PENDING = "pending"; + bytes32 public constant GRANTED = "granted"; + + constructor() { + _grantRole(DEFAULT_ADMIN_ROLE, _msgSender()); + } + + function transferOwnership(address newOwner) public onlyRole(DEFAULT_ADMIN_ROLE) { + require(newOwner != address(0), "New owner is the zero address"); + _grantRole(DEFAULT_ADMIN_ROLE, newOwner); + _revokeRole(DEFAULT_ADMIN_ROLE, _msgSender()); + } + + function submitApplication() public { + _grantRole(PENDING, _msgSender()); + } + + function withdrawApplication() public { + renounceRole(PENDING, _msgSender()); + } + + function approveApplication(address user) public onlyRole(DEFAULT_ADMIN_ROLE) { + _grantRole(GRANTED, user); + _revokeRole(PENDING, user); + } + + function rejectApplication(address user) public onlyRole(DEFAULT_ADMIN_ROLE) { + _revokeRole(GRANTED, user); + } + + function isGranted(address user) public view returns (bool) { + return hasRole(GRANTED, user); + } + + function isPending(address user) public view returns (bool) { + return hasRole(PENDING, user); + } + + function isAdmin(address user) public view returns (bool) { + return hasRole(DEFAULT_ADMIN_ROLE, user); + } +} diff --git a/test/Namespace.t.sol b/test/Namespace.t.sol new file mode 100644 index 0000000..bb93a57 --- /dev/null +++ b/test/Namespace.t.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import {Namespace} from "../src/Namespace.sol"; +import {Whitelist} from "../src/Whitelist.sol"; +import {CommonBase} from "forge-std/src/Base.sol"; +import {StdAssertions} from "forge-std/src/StdAssertions.sol"; +import {StdChains} from "forge-std/src/StdChains.sol"; +import {StdCheats, StdCheatsSafe} from "forge-std/src/StdCheats.sol"; +import {StdUtils} from "forge-std/src/StdUtils.sol"; +import {Test} from "forge-std/src/Test.sol"; + +contract NamespaceTest is Test { + Namespace public namespace; + Whitelist public whitelist; + + address public owner; + address public user; + address public admin; + + function setUp() public { + owner = vm.addr(1); + user = vm.addr(2); + admin = vm.addr(3); + + vm.prank(owner); + whitelist = new Whitelist(); + + vm.prank(owner); + namespace = new Namespace(owner, address(whitelist)); + } + + function testSafeMintWithGrantedRole() public { + vm.prank(owner); + whitelist.approveApplication(user); + + vm.prank(user); + namespace.safeMint("exampleNamespace"); + + assertEq(namespace.namespaceToTokenId("exampleNamespace"), 1); + assertEq(namespace.tokenIdToNamespace(1), "exampleNamespace"); + assertEq(namespace.ownerOf(1), user); + } + + function testSafeMintWithoutGrantedRole() public { + vm.expectRevert("Not allowed"); + vm.prank(user); + namespace.safeMint("exampleNamespace"); + } + + function testOwnerCanSetNewWhitelist() public { + address newWhitelist = vm.addr(4); + + vm.prank(owner); + namespace.setWhitelist(newWhitelist); + + assertEq(address(namespace.whitelist()), newWhitelist); + } + + function testSetWhitelistByNonOwner() public { + address newWhitelist = vm.addr(4); + + vm.expectRevert(); + vm.prank(user); + namespace.setWhitelist(newWhitelist); + } + + function testSetWhitelistToZeroAddress() public { + vm.expectRevert("New whitelist contract address cannot be the zero address."); + vm.prank(owner); + namespace.setWhitelist(address(0)); + } + + function testMintDuplicateNamespace() public { + vm.prank(owner); + whitelist.approveApplication(user); + + vm.prank(user); + namespace.safeMint("duplicateNamespace"); + + vm.expectRevert("Namespace is already taken"); + vm.prank(user); + namespace.safeMint("duplicateNamespace"); + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..64a19b3 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,113 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: 10c0/fdd647604e8fac6204921888aaf5a6bc65eabf0d2921bc5f93b64d01f4bc33ead167c1445f7de05468d05cd92ac31b74c68d2be840c62b79d73693308f885c06 + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": "npm:1.3.2" + checksum: 10c0/0bac7d1bbfb3c2286910b02598addd33243cb97c3f36f987ecc927a4be8d7d88e0fcb12b0f0ef8a044e7307d1844dd5c49bb724bfa0a79c8ec50ba60768c97f6 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: 10c0/2482cce3bce6a596626f94ca296e21378e7a5d4c09597cbc46e65ffacc3d64c8df73111f2265444e36a3168208628258bbbaccba2ef24f65f58b2417638a20e7 + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:^5.2.0": + version: 5.2.0 + resolution: "@openzeppelin/contracts@npm:5.2.0" + checksum: 10c0/6e2d8c6daaeb8e111d49a82c30997a6c5d4e512338b55500db7fd4340f29c1cbf35f9dcfa0dbc672e417bc84e99f5441a105cb585cd4680ad70cbcf9a24094fc + languageName: node + linkType: hard + +"@types/node@npm:22.7.5": + version: 22.7.5 + resolution: "@types/node@npm:22.7.5" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10c0/cf11f74f1a26053ec58066616e3a8685b6bcd7259bc569738b8f752009f9f0f7f85a1b2d24908e5b0f752482d1e8b6babdf1fbb25758711ec7bb9500bfcd6e60 + languageName: node + linkType: hard + +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: 10c0/444f4eefa1e602cbc4f2a3c644bc990f93fd982b148425fee17634da510586fc09da940dcf8ace1b2d001453c07ff042e55f7a0482b3cc9372bf1ef75479090c + languageName: node + linkType: hard + +"ethers@npm:^6.13.5": + version: 6.13.5 + resolution: "ethers@npm:6.13.5" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.1" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@types/node": "npm:22.7.5" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.7.0" + ws: "npm:8.17.1" + checksum: 10c0/64bc7b8907de199392b8a88c15c9a085892919cff7efa2e5326abc7fe5c426001726c51d91e10c74e5fc5e2547188297ce4127f6e52ea42a97ade0b2ae474677 + languageName: node + linkType: hard + +"forge-std@github:foundry-rs/forge-std#master": + version: 1.9.5 + resolution: "forge-std@https://github.com/foundry-rs/forge-std.git#commit=726a6ee5fc8427a0013d6f624e486c9130c0e336" + checksum: 10c0/5682379c35570821b0c1936c84273f0c2c8e848123a559f8f1bf09b586af31fd445dd2a4950330fcb1131f03b64084fcde1c4aded19b2d1c74d99533e8272411 + languageName: node + linkType: hard + +"namespace@workspace:.": + version: 0.0.0-use.local + resolution: "namespace@workspace:." + dependencies: + "@openzeppelin/contracts": "npm:^5.2.0" + ethers: "npm:^6.13.5" + forge-std: "github:foundry-rs/forge-std#master" + languageName: unknown + linkType: soft + +"tslib@npm:2.7.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 + languageName: node + linkType: hard + +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + +"ws@npm:8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe + languageName: node + linkType: hard