diff --git a/.gitignore b/.gitignore index 19bbec3..e46e7c9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,7 @@ cache/ out/ # Ignores development broadcast logs -!/broadcast -/broadcast/*/31337/ -/broadcast/**/dry-run/ +broadcast # Docs docs/ @@ -30,4 +28,4 @@ pgo-data.profdata **/proof-with-io.json # Dotenv file -.env \ No newline at end of file +.env diff --git a/contracts/README.md b/contracts/README.md index 9366f3b..6462cd4 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -6,4 +6,4 @@ ## 📄 Example Deployment -- Gravity Alpha Testnet Sepolia: [0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f](https://explorer-sepolia.gravity.xyz/address/0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f) +- Gravity Alpha Testnet Sepolia: [0x4349F1d73237c8Eb43FC04A16CFf70261D0F1343](https://explorer-sepolia.gravity.xyz/address/0x4349F1d73237c8Eb43FC04A16CFf70261D0F1343) diff --git a/contracts/broadcast/Raffle.s.sol/13505/run-1730752044.json b/contracts/broadcast/Raffle.s.sol/13505/run-1730752044.json deleted file mode 100644 index 2324005..0000000 --- a/contracts/broadcast/Raffle.s.sol/13505/run-1730752044.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x575ff7e2398f92ca2187253793a7cfbd05eefc1cb6768ecde1940d508157d3e8", - "transactionType": "CREATE", - "contractName": "Raffle", - "contractAddress": "0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f", - "function": null, - "arguments": [ - "0xa272C14931E725D5cDB30f87Af77CF5Ce3d20B32", - "0xAa64FA67856f2C89d6456595bc21418237f78024", - "0x435B8E93E10B9038267A374d8794b294DEB60B5E", - "0x00a5af73f52b0d0d2a00b532542455faa5dc61f5ac9e46f4c592a17c95fec9db", - "0x8d180A75fAc0De59BB1e833fc3838EE026a53aC5" - ], - "transaction": { - "from": "0xa272c14931e725d5cdb30f87af77cf5ce3d20b32", - "gas": "0xa3c0d34", - "value": "0x0", - "input": "0x61016060405234801561001157600080fd5b5060405161213d38038061213d8339810160408190526100309161031e565b604080518082018252600c81526b47616c786520526166666c6560a01b602080830191909152825180840190935260058352640312e302e360dc1b9083015290866001600160a01b0381166100a057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100a981610225565b506001805460ff60a01b191690556100c2826002610241565b610120526100d1816003610241565b61014052815160208084019190912060e052815190820120610100524660a05261015e60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03851661018e5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0384166101b55760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383166101dc5760405163e6c4247b60e01b815260040160405180910390fd5b600480546001600160a01b039586166001600160a01b0319918216179091556007805494861694821694909417909355600991909155600880549190931691161790555061054b565b600180546001600160a01b031916905561023e81610274565b50565b600060208351101561025d57610256836102c4565b905061026e565b81610268848261041b565b5060ff90505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080829050601f815111156102ef578260405163305a27a960e01b815260040161009791906104d9565b80516102fa82610527565b179392505050565b80516001600160a01b038116811461031957600080fd5b919050565b600080600080600060a0868803121561033657600080fd5b61033f86610302565b945061034d60208701610302565b935061035b60408701610302565b92506060860151915061037060808701610302565b90509295509295909350565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806103a657607f821691505b6020821081036103c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561041657806000526020600020601f840160051c810160208510156103f35750805b601f840160051c820191505b8181101561041357600081556001016103ff565b50505b505050565b81516001600160401b038111156104345761043461037c565b610448816104428454610392565b846103cc565b6020601f82116001811461047c57600083156104645750848201515b600019600385901b1c1916600184901b178455610413565b600084815260208120601f198516915b828110156104ac578785015182556020948501946001909201910161048c565b50848210156104ca5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b8181101561050757602081860181015160408684010152016104ea565b506000604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156103c65760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611b986105a56000396000610e1d01526000610deb0152600061123c015260006112140152600061116f01526000611199015260006111c30152611b986000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638456cb59116100b8578063c69b0eb11161007c578063c69b0eb11461028a578063c8cbf5e3146102a1578063d131c722146102b4578063d74e4ca8146102c7578063e30c3978146102da578063f2fde38b146102eb57600080fd5b80638456cb591461023057806384b0196e1461023857806388c84146146102535780638da5cb5b14610266578063972ccdaf1461027757600080fd5b806349f86f341161010a57806349f86f34146101ba5780635437988d146101dc5780635c975abb146101ef5780636c19e7831461020d578063715018a61461022057806379ba50971461022857600080fd5b806309c21de014610147578063238ac933146101775780632b7ac3f31461018a5780632ce7db681461019d5780633f4ba83a146101b2575b600080fd5b60085461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60045461015a906001600160a01b031681565b60075461015a906001600160a01b031681565b6101b06101ab36600461148e565b6102fe565b005b6101b061035b565b6101cd6101c83660046114b7565b61036d565b60405161016e93929190611520565b6101b06101ea36600461148e565b610490565b600154600160a01b900460ff165b604051901515815260200161016e565b6101b061021b36600461148e565b61050d565b6101b061058a565b6101b061059c565b6101b06105e5565b6102406105f5565b60405161016e9796959493929190611585565b6101b061026136600461167a565b61063b565b6000546001600160a01b031661015a565b6101b06102853660046114b7565b61088c565b61029360095481565b60405190815260200161016e565b6101b06102af3660046116de565b6108c9565b6101b06102c2366004611750565b610ab2565b6101fd6102d53660046114b7565b610c70565b6001546001600160a01b031661015a565b6101b06102f936600461148e565b610c95565b610306610d06565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f0bf1c7001241496ed737646ad58bc2d42d5c086ee9df98ab228601bb47110c7f906020015b60405180910390a150565b610363610d06565b61036b610d33565b565b604080516080810182526000808252602082018190529181018290526060808201526000838152600660209081526040808320805482516080810184526001830180546001600160401b038082168452600160401b9182900416968301969096526002840154948201949094526003830180549590920460ff16975091939192916060840191906103fd906117b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610429906117b9565b80156104765780601f1061044b57610100808354040283529160200191610476565b820191906000526020600020905b81548152906001019060200180831161045957829003601f168201915b505050505081525050925080600701549150509193909250565b610498610d06565b6001600160a01b0381166104bf5760405163e6c4247b60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527fd24015cc99cc1700cafca3042840a1d8ac1e3964fd2e0e37ea29c654056ee32790602001610350565b610515610d06565b6001600160a01b03811661053c5760405163e6c4247b60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5553331329228fbd4123164423717a4a7539f6dfa1c3279a923b98fd681a6c7390602001610350565b610592610d06565b61036b6000610d88565b60015433906001600160a01b031681146105d95760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6105e281610d88565b50565b6105ed610d06565b61036b610da1565b600060608060008060006060610609610de4565b610611610e16565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6001600160401b038085166000908152600660205260408120805490921690036106785760405163192dfdd160e11b815260040160405180910390fd5b8054600160401b900460ff166106a157604051630bb6646b60e01b815260040160405180910390fd5b6002810154156106c457604051631f50e6a960e31b815260040160405180910390fd5b60006106da6106d38787610e43565b8585610eb9565b9050806106fa57604051638baa579f60e01b815260040160405180910390fd5b60085460405163167ef5fb60e01b81526001600160401b03871660048201526000916001600160a01b03169063167ef5fb90602401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107749190810190611861565b80519091506001600160401b0316158061079057506040810151155b8061079e5750606081015151155b156107bf57604051600162f485e960e01b0319815260040160405180910390fd5b805160018401805460208401516001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff19909216931692909217919091178155604082015160028501556060820151829190600386019061081f90826119aa565b5050835468ff00000000000000001916845550805160408083015181516001600160401b03808c1682529093166020840152908201527f1dbc60586a945ceca44922ef613ca23dc725b0fd96c644af43119d1876eca608906060015b60405180910390a150505050505050565b610894610d06565b60098190556040518181527f127f2989a02817cf91f825d7e0fbbf2799274632f070f40be967d57c923acbda90602001610350565b6108d1610f1a565b846001600160401b03166000036108fb57604051630316876760e51b815260040160405180910390fd5b8360000361091c5760405163e6c4247b60e01b815260040160405180910390fd5b61092e836001600160401b0316610c70565b156109575760405163cb6d85c760e01b81526001600160401b03841660048201526024016105d0565b600061096e610967878787610f45565b8484610eb9565b90508061098e57604051638baa579f60e01b815260040160405180910390fd5b6001600160401b038087166000908152600660205260408120805490921690036109d857805468ffffffffffffffffff19166001600160401b03881617600160401b178155610a06565b8054600160401b900460ff161515600003610a0657604051630bb6646b60e01b815260040160405180910390fd5b66ffffffffffffff600886901c1660009081526005602052604090208054600160ff88161b179055600581018054906000610a4083611a68565b909155505060058101546001600160a01b03871660009081526004830160209081526040918290209290925580516001600160401b03808b168252928101899052918716908201527fece2c1234de057a0591354387df3163753be647210cd94802ddaa85b27de2f329060600161087b565b610aba610f1a565b6001600160401b03808616600090815260066020526040812080549092169003610af75760405163192dfdd160e11b815260040160405180910390fd5b8054600160401b900460ff1615610b215760405163aa43d67560e01b815260040160405180910390fd5b600781015415610b44576040516329c6f95960e21b815260040160405180910390fd5b6000808080610b55888a018a611aa8565b935093509350935084600501548463ffffffff16141580610b7a575060028501548214155b15610b97576040516227b15560e01b815260040160405180910390fd5b60075460095460405163020a49e360e51b81526001600160a01b03909216916341493c6091610bd0918d908d908d908d90600401611b13565b60006040518083038186803b158015610be857600080fd5b505afa158015610bfc573d6000803e3d6000fd5b5050505060078501819055604080516001600160401b038c16815263ffffffff8681166020830152851681830152606081018490526080810183905290517fa7e58d47fffa9ed45ed22db8f05e0f79a19f861b3d5fbebf5dfc52441f98996f9181900360a00190a150505050505050505050565b600881901c600090815260056020526040812054600160ff84161b1615155b92915050565b610c9d610d06565b600180546001600160a01b0383166001600160a01b03199091168117909155610cce6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b0316331461036b5760405163118cdaa760e01b81523360048201526024016105d0565b610d3b610fa7565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556105e281610fd1565b610da9610f1a565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d6b3390565b6060610e117f00000000000000000000000000000000000000000000000000000000000000006002611021565b905090565b6060610e117f00000000000000000000000000000000000000000000000000000000000000006003611021565b6000610eb27f9ee15f3177a8002049bb047179bf1437f7b11bc9bf540f929a08abdb85a2667b8484604051602001610e97939291909283526001600160401b03918216602084015216604082015260600190565b604051602081830303815290604052805190602001206110cc565b9392505050565b600454604080516020601f85018190048102820181019092528381526000926001600160a01b031691610f0891879187908790819084018382808284376000920191909152506110f992505050565b6001600160a01b031614949350505050565b600154600160a01b900460ff161561036b5760405163d93c066560e01b815260040160405180910390fd5b604080517f60ef7d47aba3043d09a3d757cf74f00f6a5d51f70f7beede65b01b06c9af5ab960208201526001600160401b0380861692820192909252606081018490529082166080820152600090610f9f9060a001610e97565b949350505050565b600154600160a01b900460ff1661036b57604051638dfc202b60e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060ff831461103b5761103483611123565b9050610c8f565b818054611047906117b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611073906117b9565b80156110c05780601f10611095576101008083540402835291602001916110c0565b820191906000526020600020905b8154815290600101906020018083116110a357829003601f168201915b50505050509050610c8f565b6000610c8f6110d9611162565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080611109868661128d565b92509250925061111982826112da565b5090949350505050565b6060600061113083611397565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156111bb57507f000000000000000000000000000000000000000000000000000000000000000046145b156111e557507f000000000000000000000000000000000000000000000000000000000000000090565b610e11604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080600083516041036112c75760208401516040850151606086015160001a6112b9888285856113bf565b9550955095505050506112d3565b50508151600091506002905b9250925092565b60008260038111156112ee576112ee611b4c565b036112f7575050565b600182600381111561130b5761130b611b4c565b036113295760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561133d5761133d611b4c565b0361135e5760405163fce698f760e01b8152600481018290526024016105d0565b600382600381111561137257611372611b4c565b03611393576040516335e2f38360e21b8152600481018290526024016105d0565b5050565b600060ff8216601f811115610c8f57604051632cd44ac360e21b815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113fa5750600091506003905082611484565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561144e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661147a57506000925060019150829050611484565b9250600091508190505b9450945094915050565b6000602082840312156114a057600080fd5b81356001600160a01b0381168114610eb257600080fd5b6000602082840312156114c957600080fd5b5035919050565b60005b838110156114eb5781810151838201526020016114d3565b50506000910152565b6000815180845261150c8160208601602086016114d0565b601f01601f19169290920160200192915050565b8315158152606060208201526001600160401b0383511660608201526001600160401b036020840151166080820152604083015160a082015260006060840151608060c084015261157460e08401826114f4565b915050826040830152949350505050565b60ff60f81b8816815260e0602082015260006115a460e08301896114f4565b82810360408401526115b681896114f4565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561160c5783518352602093840193909201916001016115ee565b50909b9a5050505050505050505050565b6001600160401b03811681146105e257600080fd5b60008083601f84011261164457600080fd5b5081356001600160401b0381111561165b57600080fd5b60208301915083602082850101111561167357600080fd5b9250929050565b6000806000806060858703121561169057600080fd5b843561169b8161161d565b935060208501356116ab8161161d565b925060408501356001600160401b038111156116c657600080fd5b6116d287828801611632565b95989497509550505050565b6000806000806000608086880312156116f657600080fd5b85356117018161161d565b94506020860135935060408601356117188161161d565b925060608601356001600160401b0381111561173357600080fd5b61173f88828901611632565b969995985093965092949392505050565b60008060008060006060868803121561176857600080fd5b85356117738161161d565b945060208601356001600160401b0381111561178e57600080fd5b61179a88828901611632565b90955093505060408601356001600160401b0381111561173357600080fd5b600181811c908216806117cd57607f821691505b6020821081036117ed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561182b5761182b6117f3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611859576118596117f3565b604052919050565b60006020828403121561187357600080fd5b81516001600160401b0381111561188957600080fd5b82016080818503121561189b57600080fd5b6118a3611809565b81516118ae8161161d565b815260208201516118be8161161d565b60208201526040828101519082015260608201516001600160401b038111156118e657600080fd5b80830192505084601f8301126118fb57600080fd5b81516001600160401b03811115611914576119146117f3565b611927601f8201601f1916602001611831565b81815286602083860101111561193c57600080fd5b61194d8260208301602087016114d0565b606083015250949350505050565b601f8211156119a557806000526020600020601f840160051c810160208510156119825750805b601f840160051c820191505b818110156119a2576000815560010161198e565b50505b505050565b81516001600160401b038111156119c3576119c36117f3565b6119d7816119d184546117b9565b8461195b565b6020601f821160018114611a0b57600083156119f35750848201515b600019600385901b1c1916600184901b1784556119a2565b600084815260208120601f198516915b82811015611a3b5787850151825560209485019460019092019101611a1b565b5084821015611a595786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060018201611a8857634e487b7160e01b600052601160045260246000fd5b5060010190565b803563ffffffff81168114611aa357600080fd5b919050565b60008060008060808587031215611abe57600080fd5b611ac785611a8f565b9350611ad560208601611a8f565b93969395505050506040820135916060013590565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000611b2d606083018688611aea565b8281036040840152611b40818587611aea565b98975050505050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220cda04510981312956bcefa44f9a03828541251807e6a20d598703d8ca17f191564736f6c634300081a0033000000000000000000000000a272c14931e725d5cdb30f87af77cf5ce3d20b32000000000000000000000000aa64fa67856f2c89d6456595bc21418237f78024000000000000000000000000435b8e93e10b9038267a374d8794b294deb60b5e00a5af73f52b0d0d2a00b532542455faa5dc61f5ac9e46f4c592a17c95fec9db0000000000000000000000008d180a75fac0de59bb1e833fc3838ee026a53ac5", - "nonce": "0x2c51", - "chainId": "0x34c1" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x3098d4", - "logs": [ - { - "address": "0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000a272c14931e725d5cdb30f87af77cf5ce3d20b32" - ], - "data": "0x", - "blockHash": "0xf399ccba385f47133f0a85d79a043a671269f0d4fe431eeb63f52a739591e91b", - "blockNumber": "0x2d4c", - "transactionHash": "0x575ff7e2398f92ca2187253793a7cfbd05eefc1cb6768ecde1940d508157d3e8", - "transactionIndex": "0x1", - "logIndex": "0x0", - "removed": false - } - ], - "logsBloom": "0x00000000004000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000004000000000000000000400000004000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x575ff7e2398f92ca2187253793a7cfbd05eefc1cb6768ecde1940d508157d3e8", - "transactionIndex": "0x1", - "blockHash": "0xf399ccba385f47133f0a85d79a043a671269f0d4fe431eeb63f52a739591e91b", - "blockNumber": "0x2d4c", - "gasUsed": "0x3098d4", - "effectiveGasPrice": "0x5f5e100", - "from": "0xa272c14931e725d5cdb30f87af77cf5ce3d20b32", - "to": null, - "contractAddress": "0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f", - "gasUsedForL1": "0x166361", - "l1BlockNumber": "0x6affff" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1730752044, - "chain": 13505, - "commit": "0131198" -} \ No newline at end of file diff --git a/contracts/broadcast/Raffle.s.sol/13505/run-latest.json b/contracts/broadcast/Raffle.s.sol/13505/run-latest.json deleted file mode 100644 index 2324005..0000000 --- a/contracts/broadcast/Raffle.s.sol/13505/run-latest.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x575ff7e2398f92ca2187253793a7cfbd05eefc1cb6768ecde1940d508157d3e8", - "transactionType": "CREATE", - "contractName": "Raffle", - "contractAddress": "0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f", - "function": null, - "arguments": [ - "0xa272C14931E725D5cDB30f87Af77CF5Ce3d20B32", - "0xAa64FA67856f2C89d6456595bc21418237f78024", - "0x435B8E93E10B9038267A374d8794b294DEB60B5E", - "0x00a5af73f52b0d0d2a00b532542455faa5dc61f5ac9e46f4c592a17c95fec9db", - "0x8d180A75fAc0De59BB1e833fc3838EE026a53aC5" - ], - "transaction": { - "from": "0xa272c14931e725d5cdb30f87af77cf5ce3d20b32", - "gas": "0xa3c0d34", - "value": "0x0", - "input": "0x61016060405234801561001157600080fd5b5060405161213d38038061213d8339810160408190526100309161031e565b604080518082018252600c81526b47616c786520526166666c6560a01b602080830191909152825180840190935260058352640312e302e360dc1b9083015290866001600160a01b0381166100a057604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100a981610225565b506001805460ff60a01b191690556100c2826002610241565b610120526100d1816003610241565b61014052815160208084019190912060e052815190820120610100524660a05261015e60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03851661018e5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0384166101b55760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383166101dc5760405163e6c4247b60e01b815260040160405180910390fd5b600480546001600160a01b039586166001600160a01b0319918216179091556007805494861694821694909417909355600991909155600880549190931691161790555061054b565b600180546001600160a01b031916905561023e81610274565b50565b600060208351101561025d57610256836102c4565b905061026e565b81610268848261041b565b5060ff90505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080829050601f815111156102ef578260405163305a27a960e01b815260040161009791906104d9565b80516102fa82610527565b179392505050565b80516001600160a01b038116811461031957600080fd5b919050565b600080600080600060a0868803121561033657600080fd5b61033f86610302565b945061034d60208701610302565b935061035b60408701610302565b92506060860151915061037060808701610302565b90509295509295909350565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806103a657607f821691505b6020821081036103c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561041657806000526020600020601f840160051c810160208510156103f35750805b601f840160051c820191505b8181101561041357600081556001016103ff565b50505b505050565b81516001600160401b038111156104345761043461037c565b610448816104428454610392565b846103cc565b6020601f82116001811461047c57600083156104645750848201515b600019600385901b1c1916600184901b178455610413565b600084815260208120601f198516915b828110156104ac578785015182556020948501946001909201910161048c565b50848210156104ca5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b8181101561050757602081860181015160408684010152016104ea565b506000604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156103c65760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611b986105a56000396000610e1d01526000610deb0152600061123c015260006112140152600061116f01526000611199015260006111c30152611b986000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638456cb59116100b8578063c69b0eb11161007c578063c69b0eb11461028a578063c8cbf5e3146102a1578063d131c722146102b4578063d74e4ca8146102c7578063e30c3978146102da578063f2fde38b146102eb57600080fd5b80638456cb591461023057806384b0196e1461023857806388c84146146102535780638da5cb5b14610266578063972ccdaf1461027757600080fd5b806349f86f341161010a57806349f86f34146101ba5780635437988d146101dc5780635c975abb146101ef5780636c19e7831461020d578063715018a61461022057806379ba50971461022857600080fd5b806309c21de014610147578063238ac933146101775780632b7ac3f31461018a5780632ce7db681461019d5780633f4ba83a146101b2575b600080fd5b60085461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60045461015a906001600160a01b031681565b60075461015a906001600160a01b031681565b6101b06101ab36600461148e565b6102fe565b005b6101b061035b565b6101cd6101c83660046114b7565b61036d565b60405161016e93929190611520565b6101b06101ea36600461148e565b610490565b600154600160a01b900460ff165b604051901515815260200161016e565b6101b061021b36600461148e565b61050d565b6101b061058a565b6101b061059c565b6101b06105e5565b6102406105f5565b60405161016e9796959493929190611585565b6101b061026136600461167a565b61063b565b6000546001600160a01b031661015a565b6101b06102853660046114b7565b61088c565b61029360095481565b60405190815260200161016e565b6101b06102af3660046116de565b6108c9565b6101b06102c2366004611750565b610ab2565b6101fd6102d53660046114b7565b610c70565b6001546001600160a01b031661015a565b6101b06102f936600461148e565b610c95565b610306610d06565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f0bf1c7001241496ed737646ad58bc2d42d5c086ee9df98ab228601bb47110c7f906020015b60405180910390a150565b610363610d06565b61036b610d33565b565b604080516080810182526000808252602082018190529181018290526060808201526000838152600660209081526040808320805482516080810184526001830180546001600160401b038082168452600160401b9182900416968301969096526002840154948201949094526003830180549590920460ff16975091939192916060840191906103fd906117b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610429906117b9565b80156104765780601f1061044b57610100808354040283529160200191610476565b820191906000526020600020905b81548152906001019060200180831161045957829003601f168201915b505050505081525050925080600701549150509193909250565b610498610d06565b6001600160a01b0381166104bf5760405163e6c4247b60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527fd24015cc99cc1700cafca3042840a1d8ac1e3964fd2e0e37ea29c654056ee32790602001610350565b610515610d06565b6001600160a01b03811661053c5760405163e6c4247b60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5553331329228fbd4123164423717a4a7539f6dfa1c3279a923b98fd681a6c7390602001610350565b610592610d06565b61036b6000610d88565b60015433906001600160a01b031681146105d95760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6105e281610d88565b50565b6105ed610d06565b61036b610da1565b600060608060008060006060610609610de4565b610611610e16565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6001600160401b038085166000908152600660205260408120805490921690036106785760405163192dfdd160e11b815260040160405180910390fd5b8054600160401b900460ff166106a157604051630bb6646b60e01b815260040160405180910390fd5b6002810154156106c457604051631f50e6a960e31b815260040160405180910390fd5b60006106da6106d38787610e43565b8585610eb9565b9050806106fa57604051638baa579f60e01b815260040160405180910390fd5b60085460405163167ef5fb60e01b81526001600160401b03871660048201526000916001600160a01b03169063167ef5fb90602401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107749190810190611861565b80519091506001600160401b0316158061079057506040810151155b8061079e5750606081015151155b156107bf57604051600162f485e960e01b0319815260040160405180910390fd5b805160018401805460208401516001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff19909216931692909217919091178155604082015160028501556060820151829190600386019061081f90826119aa565b5050835468ff00000000000000001916845550805160408083015181516001600160401b03808c1682529093166020840152908201527f1dbc60586a945ceca44922ef613ca23dc725b0fd96c644af43119d1876eca608906060015b60405180910390a150505050505050565b610894610d06565b60098190556040518181527f127f2989a02817cf91f825d7e0fbbf2799274632f070f40be967d57c923acbda90602001610350565b6108d1610f1a565b846001600160401b03166000036108fb57604051630316876760e51b815260040160405180910390fd5b8360000361091c5760405163e6c4247b60e01b815260040160405180910390fd5b61092e836001600160401b0316610c70565b156109575760405163cb6d85c760e01b81526001600160401b03841660048201526024016105d0565b600061096e610967878787610f45565b8484610eb9565b90508061098e57604051638baa579f60e01b815260040160405180910390fd5b6001600160401b038087166000908152600660205260408120805490921690036109d857805468ffffffffffffffffff19166001600160401b03881617600160401b178155610a06565b8054600160401b900460ff161515600003610a0657604051630bb6646b60e01b815260040160405180910390fd5b66ffffffffffffff600886901c1660009081526005602052604090208054600160ff88161b179055600581018054906000610a4083611a68565b909155505060058101546001600160a01b03871660009081526004830160209081526040918290209290925580516001600160401b03808b168252928101899052918716908201527fece2c1234de057a0591354387df3163753be647210cd94802ddaa85b27de2f329060600161087b565b610aba610f1a565b6001600160401b03808616600090815260066020526040812080549092169003610af75760405163192dfdd160e11b815260040160405180910390fd5b8054600160401b900460ff1615610b215760405163aa43d67560e01b815260040160405180910390fd5b600781015415610b44576040516329c6f95960e21b815260040160405180910390fd5b6000808080610b55888a018a611aa8565b935093509350935084600501548463ffffffff16141580610b7a575060028501548214155b15610b97576040516227b15560e01b815260040160405180910390fd5b60075460095460405163020a49e360e51b81526001600160a01b03909216916341493c6091610bd0918d908d908d908d90600401611b13565b60006040518083038186803b158015610be857600080fd5b505afa158015610bfc573d6000803e3d6000fd5b5050505060078501819055604080516001600160401b038c16815263ffffffff8681166020830152851681830152606081018490526080810183905290517fa7e58d47fffa9ed45ed22db8f05e0f79a19f861b3d5fbebf5dfc52441f98996f9181900360a00190a150505050505050505050565b600881901c600090815260056020526040812054600160ff84161b1615155b92915050565b610c9d610d06565b600180546001600160a01b0383166001600160a01b03199091168117909155610cce6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b0316331461036b5760405163118cdaa760e01b81523360048201526024016105d0565b610d3b610fa7565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556105e281610fd1565b610da9610f1a565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d6b3390565b6060610e117f00000000000000000000000000000000000000000000000000000000000000006002611021565b905090565b6060610e117f00000000000000000000000000000000000000000000000000000000000000006003611021565b6000610eb27f9ee15f3177a8002049bb047179bf1437f7b11bc9bf540f929a08abdb85a2667b8484604051602001610e97939291909283526001600160401b03918216602084015216604082015260600190565b604051602081830303815290604052805190602001206110cc565b9392505050565b600454604080516020601f85018190048102820181019092528381526000926001600160a01b031691610f0891879187908790819084018382808284376000920191909152506110f992505050565b6001600160a01b031614949350505050565b600154600160a01b900460ff161561036b5760405163d93c066560e01b815260040160405180910390fd5b604080517f60ef7d47aba3043d09a3d757cf74f00f6a5d51f70f7beede65b01b06c9af5ab960208201526001600160401b0380861692820192909252606081018490529082166080820152600090610f9f9060a001610e97565b949350505050565b600154600160a01b900460ff1661036b57604051638dfc202b60e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060ff831461103b5761103483611123565b9050610c8f565b818054611047906117b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611073906117b9565b80156110c05780601f10611095576101008083540402835291602001916110c0565b820191906000526020600020905b8154815290600101906020018083116110a357829003601f168201915b50505050509050610c8f565b6000610c8f6110d9611162565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080611109868661128d565b92509250925061111982826112da565b5090949350505050565b6060600061113083611397565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156111bb57507f000000000000000000000000000000000000000000000000000000000000000046145b156111e557507f000000000000000000000000000000000000000000000000000000000000000090565b610e11604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600080600083516041036112c75760208401516040850151606086015160001a6112b9888285856113bf565b9550955095505050506112d3565b50508151600091506002905b9250925092565b60008260038111156112ee576112ee611b4c565b036112f7575050565b600182600381111561130b5761130b611b4c565b036113295760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561133d5761133d611b4c565b0361135e5760405163fce698f760e01b8152600481018290526024016105d0565b600382600381111561137257611372611b4c565b03611393576040516335e2f38360e21b8152600481018290526024016105d0565b5050565b600060ff8216601f811115610c8f57604051632cd44ac360e21b815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113fa5750600091506003905082611484565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561144e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661147a57506000925060019150829050611484565b9250600091508190505b9450945094915050565b6000602082840312156114a057600080fd5b81356001600160a01b0381168114610eb257600080fd5b6000602082840312156114c957600080fd5b5035919050565b60005b838110156114eb5781810151838201526020016114d3565b50506000910152565b6000815180845261150c8160208601602086016114d0565b601f01601f19169290920160200192915050565b8315158152606060208201526001600160401b0383511660608201526001600160401b036020840151166080820152604083015160a082015260006060840151608060c084015261157460e08401826114f4565b915050826040830152949350505050565b60ff60f81b8816815260e0602082015260006115a460e08301896114f4565b82810360408401526115b681896114f4565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561160c5783518352602093840193909201916001016115ee565b50909b9a5050505050505050505050565b6001600160401b03811681146105e257600080fd5b60008083601f84011261164457600080fd5b5081356001600160401b0381111561165b57600080fd5b60208301915083602082850101111561167357600080fd5b9250929050565b6000806000806060858703121561169057600080fd5b843561169b8161161d565b935060208501356116ab8161161d565b925060408501356001600160401b038111156116c657600080fd5b6116d287828801611632565b95989497509550505050565b6000806000806000608086880312156116f657600080fd5b85356117018161161d565b94506020860135935060408601356117188161161d565b925060608601356001600160401b0381111561173357600080fd5b61173f88828901611632565b969995985093965092949392505050565b60008060008060006060868803121561176857600080fd5b85356117738161161d565b945060208601356001600160401b0381111561178e57600080fd5b61179a88828901611632565b90955093505060408601356001600160401b0381111561173357600080fd5b600181811c908216806117cd57607f821691505b6020821081036117ed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561182b5761182b6117f3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611859576118596117f3565b604052919050565b60006020828403121561187357600080fd5b81516001600160401b0381111561188957600080fd5b82016080818503121561189b57600080fd5b6118a3611809565b81516118ae8161161d565b815260208201516118be8161161d565b60208201526040828101519082015260608201516001600160401b038111156118e657600080fd5b80830192505084601f8301126118fb57600080fd5b81516001600160401b03811115611914576119146117f3565b611927601f8201601f1916602001611831565b81815286602083860101111561193c57600080fd5b61194d8260208301602087016114d0565b606083015250949350505050565b601f8211156119a557806000526020600020601f840160051c810160208510156119825750805b601f840160051c820191505b818110156119a2576000815560010161198e565b50505b505050565b81516001600160401b038111156119c3576119c36117f3565b6119d7816119d184546117b9565b8461195b565b6020601f821160018114611a0b57600083156119f35750848201515b600019600385901b1c1916600184901b1784556119a2565b600084815260208120601f198516915b82811015611a3b5787850151825560209485019460019092019101611a1b565b5084821015611a595786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060018201611a8857634e487b7160e01b600052601160045260246000fd5b5060010190565b803563ffffffff81168114611aa357600080fd5b919050565b60008060008060808587031215611abe57600080fd5b611ac785611a8f565b9350611ad560208601611a8f565b93969395505050506040820135916060013590565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000611b2d606083018688611aea565b8281036040840152611b40818587611aea565b98975050505050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220cda04510981312956bcefa44f9a03828541251807e6a20d598703d8ca17f191564736f6c634300081a0033000000000000000000000000a272c14931e725d5cdb30f87af77cf5ce3d20b32000000000000000000000000aa64fa67856f2c89d6456595bc21418237f78024000000000000000000000000435b8e93e10b9038267a374d8794b294deb60b5e00a5af73f52b0d0d2a00b532542455faa5dc61f5ac9e46f4c592a17c95fec9db0000000000000000000000008d180a75fac0de59bb1e833fc3838ee026a53ac5", - "nonce": "0x2c51", - "chainId": "0x34c1" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x3098d4", - "logs": [ - { - "address": "0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000a272c14931e725d5cdb30f87af77cf5ce3d20b32" - ], - "data": "0x", - "blockHash": "0xf399ccba385f47133f0a85d79a043a671269f0d4fe431eeb63f52a739591e91b", - "blockNumber": "0x2d4c", - "transactionHash": "0x575ff7e2398f92ca2187253793a7cfbd05eefc1cb6768ecde1940d508157d3e8", - "transactionIndex": "0x1", - "logIndex": "0x0", - "removed": false - } - ], - "logsBloom": "0x00000000004000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000004000000000000000000400000004000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x575ff7e2398f92ca2187253793a7cfbd05eefc1cb6768ecde1940d508157d3e8", - "transactionIndex": "0x1", - "blockHash": "0xf399ccba385f47133f0a85d79a043a671269f0d4fe431eeb63f52a739591e91b", - "blockNumber": "0x2d4c", - "gasUsed": "0x3098d4", - "effectiveGasPrice": "0x5f5e100", - "from": "0xa272c14931e725d5cdb30f87af77cf5ce3d20b32", - "to": null, - "contractAddress": "0xc0e9eb9299bd2349ca0bb711b4ba4a1d43b1524f", - "gasUsedForL1": "0x166361", - "l1BlockNumber": "0x6affff" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1730752044, - "chain": 13505, - "commit": "0131198" -} \ No newline at end of file diff --git a/contracts/deployments/13505.json b/contracts/deployments/13505.json new file mode 100644 index 0000000..b6f74b2 --- /dev/null +++ b/contracts/deployments/13505.json @@ -0,0 +1,3 @@ +{ + "RAFFLE": "0x4349F1d73237c8Eb43FC04A16CFf70261D0F1343" +} \ No newline at end of file diff --git a/contracts/script/deploy/Raffle.s.sol b/contracts/script/deploy/Raffle.s.sol index 53c9e28..1d1813c 100644 --- a/contracts/script/deploy/Raffle.s.sol +++ b/contracts/script/deploy/Raffle.s.sol @@ -6,6 +6,8 @@ import {BaseScript} from "../utils/Base.s.sol"; import {Raffle} from "../../src/Raffle.sol"; contract RaffleScript is BaseScript { + string internal constant KEY = "RAFFLE"; + function run() external chain broadcaster { bytes32 CREATE2_SALT = vm.envBytes32("CREATE2_SALT"); address owner = vm.envAddress("OWNER"); @@ -23,5 +25,8 @@ contract RaffleScript is BaseScript { Raffle raffle = new Raffle{salt: CREATE2_SALT}(owner, signer, verifier, vkey, drandOracle); console.log("Raffle deployed at:", address(raffle)); + + // Write address + writeAddress(KEY, address(raffle)); } } diff --git a/contracts/script/utils/Base.s.sol b/contracts/script/utils/Base.s.sol index 11f2d93..449510e 100644 --- a/contracts/script/utils/Base.s.sol +++ b/contracts/script/utils/Base.s.sol @@ -32,4 +32,87 @@ abstract contract BaseScript is Script { _; } + + /// @notice Returns the directory of the deployments. + function directory() internal view returns (string memory) { + return string.concat(vm.projectRoot(), "/deployments/"); + } + + /// @notice Returns the file name for the current chain. + function file() internal view returns (string memory) { + return string.concat(vm.toString(block.chainid), ".json"); + } + + /// @notice Returns the path to the deployments file for the current chain. + function path() internal view returns (string memory) { + return string.concat(directory(), file()); + } + + /// @notice Returns the deployments file contents for the current chain. + function deployments() internal view returns (string memory) { + return vm.readFile(path()); + } + + /// @notice Ensures that the deployments file exists for the current chain. + function ensureExists() internal { + if (!vm.exists(directory())) { + vm.createDir(directory(), true); + } + + if (!vm.exists(path())) { + vm.writeFile(path(), "{}"); + } + } + + /// @notice Tries to read an address from the env. + function envAddress(string memory key) internal view returns (address) { + return vm.envOr(key, address(0)); + } + + /// @notice Tries to read a bytes32 from the env. + function envBytes32(string memory key) internal view returns (bytes32) { + return vm.envOr(key, bytes32(0)); + } + + /// @notice Tries to read an address from the env first, then from the deployments file for the current chain. + function readAddress(string memory key) internal view returns (address) { + if (envAddress(key) != address(0)) { + return envAddress(key); + } + return deployments().readAddress(string.concat(".", key)); + } + + /// @notice Tries to read a bytes32 from the env first, then from the deployments file for the current chain. + function readBytes32(string memory key) internal view returns (bytes32) { + if (envBytes32(key) != bytes32(0)) { + return envBytes32(key); + } + return deployments().readBytes32(string.concat(".", key)); + } + + /// @notice Writes an address to the deployments file for the current chain. + function writeAddress(string memory key, address value) internal { + ensureExists(); + + if (vm.keyExists(deployments(), string.concat(".", key))) { + vm.writeJson(vm.toString(value), path(), string.concat(".", key)); + } else { + string memory root = "root"; + vm.serializeJson(root, deployments()); + vm.writeJson(vm.serializeAddress(root, key, value), path()); + } + } + + /// @notice Writes a bytes32 to the deployments file for the current chain. + function writeBytes32(string memory key, bytes32 value) internal { + ensureExists(); + + if (vm.keyExists(deployments(), string.concat(".", key))) { + vm.writeJson(vm.toString(value), path(), string.concat(".", key)); + } else { + string memory root = "root"; + vm.serializeJson(root, deployments()); + vm.writeJson(vm.serializeBytes32(root, key, value), path()); + } + } } diff --git a/contracts/src/IRaffle.sol b/contracts/src/IRaffle.sol index 38fcc3e..97be9ee 100644 --- a/contracts/src/IRaffle.sol +++ b/contracts/src/IRaffle.sol @@ -59,7 +59,13 @@ interface IRaffle { function getQuest(uint256 _questID) external view - returns (bool _active, IDrandOracle.Random memory random, bytes32 _merkleRoot); + returns ( + bool _active, + IDrandOracle.Random memory random, + uint256 _participantCount, + uint256 _winnerCount, + bytes32 _merkleRoot + ); function hasParticipated(uint256 _verifyID) external view returns (bool); diff --git a/contracts/src/Raffle.sol b/contracts/src/Raffle.sol index fbcbe23..e4cb22e 100644 --- a/contracts/src/Raffle.sol +++ b/contracts/src/Raffle.sol @@ -236,6 +236,7 @@ contract Raffle is IRaffle, Ownable2Step, Pausable, EIP712 { ISP1Verifier(verifier).verifyProof(vkey, _publicValues, _proofBytes); quest.merkleRoot = merkleRoot; + quest.winnerCount = winnerCount; emit IRaffle.Reveal(_questID, participantCount, winnerCount, randomness, merkleRoot); } @@ -243,12 +244,16 @@ contract Raffle is IRaffle, Ownable2Step, Pausable, EIP712 { function getQuest(uint256 _questID) external view - returns (bool _active, IDrandOracle.Random memory random, bytes32 _merkleRoot) + returns ( + bool _active, + IDrandOracle.Random memory random, + uint256 _participantCount, + uint256 _winnerCount, + bytes32 _merkleRoot + ) { RaffleQuest storage quest = quests[_questID]; - _active = quest.active; - random = quest.random; - _merkleRoot = quest.merkleRoot; + return (quest.active, quest.random, quest.participantCount, quest.winnerCount, quest.merkleRoot); } function hasParticipated(uint256 _verifyID) public view returns (bool) { diff --git a/contracts/test/Raffle.t.sol b/contracts/test/Raffle.t.sol index 723b8e0..0aa89df 100644 --- a/contracts/test/Raffle.t.sol +++ b/contracts/test/Raffle.t.sol @@ -114,9 +114,17 @@ contract RaffleTest is Test { raffle.reveal(questID, fixture.publicValues, fixture.proof); // verify quest state - (bool active, IDrandOracle.Random memory random, bytes32 merkleRoot) = raffle.getQuest(questID); + ( + bool active, + IDrandOracle.Random memory random, + uint256 participantCount, + uint256 winnerCount, + bytes32 merkleRoot + ) = raffle.getQuest(questID); assertEq(random.round, 1); assertEq(random.randomness, fixture.randomness); + assertEq(participantCount, fixture.numParticipants); + assertEq(winnerCount, fixture.numWinners); assertEq(active, false); assertEq(merkleRoot, fixture.merkleRoot); } diff --git a/go/pkg/contract/binding.go b/go/pkg/contract/binding.go index c369714..d0036fc 100644 --- a/go/pkg/contract/binding.go +++ b/go/pkg/contract/binding.go @@ -39,7 +39,7 @@ type IDrandOracleRandom struct { // RaffleMetaData contains all meta data concerning the Raffle contract. var RaffleMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"commitRandomness\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"drandOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuest\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"_active\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"random\",\"type\":\"tuple\",\"internalType\":\"structIDrandOracle.Random\",\"components\":[{\"name\":\"round\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"randomness\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasParticipated\",\"inputs\":[{\"name\":\"_verifyID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"participate\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_user\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_verifyID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"reveal\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_publicValues\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proofBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSigner\",\"inputs\":[{\"name\":\"_signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"signer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vkey\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CommitRandomness\",\"inputs\":[{\"name\":\"questID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"roundID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"randomness\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DrandOracleUpdated\",\"inputs\":[{\"name\":\"drandOracle\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Participate\",\"inputs\":[{\"name\":\"questID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"user\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"verifyID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reveal\",\"inputs\":[{\"name\":\"questID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"participantCount\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"winnerCount\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"randomness\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerUpdated\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VerifierUpdated\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VkeyUpdated\",\"inputs\":[{\"name\":\"vkey\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"IncorrectProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidQuestID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRandomness\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestAlreadyRevealed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestNotExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestRandomnessAlreadyCommitted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestStillActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerifyIdAlreadyUsed\",\"inputs\":[{\"name\":\"verifyId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + ABI: "[{\"type\":\"function\",\"name\":\"commitRandomness\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"drandOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuest\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"_active\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"random\",\"type\":\"tuple\",\"internalType\":\"structIDrandOracle.Random\",\"components\":[{\"name\":\"round\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"randomness\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_participantCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_winnerCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_merkleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasParticipated\",\"inputs\":[{\"name\":\"_verifyID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"participate\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_user\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_verifyID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"reveal\",\"inputs\":[{\"name\":\"_questID\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_publicValues\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proofBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSigner\",\"inputs\":[{\"name\":\"_signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"signer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"vkey\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CommitRandomness\",\"inputs\":[{\"name\":\"questID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"roundID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"randomness\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DrandOracleUpdated\",\"inputs\":[{\"name\":\"drandOracle\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Participate\",\"inputs\":[{\"name\":\"questID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"user\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"verifyID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reveal\",\"inputs\":[{\"name\":\"questID\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"participantCount\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"winnerCount\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"randomness\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"merkleRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerUpdated\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VerifierUpdated\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"VkeyUpdated\",\"inputs\":[{\"name\":\"vkey\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"IncorrectProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidQuestID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRandomness\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestAlreadyRevealed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestNotExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestRandomnessAlreadyCommitted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"QuestStillActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerifyIdAlreadyUsed\",\"inputs\":[{\"name\":\"verifyId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", } // RaffleABI is the input ABI used to generate the binding from. @@ -221,19 +221,23 @@ func (_Raffle *RaffleCallerSession) DrandOracle() (common.Address, error) { // GetQuest is a free data retrieval call binding the contract method 0x49f86f34. // -// Solidity: function getQuest(uint256 _questID) view returns(bool _active, (uint64,uint64,bytes32,bytes) random, bytes32 _merkleRoot) +// Solidity: function getQuest(uint256 _questID) view returns(bool _active, (uint64,uint64,bytes32,bytes) random, uint256 _participantCount, uint256 _winnerCount, bytes32 _merkleRoot) func (_Raffle *RaffleCaller) GetQuest(opts *bind.CallOpts, _questID *big.Int) (struct { - Active bool - Random IDrandOracleRandom - MerkleRoot [32]byte + Active bool + Random IDrandOracleRandom + ParticipantCount *big.Int + WinnerCount *big.Int + MerkleRoot [32]byte }, error) { var out []interface{} err := _Raffle.contract.Call(opts, &out, "getQuest", _questID) outstruct := new(struct { - Active bool - Random IDrandOracleRandom - MerkleRoot [32]byte + Active bool + Random IDrandOracleRandom + ParticipantCount *big.Int + WinnerCount *big.Int + MerkleRoot [32]byte }) if err != nil { return *outstruct, err @@ -241,7 +245,9 @@ func (_Raffle *RaffleCaller) GetQuest(opts *bind.CallOpts, _questID *big.Int) (s outstruct.Active = *abi.ConvertType(out[0], new(bool)).(*bool) outstruct.Random = *abi.ConvertType(out[1], new(IDrandOracleRandom)).(*IDrandOracleRandom) - outstruct.MerkleRoot = *abi.ConvertType(out[2], new([32]byte)).(*[32]byte) + outstruct.ParticipantCount = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.WinnerCount = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.MerkleRoot = *abi.ConvertType(out[4], new([32]byte)).(*[32]byte) return *outstruct, err @@ -249,22 +255,26 @@ func (_Raffle *RaffleCaller) GetQuest(opts *bind.CallOpts, _questID *big.Int) (s // GetQuest is a free data retrieval call binding the contract method 0x49f86f34. // -// Solidity: function getQuest(uint256 _questID) view returns(bool _active, (uint64,uint64,bytes32,bytes) random, bytes32 _merkleRoot) +// Solidity: function getQuest(uint256 _questID) view returns(bool _active, (uint64,uint64,bytes32,bytes) random, uint256 _participantCount, uint256 _winnerCount, bytes32 _merkleRoot) func (_Raffle *RaffleSession) GetQuest(_questID *big.Int) (struct { - Active bool - Random IDrandOracleRandom - MerkleRoot [32]byte + Active bool + Random IDrandOracleRandom + ParticipantCount *big.Int + WinnerCount *big.Int + MerkleRoot [32]byte }, error) { return _Raffle.Contract.GetQuest(&_Raffle.CallOpts, _questID) } // GetQuest is a free data retrieval call binding the contract method 0x49f86f34. // -// Solidity: function getQuest(uint256 _questID) view returns(bool _active, (uint64,uint64,bytes32,bytes) random, bytes32 _merkleRoot) +// Solidity: function getQuest(uint256 _questID) view returns(bool _active, (uint64,uint64,bytes32,bytes) random, uint256 _participantCount, uint256 _winnerCount, bytes32 _merkleRoot) func (_Raffle *RaffleCallerSession) GetQuest(_questID *big.Int) (struct { - Active bool - Random IDrandOracleRandom - MerkleRoot [32]byte + Active bool + Random IDrandOracleRandom + ParticipantCount *big.Int + WinnerCount *big.Int + MerkleRoot [32]byte }, error) { return _Raffle.Contract.GetQuest(&_Raffle.CallOpts, _questID) }