diff --git a/broadcast/Crowdfund.s.sol/4202/run-1728032639.json b/broadcast/Crowdfund.s.sol/4202/run-1728032639.json new file mode 100644 index 0000000..157b6a8 --- /dev/null +++ b/broadcast/Crowdfund.s.sol/4202/run-1728032639.json @@ -0,0 +1,57 @@ +{ + "transactions": [ + { + "hash": "0xdf5286843dce5bfa380661d3151e2fa1a5b21b277e2f69607f80ccb0e5bcd5d0", + "transactionType": "CREATE", + "contractName": "Crowdfund", + "contractAddress": "0x3fee9b3563c1e22d6873b40b6bc5058d7fb1306e", + "function": null, + "arguments": null, + "transaction": { + "from": "0xdab8892c07fb4c362dd99d9a2fbff8b555d39cb5", + "gas": "0xf61ef", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610d128061001f6000396000f3fe6080604052600436106100865760003560e01c8063a318f26911610059578063a318f26914610106578063c2750f9914610126578063dd0408ae1461013b578063e6ffcaa11461015b578063f11a76081461018857600080fd5b806316f43dd41461008b57806342a4fda8146100af57806347c9e8f6146100c4578063a1e5084c146100e6575b600080fd5b34801561009757600080fd5b506003545b6040519081526020015b60405180910390f35b6100c26100bd3660046108fc565b6101b8565b005b3480156100d057600080fd5b506100d961029b565b6040516100a69190610915565b3480156100f257600080fd5b506100d9610101366004610958565b6102f3565b34801561011257600080fd5b5061009c6101213660046109d1565b61035f565b34801561013257600080fd5b5060045461009c565b34801561014757600080fd5b506100c26101563660046108fc565b6105a3565b34801561016757600080fd5b5061017b6101763660046108fc565b610712565b6040516100a69190610a9a565b34801561019457600080fd5b5061009c6101a33660046108fc565b60009081526020819052604090206006015490565b346000036101d957604051630aeffa6960e01b815260040160405180910390fd5b6000818152602081905260409020805460ff16610211576040516306267e8b60e01b8152600481018390526024015b60405180910390fd5b8060050154421115610236576040516304fb824560e41b815260040160405180910390fd5b34600460008282546102489190610b52565b92505081905550348160060160008282546102639190610b52565b90915550506040513490339084907f0b5b4c52969ff7329ecf7ee536409fda87812b15a8622bc6e8cdeab3aee14a2690600090a45050565b606060028054806020026020016040519081016040528092919081815260200182805480156102e957602002820191906000526020600020905b8154815260200190600101908083116102d5575b5050505050905090565b6001600160a01b03811660009081526001602090815260409182902080548351818402810184019094528084526060939283018282801561035357602002820191906000526020600020905b81548152602001906001019080831161033f575b50505050509050919050565b6000826000036103825760405163b483459360e01b815260040160405180910390fd5b816000036103a357604051636582c4c360e11b815260040160405180910390fd5b604080516101008101825260018152600060208083018290528351601f8b0182900482028101820185528a81529193830191908b908b9081908401838280828437600092019190915250505090825250604080516020601f8a0181900481028201810190925288815291810191908990899081908401838280828437600092019190915250505090825250336020820152604081018690526060016104488542610b52565b8152600060209182018190526003805433835260019384905260408320909650939450906104768387610b52565b909155505060008381526020818152604091829020845181549286015161ffff1990931690151561ff00191617610100921515929092029190911781559083015183919060018201906104c99082610c0a565b50606082015160028201906104de9082610c0a565b5060808201516003820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600482015560c0820151600582015560e0909101516006909101556002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0184905581549081018255600082815260208120909101849055604051849133917ffc5b9d1c2c1134048e1792e3ae27d4eee04f460d341711c7088000d2ca2186219190a350509695505050505050565b600081815260208190526040902060058101544210156105de57806005015460405163d4d5aa3160e01b815260040161020891815260200190565b8054610100900460ff1615610606576040516304fb824560e41b815260040160405180910390fd5b806006015460000361062b57604051634da43dad60e11b815260040160405180910390fd5b805461ff00191661010017815560068101546004805460009061064f908490610cc9565b9091555050600381015460068201546040516000926001600160a01b031691908381818185875af1925050503d80600081146106a7576040519150601f19603f3d011682016040523d82523d6000602084013e6106ac565b606091505b50509050806106ce5760405163b802b54560e01b815260040160405180910390fd5b6006820154600383015460405185916001600160a01b0316907f51b4c2391bd83e1a0ee0aa16948f6c9b24119eac3f1684b2898e596252fa422790600090a4505050565b610767604051806101000160405280600015158152602001600015158152602001606081526020016060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6000828152602081815260409182902082516101008082018552825460ff808216151584529190041615159281019290925260018101805492939192918401916107b090610b81565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90610b81565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050815260200160028201805461084290610b81565b80601f016020809104026020016040519081016040528092919081815260200182805461086e90610b81565b80156108bb5780601f10610890576101008083540402835291602001916108bb565b820191906000526020600020905b81548152906001019060200180831161089e57829003601f168201915b505050918352505060038201546001600160a01b03166020820152600482015460408201526005820154606082015260069091015460809091015292915050565b60006020828403121561090e57600080fd5b5035919050565b602080825282518282018190526000918401906040840190835b8181101561094d57835183526020938401939092019160010161092f565b509095945050505050565b60006020828403121561096a57600080fd5b81356001600160a01b038116811461098157600080fd5b9392505050565b60008083601f84011261099a57600080fd5b50813567ffffffffffffffff8111156109b257600080fd5b6020830191508360208285010111156109ca57600080fd5b9250929050565b600080600080600080608087890312156109ea57600080fd5b863567ffffffffffffffff811115610a0157600080fd5b610a0d89828a01610988565b909750955050602087013567ffffffffffffffff811115610a2d57600080fd5b610a3989828a01610988565b979a9699509760408101359660609091013595509350505050565b6000815180845260005b81811015610a7a57602081850181015186830182015201610a5e565b506000602082860101526020601f19601f83011685010191505092915050565b6020815281511515602082015260006020830151610abc604084018215159052565b5060408301516101006060840152610ad8610120840182610a54565b90506060840151601f19848303016080850152610af58282610a54565b9150506080840151610b1260a08501826001600160a01b03169052565b5060a084015160c084015260c084015160e084015260e08401516101008401528091505092915050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b6557610b65610b3c565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610b9557607f821691505b602082108103610bb557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c0557806000526020600020601f840160051c81016020851015610be25750805b601f840160051c820191505b81811015610c025760008155600101610bee565b50505b505050565b815167ffffffffffffffff811115610c2457610c24610b6b565b610c3881610c328454610b81565b84610bbb565b6020601f821160018114610c6c5760008315610c545750848201515b600019600385901b1c1916600184901b178455610c02565b600084815260208120601f198516915b82811015610c9c5787850151825560209485019460019092019101610c7c565b5084821015610cba5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b81810381811115610b6557610b65610b3c56fea26469706673582212204fb1915c77c6fb8dd6c30ee2e4fb2fbb30f9636f3476610800a57bd907b9e56e64736f6c634300081a0033", + "nonce": "0x13", + "chainId": "0x106a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xc8141", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xdf5286843dce5bfa380661d3151e2fa1a5b21b277e2f69607f80ccb0e5bcd5d0", + "transactionIndex": "0x1", + "blockHash": "0xaf4d3bb15e24addbe2b7848f493638aa3220685f81d99b5b6e95b47058ca8a52", + "blockNumber": "0xad564d", + "gasUsed": "0xbd602", + "effectiveGasPrice": "0xfe", + "from": "0xdab8892c07fb4c362dd99d9a2fbff8b555d39cb5", + "to": null, + "contractAddress": "0x3fee9b3563c1e22d6873b40b6bc5058d7fb1306e", + "l1BaseFeeScalar": "0x2af8", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x109618", + "l1Fee": "0x6f6d0473407c", + "l1GasPrice": "0x4ab7ffecca", + "l1GasUsed": "0x8791" + } + ], + "libraries": [], + "pending": [], + "returns": { + "0": { + "internal_type": "contract Crowdfund", + "value": "0x3fEe9b3563c1E22D6873b40b6bC5058d7FB1306E" + } + }, + "timestamp": 1728032639, + "chain": 4202, + "commit": "8d6fb6c" +} \ No newline at end of file diff --git a/broadcast/Crowdfund.s.sol/4202/run-latest.json b/broadcast/Crowdfund.s.sol/4202/run-latest.json new file mode 100644 index 0000000..157b6a8 --- /dev/null +++ b/broadcast/Crowdfund.s.sol/4202/run-latest.json @@ -0,0 +1,57 @@ +{ + "transactions": [ + { + "hash": "0xdf5286843dce5bfa380661d3151e2fa1a5b21b277e2f69607f80ccb0e5bcd5d0", + "transactionType": "CREATE", + "contractName": "Crowdfund", + "contractAddress": "0x3fee9b3563c1e22d6873b40b6bc5058d7fb1306e", + "function": null, + "arguments": null, + "transaction": { + "from": "0xdab8892c07fb4c362dd99d9a2fbff8b555d39cb5", + "gas": "0xf61ef", + "value": "0x0", + "input": "0x6080604052348015600f57600080fd5b50610d128061001f6000396000f3fe6080604052600436106100865760003560e01c8063a318f26911610059578063a318f26914610106578063c2750f9914610126578063dd0408ae1461013b578063e6ffcaa11461015b578063f11a76081461018857600080fd5b806316f43dd41461008b57806342a4fda8146100af57806347c9e8f6146100c4578063a1e5084c146100e6575b600080fd5b34801561009757600080fd5b506003545b6040519081526020015b60405180910390f35b6100c26100bd3660046108fc565b6101b8565b005b3480156100d057600080fd5b506100d961029b565b6040516100a69190610915565b3480156100f257600080fd5b506100d9610101366004610958565b6102f3565b34801561011257600080fd5b5061009c6101213660046109d1565b61035f565b34801561013257600080fd5b5060045461009c565b34801561014757600080fd5b506100c26101563660046108fc565b6105a3565b34801561016757600080fd5b5061017b6101763660046108fc565b610712565b6040516100a69190610a9a565b34801561019457600080fd5b5061009c6101a33660046108fc565b60009081526020819052604090206006015490565b346000036101d957604051630aeffa6960e01b815260040160405180910390fd5b6000818152602081905260409020805460ff16610211576040516306267e8b60e01b8152600481018390526024015b60405180910390fd5b8060050154421115610236576040516304fb824560e41b815260040160405180910390fd5b34600460008282546102489190610b52565b92505081905550348160060160008282546102639190610b52565b90915550506040513490339084907f0b5b4c52969ff7329ecf7ee536409fda87812b15a8622bc6e8cdeab3aee14a2690600090a45050565b606060028054806020026020016040519081016040528092919081815260200182805480156102e957602002820191906000526020600020905b8154815260200190600101908083116102d5575b5050505050905090565b6001600160a01b03811660009081526001602090815260409182902080548351818402810184019094528084526060939283018282801561035357602002820191906000526020600020905b81548152602001906001019080831161033f575b50505050509050919050565b6000826000036103825760405163b483459360e01b815260040160405180910390fd5b816000036103a357604051636582c4c360e11b815260040160405180910390fd5b604080516101008101825260018152600060208083018290528351601f8b0182900482028101820185528a81529193830191908b908b9081908401838280828437600092019190915250505090825250604080516020601f8a0181900481028201810190925288815291810191908990899081908401838280828437600092019190915250505090825250336020820152604081018690526060016104488542610b52565b8152600060209182018190526003805433835260019384905260408320909650939450906104768387610b52565b909155505060008381526020818152604091829020845181549286015161ffff1990931690151561ff00191617610100921515929092029190911781559083015183919060018201906104c99082610c0a565b50606082015160028201906104de9082610c0a565b5060808201516003820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600482015560c0820151600582015560e0909101516006909101556002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0184905581549081018255600082815260208120909101849055604051849133917ffc5b9d1c2c1134048e1792e3ae27d4eee04f460d341711c7088000d2ca2186219190a350509695505050505050565b600081815260208190526040902060058101544210156105de57806005015460405163d4d5aa3160e01b815260040161020891815260200190565b8054610100900460ff1615610606576040516304fb824560e41b815260040160405180910390fd5b806006015460000361062b57604051634da43dad60e11b815260040160405180910390fd5b805461ff00191661010017815560068101546004805460009061064f908490610cc9565b9091555050600381015460068201546040516000926001600160a01b031691908381818185875af1925050503d80600081146106a7576040519150601f19603f3d011682016040523d82523d6000602084013e6106ac565b606091505b50509050806106ce5760405163b802b54560e01b815260040160405180910390fd5b6006820154600383015460405185916001600160a01b0316907f51b4c2391bd83e1a0ee0aa16948f6c9b24119eac3f1684b2898e596252fa422790600090a4505050565b610767604051806101000160405280600015158152602001600015158152602001606081526020016060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6000828152602081815260409182902082516101008082018552825460ff808216151584529190041615159281019290925260018101805492939192918401916107b090610b81565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90610b81565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050815260200160028201805461084290610b81565b80601f016020809104026020016040519081016040528092919081815260200182805461086e90610b81565b80156108bb5780601f10610890576101008083540402835291602001916108bb565b820191906000526020600020905b81548152906001019060200180831161089e57829003601f168201915b505050918352505060038201546001600160a01b03166020820152600482015460408201526005820154606082015260069091015460809091015292915050565b60006020828403121561090e57600080fd5b5035919050565b602080825282518282018190526000918401906040840190835b8181101561094d57835183526020938401939092019160010161092f565b509095945050505050565b60006020828403121561096a57600080fd5b81356001600160a01b038116811461098157600080fd5b9392505050565b60008083601f84011261099a57600080fd5b50813567ffffffffffffffff8111156109b257600080fd5b6020830191508360208285010111156109ca57600080fd5b9250929050565b600080600080600080608087890312156109ea57600080fd5b863567ffffffffffffffff811115610a0157600080fd5b610a0d89828a01610988565b909750955050602087013567ffffffffffffffff811115610a2d57600080fd5b610a3989828a01610988565b979a9699509760408101359660609091013595509350505050565b6000815180845260005b81811015610a7a57602081850181015186830182015201610a5e565b506000602082860101526020601f19601f83011685010191505092915050565b6020815281511515602082015260006020830151610abc604084018215159052565b5060408301516101006060840152610ad8610120840182610a54565b90506060840151601f19848303016080850152610af58282610a54565b9150506080840151610b1260a08501826001600160a01b03169052565b5060a084015160c084015260c084015160e084015260e08401516101008401528091505092915050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b6557610b65610b3c565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610b9557607f821691505b602082108103610bb557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c0557806000526020600020601f840160051c81016020851015610be25750805b601f840160051c820191505b81811015610c025760008155600101610bee565b50505b505050565b815167ffffffffffffffff811115610c2457610c24610b6b565b610c3881610c328454610b81565b84610bbb565b6020601f821160018114610c6c5760008315610c545750848201515b600019600385901b1c1916600184901b178455610c02565b600084815260208120601f198516915b82811015610c9c5787850151825560209485019460019092019101610c7c565b5084821015610cba5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b81810381811115610b6557610b65610b3c56fea26469706673582212204fb1915c77c6fb8dd6c30ee2e4fb2fbb30f9636f3476610800a57bd907b9e56e64736f6c634300081a0033", + "nonce": "0x13", + "chainId": "0x106a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xc8141", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xdf5286843dce5bfa380661d3151e2fa1a5b21b277e2f69607f80ccb0e5bcd5d0", + "transactionIndex": "0x1", + "blockHash": "0xaf4d3bb15e24addbe2b7848f493638aa3220685f81d99b5b6e95b47058ca8a52", + "blockNumber": "0xad564d", + "gasUsed": "0xbd602", + "effectiveGasPrice": "0xfe", + "from": "0xdab8892c07fb4c362dd99d9a2fbff8b555d39cb5", + "to": null, + "contractAddress": "0x3fee9b3563c1e22d6873b40b6bc5058d7fb1306e", + "l1BaseFeeScalar": "0x2af8", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0x109618", + "l1Fee": "0x6f6d0473407c", + "l1GasPrice": "0x4ab7ffecca", + "l1GasUsed": "0x8791" + } + ], + "libraries": [], + "pending": [], + "returns": { + "0": { + "internal_type": "contract Crowdfund", + "value": "0x3fEe9b3563c1E22D6873b40b6bC5058d7FB1306E" + } + }, + "timestamp": 1728032639, + "chain": 4202, + "commit": "8d6fb6c" +} \ No newline at end of file diff --git a/src/Crowdfund.sol b/src/Crowdfund.sol index cf52603..b3a0291 100644 --- a/src/Crowdfund.sol +++ b/src/Crowdfund.sol @@ -20,13 +20,22 @@ contract Crowdfund { // State variables mapping(uint256 => Campaign) campaigns; mapping(address => uint256[]) userCampaigns; + uint256[] campaignsId; uint256 numCampaigns; uint256 totalFunding; // Events event CampaignCreated(address indexed creator, uint256 indexed campaignId); - event CampaignEnded(address indexed creator, uint256 indexed campaignId, uint256 indexed amountRaised); - event DonationReceived(uint256 indexed campaignId, address indexed donator, uint256 indexed amount); + event CampaignEnded( + address indexed creator, + uint256 indexed campaignId, + uint256 indexed amountRaised + ); + event DonationReceived( + uint256 indexed campaignId, + address indexed donator, + uint256 indexed amount + ); // Errors error Crowdfund_InvalidCampaign(uint256 id); @@ -50,10 +59,12 @@ contract Crowdfund { /// @param _goal The funding goal of the campaign. /// @param _deadline The deadline for the campaign. /// @return campaignId The ID of the created campaign. - function createCampaign(string calldata _title, string calldata _description, uint256 _goal, uint256 _deadline) - public - returns (uint256 campaignId) - { + function createCampaign( + string calldata _title, + string calldata _description, + uint256 _goal, + uint256 _deadline + ) public returns (uint256 campaignId) { if (_goal == 0) revert Crowdfund_GoalCannotBeZero(); if (_deadline == 0) revert Crowdfund_DeadlineTooShort(); Campaign memory newCampaign = Campaign({ @@ -73,6 +84,7 @@ contract Crowdfund { numCampaigns += 1; campaigns[campaignId] = newCampaign; + campaignsId.push(campaignId); _userCampaigns.push(campaignId); emit CampaignCreated(msg.sender, campaignId); @@ -111,11 +123,17 @@ contract Crowdfund { campaign.isPaidOut = true; totalFunding -= campaign.amountRaised; - (bool success,) = payable(campaign.benefactor).call{value: campaign.amountRaised}(""); + (bool success, ) = payable(campaign.benefactor).call{ + value: campaign.amountRaised + }(""); if (!success) revert Crowdfund_PayoutFailed(); - emit CampaignEnded(campaign.benefactor, campaignId, campaign.amountRaised); + emit CampaignEnded( + campaign.benefactor, + campaignId, + campaign.amountRaised + ); } /// @notice Gets the total number of campaigns. @@ -133,21 +151,31 @@ contract Crowdfund { /// @notice Gets the campaigns created by a specific user. /// @param user The address of the user. /// @return The array of campaign IDs created by the user. - function getUserCampaigns(address user) external view returns (uint256[] memory) { + function getUserCampaigns( + address user + ) external view returns (uint256[] memory) { return userCampaigns[user]; } /// @notice Gets the campaign details by ID. /// @param campaignId The ID of the campaign. /// @return The campaign details. - function getCampaignById(uint256 campaignId) external view returns (Campaign memory) { + function getCampaignById( + uint256 campaignId + ) external view returns (Campaign memory) { return campaigns[campaignId]; } /// @notice Gets the amount raised for a specific campaign. /// @param campaignId The ID of the campaign. /// @return The amount raised for the campaign. - function getCampaignAmountRaised(uint256 campaignId) external view returns (uint256) { + function getCampaignAmountRaised( + uint256 campaignId + ) external view returns (uint256) { return campaigns[campaignId].amountRaised; } + + function getCampaignIds() external view returns (uint256[] memory) { + return campaignsId; + } }