From 47f1a5d2ace0f88e5f88856d089e9a3c45b665e1 Mon Sep 17 00:00:00 2001 From: Benjamin Smith Date: Wed, 14 May 2025 13:43:52 +0200 Subject: [PATCH 1/3] Token Faucet --- .../11155111/run-1747222353.json | 63 +++++++++++++++++++ .../11155111/run-1747222552.json | 63 +++++++++++++++++++ .../11155111/run-latest.json | 63 +++++++++++++++++++ foundry.toml | 1 + script/DeployFaucet.s.sol | 19 ++++++ src/Faucet.sol | 60 ++++++++++++++++++ 6 files changed, 269 insertions(+) create mode 100644 broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json create mode 100644 broadcast/DeployFaucet.s.sol/11155111/run-1747222552.json create mode 100644 broadcast/DeployFaucet.s.sol/11155111/run-latest.json create mode 100644 script/DeployFaucet.s.sol create mode 100644 src/Faucet.sol diff --git a/broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json b/broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json new file mode 100644 index 0000000..8fd791d --- /dev/null +++ b/broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0xd57512c86b6dff900fb8b6e9e93e1f2b8405b1f4e2af99abd801a03af67d518b", + "transactionType": "CREATE", + "contractName": "Faucet", + "contractAddress": "0x214f1dfc282c78ed1d05ef5509569fc0fda0ff1b", + "function": null, + "arguments": null, + "transaction": { + "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", + "gas": "0xe2689", + "value": "0x0", + "input": "0x608060405266038d7ea4c68000600155670de0b6b3a764000060025561070860035534801561002c575f5ffd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009591906101b3565b60405180910390fd5b6100ad816100b360201b60201c565b506101cc565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61019d82610174565b9050919050565b6101ad81610193565b82525050565b5f6020820190506101c65f8301846101a4565b92915050565b610a34806101d95f395ff3fe608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c8063941b91c01161006f578063941b91c014610154578063b5b9cc6614610170578063ccca123b1461018c578063d20cd56a146101aa578063df351aaf146101c6578063f2fde38b146101e2576100b2565b806302e60c76146100b65780632d291cad146100d45780636ff18ab914610104578063715018a61461012257806387167b5a1461012c5780638da5cb5b14610136575b5f5ffd5b6100be6101fe565b6040516100cb9190610791565b60405180910390f35b6100ee60048036038101906100e99190610808565b610204565b6040516100fb919061084d565b60405180910390f35b61010c6102a8565b6040516101199190610791565b60405180910390f35b61012a6102ae565b005b6101346102c1565b005b61013e6103a5565b60405161014b9190610875565b60405180910390f35b61016e600480360381019061016991906108b8565b6103cc565b005b61018a60048036038101906101859190610808565b6103de565b005b61019461057c565b6040516101a19190610791565b60405180910390f35b6101c460048036038101906101bf91906108b8565b610582565b005b6101e060048036038101906101db91906108b8565b610594565b005b6101fc60048036038101906101f79190610808565b6105a6565b005b60015481565b5f5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361025257600190506102a3565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054421061029f57600190506102a3565b5f90505b919050565b60025481565b6102b661062a565b6102bf5f6106b1565b565b6102ca33610204565b6102d2575f5ffd5b60015447101561030e576040517fe301d63d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc60015490811502906040515f60405180830381858888f19350505050158015610353573d5f5f3e3d5ffd5b50600354426103629190610910565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103d461062a565b8060028190555050565b6103e733610204565b6103ef575f5ffd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161042d9190610875565b602060405180830381865afa158015610448573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046c9190610957565b90506002548110156104aa576040517f3bcd51e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336002546040518363ffffffff1660e01b81526004016104e7929190610982565b6020604051808303815f875af1158015610503573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052791906109d3565b50600354426105369190610910565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b60035481565b61058a61062a565b8060018190555050565b61059c61062a565b8060038190555050565b6105ae61062a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361061e575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106159190610875565b60405180910390fd5b610627816106b1565b50565b610632610772565b73ffffffffffffffffffffffffffffffffffffffff166106506103a5565b73ffffffffffffffffffffffffffffffffffffffff16146106af57610673610772565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016106a69190610875565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f819050919050565b61078b81610779565b82525050565b5f6020820190506107a45f830184610782565b92915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107d7826107ae565b9050919050565b6107e7816107cd565b81146107f1575f5ffd5b50565b5f81359050610802816107de565b92915050565b5f6020828403121561081d5761081c6107aa565b5b5f61082a848285016107f4565b91505092915050565b5f8115159050919050565b61084781610833565b82525050565b5f6020820190506108605f83018461083e565b92915050565b61086f816107cd565b82525050565b5f6020820190506108885f830184610866565b92915050565b61089781610779565b81146108a1575f5ffd5b50565b5f813590506108b28161088e565b92915050565b5f602082840312156108cd576108cc6107aa565b5b5f6108da848285016108a4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61091a82610779565b915061092583610779565b925082820190508082111561093d5761093c6108e3565b5b92915050565b5f815190506109518161088e565b92915050565b5f6020828403121561096c5761096b6107aa565b5b5f61097984828501610943565b91505092915050565b5f6040820190506109955f830185610866565b6109a26020830184610782565b9392505050565b6109b281610833565b81146109bc575f5ffd5b50565b5f815190506109cd816109a9565b92915050565b5f602082840312156109e8576109e76107aa565b5b5f6109f5848285016109bf565b9150509291505056fea26469706673582212206d8a80b60b569f9777abe6eda4d6e22ea335685e1c217669657b85f024f9ffb264736f6c634300081c0033", + "nonce": "0x3f", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1b28e19", + "logs": [ + { + "address": "0x214f1dfc282c78ed1d05ef5509569fc0fda0ff1b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ae5a4884d813f334e1b80b26402ec78fadaee7eb" + ], + "data": "0x", + "blockHash": "0x699a5bac2535c9f69962cfcd0ec30f83b8b474dcf5b8d22eaf4f0b544206edd1", + "blockNumber": "0x7f0683", + "blockTimestamp": "0x68247f30", + "transactionHash": "0xd57512c86b6dff900fb8b6e9e93e1f2b8405b1f4e2af99abd801a03af67d518b", + "transactionIndex": "0x178", + "logIndex": "0x15a", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000010000000000000000000000000000020000000000000000000800000000000000008000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000008000000400000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xd57512c86b6dff900fb8b6e9e93e1f2b8405b1f4e2af99abd801a03af67d518b", + "transactionIndex": "0x178", + "blockHash": "0x699a5bac2535c9f69962cfcd0ec30f83b8b474dcf5b8d22eaf4f0b544206edd1", + "blockNumber": "0x7f0683", + "gasUsed": "0xae291", + "effectiveGasPrice": "0x859f3163", + "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", + "to": null, + "contractAddress": "0x214f1dfc282c78ed1d05ef5509569fc0fda0ff1b" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1747222353, + "chain": 11155111, + "commit": "85b4305" +} \ No newline at end of file diff --git a/broadcast/DeployFaucet.s.sol/11155111/run-1747222552.json b/broadcast/DeployFaucet.s.sol/11155111/run-1747222552.json new file mode 100644 index 0000000..1c22f66 --- /dev/null +++ b/broadcast/DeployFaucet.s.sol/11155111/run-1747222552.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x969356ecaed58af76e1d637eb8ba13a679c3904d2bd21a8905d3e8ba395ab13e", + "transactionType": "CREATE", + "contractName": "Faucet", + "contractAddress": "0x5239fcdea2c628b5c7bcd8dd42da4db3f752b246", + "function": null, + "arguments": null, + "transaction": { + "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", + "gas": "0xec377", + "value": "0x0", + "input": "0x608060405266038d7ea4c68000600155670de0b6b3a764000060025561070860035534801561002c575f5ffd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009591906101b3565b60405180910390fd5b6100ad816100b360201b60201c565b506101cc565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61019d82610174565b9050919050565b6101ad81610193565b82525050565b5f6020820190506101c65f8301846101a4565b92915050565b610ac3806101d95f395ff3fe6080604052600436106100aa575f3560e01c8063941b91c011610063578063941b91c01461019b578063b5b9cc66146101c3578063ccca123b146101eb578063d20cd56a14610215578063df351aaf1461023d578063f2fde38b14610265576100b1565b806302e60c76146100b55780632d291cad146100df5780636ff18ab91461011b578063715018a61461014557806387167b5a1461015b5780638da5cb5b14610171576100b1565b366100b157005b5f5ffd5b3480156100c0575f5ffd5b506100c961028d565b6040516100d69190610820565b60405180910390f35b3480156100ea575f5ffd5b5061010560048036038101906101009190610897565b610293565b60405161011291906108dc565b60405180910390f35b348015610126575f5ffd5b5061012f610337565b60405161013c9190610820565b60405180910390f35b348015610150575f5ffd5b5061015961033d565b005b348015610166575f5ffd5b5061016f610350565b005b34801561017c575f5ffd5b50610185610434565b6040516101929190610904565b60405180910390f35b3480156101a6575f5ffd5b506101c160048036038101906101bc9190610947565b61045b565b005b3480156101ce575f5ffd5b506101e960048036038101906101e49190610897565b61046d565b005b3480156101f6575f5ffd5b506101ff61060b565b60405161020c9190610820565b60405180910390f35b348015610220575f5ffd5b5061023b60048036038101906102369190610947565b610611565b005b348015610248575f5ffd5b50610263600480360381019061025e9190610947565b610623565b005b348015610270575f5ffd5b5061028b60048036038101906102869190610897565b610635565b005b60015481565b5f5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036102e15760019050610332565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054421061032e5760019050610332565b5f90505b919050565b60025481565b6103456106b9565b61034e5f610740565b565b61035933610293565b610361575f5ffd5b60015447101561039d576040517fe301d63d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc60015490811502906040515f60405180830381858888f193505050501580156103e2573d5f5f3e3d5ffd5b50600354426103f1919061099f565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104636106b9565b8060028190555050565b61047633610293565b61047e575f5ffd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104bc9190610904565b602060405180830381865afa1580156104d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb91906109e6565b9050600254811015610539576040517f3bcd51e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336002546040518363ffffffff1660e01b8152600401610576929190610a11565b6020604051808303815f875af1158015610592573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b69190610a62565b50600354426105c5919061099f565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b60035481565b6106196106b9565b8060018190555050565b61062b6106b9565b8060038190555050565b61063d6106b9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ad575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106a49190610904565b60405180910390fd5b6106b681610740565b50565b6106c1610801565b73ffffffffffffffffffffffffffffffffffffffff166106df610434565b73ffffffffffffffffffffffffffffffffffffffff161461073e57610702610801565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016107359190610904565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f819050919050565b61081a81610808565b82525050565b5f6020820190506108335f830184610811565b92915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108668261083d565b9050919050565b6108768161085c565b8114610880575f5ffd5b50565b5f813590506108918161086d565b92915050565b5f602082840312156108ac576108ab610839565b5b5f6108b984828501610883565b91505092915050565b5f8115159050919050565b6108d6816108c2565b82525050565b5f6020820190506108ef5f8301846108cd565b92915050565b6108fe8161085c565b82525050565b5f6020820190506109175f8301846108f5565b92915050565b61092681610808565b8114610930575f5ffd5b50565b5f813590506109418161091d565b92915050565b5f6020828403121561095c5761095b610839565b5b5f61096984828501610933565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6109a982610808565b91506109b483610808565b92508282019050808211156109cc576109cb610972565b5b92915050565b5f815190506109e08161091d565b92915050565b5f602082840312156109fb576109fa610839565b5b5f610a08848285016109d2565b91505092915050565b5f604082019050610a245f8301856108f5565b610a316020830184610811565b9392505050565b610a41816108c2565b8114610a4b575f5ffd5b50565b5f81519050610a5c81610a38565b92915050565b5f60208284031215610a7757610a76610839565b5b5f610a8484828501610a4e565b9150509291505056fea2646970667358221220c161b9c5f528ed05d8177612dfd310cd0514ed7f1db875e55b54df1988f31d2764736f6c634300081c0033", + "nonce": "0x40", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2dab198", + "logs": [ + { + "address": "0x5239fcdea2c628b5c7bcd8dd42da4db3f752b246", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ae5a4884d813f334e1b80b26402ec78fadaee7eb" + ], + "data": "0x", + "blockHash": "0xc8a594619aef0ee93b69bcf9eef6538dd3fccd20401b90386ecd4cefa5365d7f", + "blockNumber": "0x7f0690", + "blockTimestamp": "0x68247ffc", + "transactionHash": "0x969356ecaed58af76e1d637eb8ba13a679c3904d2bd21a8905d3e8ba395ab13e", + "transactionIndex": "0x13e", + "logIndex": "0x30e", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000804000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000000000000000000000000000000000020000000000000000000800000000000002008000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x969356ecaed58af76e1d637eb8ba13a679c3904d2bd21a8905d3e8ba395ab13e", + "transactionIndex": "0x13e", + "blockHash": "0xc8a594619aef0ee93b69bcf9eef6538dd3fccd20401b90386ecd4cefa5365d7f", + "blockNumber": "0x7f0690", + "gasUsed": "0xb5b48", + "effectiveGasPrice": "0x8cbc3823", + "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", + "to": null, + "contractAddress": "0x5239fcdea2c628b5c7bcd8dd42da4db3f752b246" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1747222552, + "chain": 11155111, + "commit": "85b4305" +} \ No newline at end of file diff --git a/broadcast/DeployFaucet.s.sol/11155111/run-latest.json b/broadcast/DeployFaucet.s.sol/11155111/run-latest.json new file mode 100644 index 0000000..1c22f66 --- /dev/null +++ b/broadcast/DeployFaucet.s.sol/11155111/run-latest.json @@ -0,0 +1,63 @@ +{ + "transactions": [ + { + "hash": "0x969356ecaed58af76e1d637eb8ba13a679c3904d2bd21a8905d3e8ba395ab13e", + "transactionType": "CREATE", + "contractName": "Faucet", + "contractAddress": "0x5239fcdea2c628b5c7bcd8dd42da4db3f752b246", + "function": null, + "arguments": null, + "transaction": { + "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", + "gas": "0xec377", + "value": "0x0", + "input": "0x608060405266038d7ea4c68000600155670de0b6b3a764000060025561070860035534801561002c575f5ffd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009591906101b3565b60405180910390fd5b6100ad816100b360201b60201c565b506101cc565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61019d82610174565b9050919050565b6101ad81610193565b82525050565b5f6020820190506101c65f8301846101a4565b92915050565b610ac3806101d95f395ff3fe6080604052600436106100aa575f3560e01c8063941b91c011610063578063941b91c01461019b578063b5b9cc66146101c3578063ccca123b146101eb578063d20cd56a14610215578063df351aaf1461023d578063f2fde38b14610265576100b1565b806302e60c76146100b55780632d291cad146100df5780636ff18ab91461011b578063715018a61461014557806387167b5a1461015b5780638da5cb5b14610171576100b1565b366100b157005b5f5ffd5b3480156100c0575f5ffd5b506100c961028d565b6040516100d69190610820565b60405180910390f35b3480156100ea575f5ffd5b5061010560048036038101906101009190610897565b610293565b60405161011291906108dc565b60405180910390f35b348015610126575f5ffd5b5061012f610337565b60405161013c9190610820565b60405180910390f35b348015610150575f5ffd5b5061015961033d565b005b348015610166575f5ffd5b5061016f610350565b005b34801561017c575f5ffd5b50610185610434565b6040516101929190610904565b60405180910390f35b3480156101a6575f5ffd5b506101c160048036038101906101bc9190610947565b61045b565b005b3480156101ce575f5ffd5b506101e960048036038101906101e49190610897565b61046d565b005b3480156101f6575f5ffd5b506101ff61060b565b60405161020c9190610820565b60405180910390f35b348015610220575f5ffd5b5061023b60048036038101906102369190610947565b610611565b005b348015610248575f5ffd5b50610263600480360381019061025e9190610947565b610623565b005b348015610270575f5ffd5b5061028b60048036038101906102869190610897565b610635565b005b60015481565b5f5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036102e15760019050610332565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054421061032e5760019050610332565b5f90505b919050565b60025481565b6103456106b9565b61034e5f610740565b565b61035933610293565b610361575f5ffd5b60015447101561039d576040517fe301d63d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc60015490811502906040515f60405180830381858888f193505050501580156103e2573d5f5f3e3d5ffd5b50600354426103f1919061099f565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104636106b9565b8060028190555050565b61047633610293565b61047e575f5ffd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104bc9190610904565b602060405180830381865afa1580156104d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fb91906109e6565b9050600254811015610539576040517f3bcd51e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336002546040518363ffffffff1660e01b8152600401610576929190610a11565b6020604051808303815f875af1158015610592573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b69190610a62565b50600354426105c5919061099f565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b60035481565b6106196106b9565b8060018190555050565b61062b6106b9565b8060038190555050565b61063d6106b9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ad575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106a49190610904565b60405180910390fd5b6106b681610740565b50565b6106c1610801565b73ffffffffffffffffffffffffffffffffffffffff166106df610434565b73ffffffffffffffffffffffffffffffffffffffff161461073e57610702610801565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016107359190610904565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f819050919050565b61081a81610808565b82525050565b5f6020820190506108335f830184610811565b92915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108668261083d565b9050919050565b6108768161085c565b8114610880575f5ffd5b50565b5f813590506108918161086d565b92915050565b5f602082840312156108ac576108ab610839565b5b5f6108b984828501610883565b91505092915050565b5f8115159050919050565b6108d6816108c2565b82525050565b5f6020820190506108ef5f8301846108cd565b92915050565b6108fe8161085c565b82525050565b5f6020820190506109175f8301846108f5565b92915050565b61092681610808565b8114610930575f5ffd5b50565b5f813590506109418161091d565b92915050565b5f6020828403121561095c5761095b610839565b5b5f61096984828501610933565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6109a982610808565b91506109b483610808565b92508282019050808211156109cc576109cb610972565b5b92915050565b5f815190506109e08161091d565b92915050565b5f602082840312156109fb576109fa610839565b5b5f610a08848285016109d2565b91505092915050565b5f604082019050610a245f8301856108f5565b610a316020830184610811565b9392505050565b610a41816108c2565b8114610a4b575f5ffd5b50565b5f81519050610a5c81610a38565b92915050565b5f60208284031215610a7757610a76610839565b5b5f610a8484828501610a4e565b9150509291505056fea2646970667358221220c161b9c5f528ed05d8177612dfd310cd0514ed7f1db875e55b54df1988f31d2764736f6c634300081c0033", + "nonce": "0x40", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2dab198", + "logs": [ + { + "address": "0x5239fcdea2c628b5c7bcd8dd42da4db3f752b246", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ae5a4884d813f334e1b80b26402ec78fadaee7eb" + ], + "data": "0x", + "blockHash": "0xc8a594619aef0ee93b69bcf9eef6538dd3fccd20401b90386ecd4cefa5365d7f", + "blockNumber": "0x7f0690", + "blockTimestamp": "0x68247ffc", + "transactionHash": "0x969356ecaed58af76e1d637eb8ba13a679c3904d2bd21a8905d3e8ba395ab13e", + "transactionIndex": "0x13e", + "logIndex": "0x30e", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000804000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000000000000000000000000000000000020000000000000000000800000000000002008000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x969356ecaed58af76e1d637eb8ba13a679c3904d2bd21a8905d3e8ba395ab13e", + "transactionIndex": "0x13e", + "blockHash": "0xc8a594619aef0ee93b69bcf9eef6538dd3fccd20401b90386ecd4cefa5365d7f", + "blockNumber": "0x7f0690", + "gasUsed": "0xb5b48", + "effectiveGasPrice": "0x8cbc3823", + "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", + "to": null, + "contractAddress": "0x5239fcdea2c628b5c7bcd8dd42da4db3f752b246" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1747222552, + "chain": 11155111, + "commit": "85b4305" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index a51e25b..86bac16 100644 --- a/foundry.toml +++ b/foundry.toml @@ -3,5 +3,6 @@ src = "src" out = "out" libs = ["lib"] evm_version = "prague" +solc_version = "0.8.28" # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/script/DeployFaucet.s.sol b/script/DeployFaucet.s.sol new file mode 100644 index 0000000..a3d01a4 --- /dev/null +++ b/script/DeployFaucet.s.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import "forge-std/Script.sol"; +import "forge-std/Vm.sol"; +import "src/Faucet.sol"; + +contract DeployFaucet is Script { + Faucet public faucet; + address public tokenAddress = 0x0000000000000000000000000000000000000000; + + function run() external { + uint256 deployerPk = vm.envUint("DEPLOYER_KEY"); + + vm.startBroadcast(deployerPk); + faucet = new Faucet(); + vm.stopBroadcast(); + } +} diff --git a/src/Faucet.sol b/src/Faucet.sol new file mode 100644 index 0000000..ac7f7bd --- /dev/null +++ b/src/Faucet.sol @@ -0,0 +1,60 @@ +pragma solidity ^0.8.28; + +import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; + +contract Faucet is Ownable { + uint256 public ethDripAmount = 0.001 ether; + uint256 public tokenDripAmount = 1 ether; + uint256 public waitTime = 30 minutes; + + error TokenInsufficientBalance(); + error EthInsufficientBalance(); + + mapping(address => uint256) lastAccessTime; + + constructor() Ownable(msg.sender) {} + + function dripToken(address tokenAddress) public { + require(allowedToWithdraw(msg.sender)); + IERC20 token = IERC20(tokenAddress); + uint256 tokenBalance = token.balanceOf(address(this)); + if (tokenBalance < tokenDripAmount) { + revert TokenInsufficientBalance(); + } + token.transfer(msg.sender, tokenDripAmount); + lastAccessTime[msg.sender] = block.timestamp + waitTime; + } + + function dripEth() public { + require(allowedToWithdraw(msg.sender)); + if (address(this).balance < ethDripAmount) { + revert EthInsufficientBalance(); + } + payable(msg.sender).transfer(ethDripAmount); + lastAccessTime[msg.sender] = block.timestamp + waitTime; + } + + function allowedToWithdraw(address _address) public view returns (bool) { + if (lastAccessTime[_address] == 0) { + return true; + } else if (block.timestamp >= lastAccessTime[_address]) { + return true; + } + return false; + } + + function setEtherDrip(uint256 amount) public onlyOwner { + ethDripAmount = amount; + } + + function setTokenDrip(uint256 amount) public onlyOwner { + tokenDripAmount = amount; + } + + function setWaitTime(uint256 time) public onlyOwner { + waitTime = time; + } + + receive() external payable {} +} From 3fe454109f1671e944872c202c43511e391b3caa Mon Sep 17 00:00:00 2001 From: Benjamin Smith Date: Wed, 14 May 2025 13:45:03 +0200 Subject: [PATCH 2/3] delete failed first run (not payable) --- .../11155111/run-1747222353.json | 63 ------------------- 1 file changed, 63 deletions(-) delete mode 100644 broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json diff --git a/broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json b/broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json deleted file mode 100644 index 8fd791d..0000000 --- a/broadcast/DeployFaucet.s.sol/11155111/run-1747222353.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xd57512c86b6dff900fb8b6e9e93e1f2b8405b1f4e2af99abd801a03af67d518b", - "transactionType": "CREATE", - "contractName": "Faucet", - "contractAddress": "0x214f1dfc282c78ed1d05ef5509569fc0fda0ff1b", - "function": null, - "arguments": null, - "transaction": { - "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", - "gas": "0xe2689", - "value": "0x0", - "input": "0x608060405266038d7ea4c68000600155670de0b6b3a764000060025561070860035534801561002c575f5ffd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009591906101b3565b60405180910390fd5b6100ad816100b360201b60201c565b506101cc565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61019d82610174565b9050919050565b6101ad81610193565b82525050565b5f6020820190506101c65f8301846101a4565b92915050565b610a34806101d95f395ff3fe608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c8063941b91c01161006f578063941b91c014610154578063b5b9cc6614610170578063ccca123b1461018c578063d20cd56a146101aa578063df351aaf146101c6578063f2fde38b146101e2576100b2565b806302e60c76146100b65780632d291cad146100d45780636ff18ab914610104578063715018a61461012257806387167b5a1461012c5780638da5cb5b14610136575b5f5ffd5b6100be6101fe565b6040516100cb9190610791565b60405180910390f35b6100ee60048036038101906100e99190610808565b610204565b6040516100fb919061084d565b60405180910390f35b61010c6102a8565b6040516101199190610791565b60405180910390f35b61012a6102ae565b005b6101346102c1565b005b61013e6103a5565b60405161014b9190610875565b60405180910390f35b61016e600480360381019061016991906108b8565b6103cc565b005b61018a60048036038101906101859190610808565b6103de565b005b61019461057c565b6040516101a19190610791565b60405180910390f35b6101c460048036038101906101bf91906108b8565b610582565b005b6101e060048036038101906101db91906108b8565b610594565b005b6101fc60048036038101906101f79190610808565b6105a6565b005b60015481565b5f5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361025257600190506102a3565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054421061029f57600190506102a3565b5f90505b919050565b60025481565b6102b661062a565b6102bf5f6106b1565b565b6102ca33610204565b6102d2575f5ffd5b60015447101561030e576040517fe301d63d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc60015490811502906040515f60405180830381858888f19350505050158015610353573d5f5f3e3d5ffd5b50600354426103629190610910565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103d461062a565b8060028190555050565b6103e733610204565b6103ef575f5ffd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161042d9190610875565b602060405180830381865afa158015610448573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046c9190610957565b90506002548110156104aa576040517f3bcd51e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336002546040518363ffffffff1660e01b81526004016104e7929190610982565b6020604051808303815f875af1158015610503573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052791906109d3565b50600354426105369190610910565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b60035481565b61058a61062a565b8060018190555050565b61059c61062a565b8060038190555050565b6105ae61062a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361061e575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106159190610875565b60405180910390fd5b610627816106b1565b50565b610632610772565b73ffffffffffffffffffffffffffffffffffffffff166106506103a5565b73ffffffffffffffffffffffffffffffffffffffff16146106af57610673610772565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016106a69190610875565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f819050919050565b61078b81610779565b82525050565b5f6020820190506107a45f830184610782565b92915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107d7826107ae565b9050919050565b6107e7816107cd565b81146107f1575f5ffd5b50565b5f81359050610802816107de565b92915050565b5f6020828403121561081d5761081c6107aa565b5b5f61082a848285016107f4565b91505092915050565b5f8115159050919050565b61084781610833565b82525050565b5f6020820190506108605f83018461083e565b92915050565b61086f816107cd565b82525050565b5f6020820190506108885f830184610866565b92915050565b61089781610779565b81146108a1575f5ffd5b50565b5f813590506108b28161088e565b92915050565b5f602082840312156108cd576108cc6107aa565b5b5f6108da848285016108a4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61091a82610779565b915061092583610779565b925082820190508082111561093d5761093c6108e3565b5b92915050565b5f815190506109518161088e565b92915050565b5f6020828403121561096c5761096b6107aa565b5b5f61097984828501610943565b91505092915050565b5f6040820190506109955f830185610866565b6109a26020830184610782565b9392505050565b6109b281610833565b81146109bc575f5ffd5b50565b5f815190506109cd816109a9565b92915050565b5f602082840312156109e8576109e76107aa565b5b5f6109f5848285016109bf565b9150509291505056fea26469706673582212206d8a80b60b569f9777abe6eda4d6e22ea335685e1c217669657b85f024f9ffb264736f6c634300081c0033", - "nonce": "0x3f", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x1b28e19", - "logs": [ - { - "address": "0x214f1dfc282c78ed1d05ef5509569fc0fda0ff1b", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000ae5a4884d813f334e1b80b26402ec78fadaee7eb" - ], - "data": "0x", - "blockHash": "0x699a5bac2535c9f69962cfcd0ec30f83b8b474dcf5b8d22eaf4f0b544206edd1", - "blockNumber": "0x7f0683", - "blockTimestamp": "0x68247f30", - "transactionHash": "0xd57512c86b6dff900fb8b6e9e93e1f2b8405b1f4e2af99abd801a03af67d518b", - "transactionIndex": "0x178", - "logIndex": "0x15a", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000010000000000000000000000000000020000000000000000000800000000000000008000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000008000000400000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xd57512c86b6dff900fb8b6e9e93e1f2b8405b1f4e2af99abd801a03af67d518b", - "transactionIndex": "0x178", - "blockHash": "0x699a5bac2535c9f69962cfcd0ec30f83b8b474dcf5b8d22eaf4f0b544206edd1", - "blockNumber": "0x7f0683", - "gasUsed": "0xae291", - "effectiveGasPrice": "0x859f3163", - "from": "0xae5a4884d813f334e1b80b26402ec78fadaee7eb", - "to": null, - "contractAddress": "0x214f1dfc282c78ed1d05ef5509569fc0fda0ff1b" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1747222353, - "chain": 11155111, - "commit": "85b4305" -} \ No newline at end of file From 21329213268e3e4fd15a3e887a5b75f01f616743 Mon Sep 17 00:00:00 2001 From: Benjamin Smith Date: Thu, 15 May 2025 10:47:38 +0200 Subject: [PATCH 3/3] rm unnecessary address --- script/DeployFaucet.s.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/script/DeployFaucet.s.sol b/script/DeployFaucet.s.sol index a3d01a4..60b08f3 100644 --- a/script/DeployFaucet.s.sol +++ b/script/DeployFaucet.s.sol @@ -7,7 +7,6 @@ import "src/Faucet.sol"; contract DeployFaucet is Script { Faucet public faucet; - address public tokenAddress = 0x0000000000000000000000000000000000000000; function run() external { uint256 deployerPk = vm.envUint("DEPLOYER_KEY");