diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 34a4a52..ca11881 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,10 +27,10 @@ jobs: run: | forge --version - - name: Run Forge fmt - run: | - forge fmt --check - id: fmt + # - name: Run Forge fmt + # run: | + # forge fmt --check + # id: fmt - name: Run Forge build run: | diff --git a/README.md b/README.md index 9265b45..20a8976 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,36 @@ +## ETHER GUILD PROTOCOL + +Setup .env variables. +``` +DEPLOYER_PRIVATE_KEY=0x1234 +SEPOLIA_RPC_URL='https://...` +``` + +## Smart Contracts + +- **src/QuestFactory**: msg.sender as Admin, allows anyone to create New Quest (factory admin will persist to Quest) +- **src/QuestDonation**: contructor params: @admin, @target, @creator + +### Quest Donation +- MAX_DONATION(hardcoded): $5000/ year +- Admin Must `allowToken(token, status)` to set `setPriceOracle(token, oracle)` +- For Native ETH address(0) is used. + + +## Running the Script + +To run the deployment script, use the following command: +```shell +$ forge script script/Deploy.s.sol --rpc-url sepolia +``` + +## Testing Smart Contracts + +To test the smart contracts, execute: +```shell +$ forge test +``` + ## Foundry **Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.** diff --git a/broadcast/1.Deploy.s.sol/11155111/run-1739055178.json b/broadcast/1.Deploy.s.sol/11155111/run-1739055178.json new file mode 100644 index 0000000..df62383 --- /dev/null +++ b/broadcast/1.Deploy.s.sol/11155111/run-1739055178.json @@ -0,0 +1,261 @@ +{ + "transactions": [ + { + "hash": "0xde6fee9a3053114bf4eb779a9bb871a359c0d6b6ff7178451d5b1c8a5322531b", + "transactionType": "CREATE", + "contractName": "QuestFactory", + "contractAddress": "0xdc191c431636ce6fc3297fb05f97668e59490945", + "function": null, + "arguments": null, + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "gas": "0x39ae89", + "value": "0x0", + "input": "0x6080604052346200002d5762000014620000d4565b6200001e62000033565b613345620000e3823961334590f35b62000039565b60405190565b5f80fd5b5f1b90565b906200005560018060a01b03916200003d565b9181191691161790565b60018060a01b031690565b90565b62000086620000806200008c926200005f565b6200006a565b6200005f565b90565b6200009a906200006d565b90565b620000a8906200008f565b90565b90565b90620000c8620000c2620000d0926200009d565b620000ab565b825462000042565b9055565b620000e0335f620000ae565b56fe6080604052600436101562000015575b6200042c565b620000215f356200007a565b8063874af06214620000745780639a39cb37146200006e578063a9a0166e1462000068578063e085f98014620000625763f851a440036200000f57620003ed565b6200036b565b62000219565b620001b2565b62000158565b60e01c90565b60405190565b5f80fd5b5f80fd5b90565b6200009c816200008e565b03620000a457565b5f80fd5b90503590620000b78262000091565b565b90602082820312620000d557620000d2915f01620000a8565b90565b6200008a565b60018060a01b031690565b620000f190620000db565b90565b620000ff90620000e6565b9052565b6200010e906200008e565b9052565b6200014e62000156946200014360609498979562000138608086019a5f870190620000f4565b602085019062000103565b6040830190620000f4565b019062000103565b565b346200019557620001916200017962000173366004620000b9565b62000608565b906200018794929462000080565b9485948562000112565b0390f35b62000086565b9190620001b0905f60208501940190620000f4565b565b34620001eb57620001e7620001d3620001cd366004620000b9565b62000929565b620001dd62000080565b918291826200019b565b0390f35b62000086565b5f910312620001fc57565b6200008a565b919062000217905f6020850194019062000103565b565b3462000252576200022c366004620001f1565b6200024e6200023a62000a6d565b6200024462000080565b9182918262000202565b0390f35b62000086565b634e487b7160e01b5f52603260045260245ffd5b5490565b5f5260205f2090565b62000284816200026c565b821015620002a1576200029960049162000270565b910201905f90565b62000258565b5f1c90565b60018060a01b031690565b620002c6620002cc91620002a7565b620002ac565b90565b620002db9054620002b7565b90565b90565b620002f0620002f691620002a7565b620002de565b90565b620003059054620002e1565b90565b60019062000316826200026c565b8110156200036757620003299162000279565b5090620003385f8301620002cf565b916200034760018201620002f9565b916200036460036200035c60028501620002cf565b9301620002f9565b90565b5f80fd5b34620003a857620003a46200038c62000386366004620000b9565b62000308565b906200039a94929462000080565b9485948562000112565b0390f35b62000086565b1c90565b620003c5906008620003cb9302620003ae565b620002ac565b90565b90620003db9154620003b2565b90565b620003ea5f80620003ce565b90565b34620004265762000400366004620001f1565b620004226200040e620003de565b6200041862000080565b918291826200019b565b0390f35b62000086565b5f80fd5b5f90565b5f90565b60209181520190565b5f7f517565737420696e646578206f7574206f6620626f756e647300000000000000910152565b62000477601960209262000438565b620004828162000441565b0190565b6200049d9060208101905f81830391015262000468565b90565b15620004a857565b620004b262000080565b62461bcd60e51b815280620004ca6004820162000486565b0390fd5b90620004da90620000e6565b9052565b90620004ea906200008e565b9052565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906200051890620004ee565b810190811067ffffffffffffffff8211176200053357604052565b620004f8565b90620005506200054862000080565b92836200050c565b565b6200055e608062000539565b90565b90620005da620005d060036200057662000552565b9462000591620005885f8301620002cf565b5f8801620004ce565b620005ad620005a360018301620002f9565b60208801620004de565b620005c9620005bf60028301620002cf565b60408801620004ce565b01620002f9565b60608401620004de565b565b620005e79062000561565b90565b620005f69051620000e6565b90565b6200060590516200008e565b90565b6200067262000679916200061b62000430565b506200062662000434565b506200063162000430565b506200063c62000434565b506200066a81620006636200065c6200065660016200026c565b6200008e565b916200008e565b10620004a0565b600162000279565b50620005dc565b620006865f8201620005ea565b6200069460208301620005f9565b92620006b16060620006a960408601620005ea565b9401620005f9565b9193929190565b604090620006e6620006ee9496959396620006db60608401985f850190620000f4565b602083019062000103565b0190620000f4565b565b620006fa62000080565b3d5f823e3d90fd5b90565b90565b620007216200071b6200072792620000db565b62000705565b620000db565b90565b620007359062000708565b90565b62000743906200072a565b90565b62000752608062000539565b90565b5f5260205f2090565b5490565b6200076d816200075e565b8210156200078a576200078260049162000755565b910201905f90565b62000258565b634e487b7160e01b5f525f60045260245ffd5b5f1b90565b90620007bb60018060a01b0391620007a3565b9181191691161790565b620007d0906200072a565b90565b90565b90620007f0620007ea620007f892620007c5565b620007d3565b8254620007a8565b9055565b906200080a5f1991620007a3565b9181191691161790565b6200082d6200082762000833926200008e565b62000705565b6200008e565b90565b90565b90620008536200084d6200085b9262000814565b62000836565b8254620007fc565b9055565b90620008cb60606003620008d294620008885f8201620008815f8801620005ea565b90620007d6565b620008a5600182016200089e60208801620005f9565b9062000839565b620008c260028201620008bb60408801620005ea565b90620007d6565b019201620005f9565b9062000839565b565b9190620008e857620008e6916200085f565b565b62000790565b90815491680100000000000000008310156200092357826200091a916001620009219501815562000762565b90620008d4565b565b620004f8565b6200093362000430565b506200093f5f620002cf565b819033916200094d62000080565b9261288884019184831067ffffffffffffffff84111762000a675784936200097e9361288862000a888739620006b8565b03905ff090811562000a6157620009f762000a5e9291620009a0600162000702565b620009f1620009af8562000738565b92620009e733620009dd4293620009d3620009c962000746565b985f8a01620004ce565b60208801620004de565b60408601620004ce565b60608401620004de565b620008ee565b62000a028162000738565b33429162000a5562000a4062000a397f01d8320e268685ac2181caee70ccf6f0b9a42f977e68559a40838f40b97bd31793620007c5565b93620007c5565b9362000a4b62000080565b9182918262000202565b0390a362000738565b90565b620006f0565b620004f8565b62000a7762000434565b5062000a8460016200026c565b9056fe60806040523462000038576200001f620000186200015c565b9162000478565b620000296200003e565b61222a6200065e823961222a90f35b62000044565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90620000729062000048565b810190811060018060401b038211176200008b57604052565b62000052565b90620000a8620000a06200003e565b928362000066565b565b5f80fd5b60018060a01b031690565b620000c490620000ae565b90565b620000d281620000b9565b03620000da57565b5f80fd5b90505190620000ed82620000c7565b565b90565b620000fd81620000ef565b036200010557565b5f80fd5b905051906200011882620000f2565b565b909160608284031262000156576200015362000139845f8501620000de565b9362000149816020860162000109565b93604001620000de565b90565b620000aa565b6200017f6200288880380380620001738162000091565b9283398101906200011a565b909192565b90565b90565b620001a36200019d620001a99262000184565b62000187565b620000ae565b90565b620001b7906200018a565b90565b60209181520190565b5f7f496e76616c69642061646d696e20616464726573730000000000000000000000910152565b620001f96015602092620001ba565b6200020481620001c3565b0190565b6200021f9060208101905f818303910152620001ea565b90565b156200022a57565b620002346200003e565b62461bcd60e51b8152806200024c6004820162000208565b0390fd5b5f7f496e76616c69642063726561746f722061646472657373000000000000000000910152565b620002866017602092620001ba565b620002918162000250565b0190565b620002ac9060208101905f81830391015262000277565b90565b15620002b757565b620002c16200003e565b62461bcd60e51b815280620002d96004820162000295565b0390fd5b620002f6620002f0620002fc9262000184565b62000187565b620000ef565b90565b5f7f496e76616c69642074617267657420616d6f756e740000000000000000000000910152565b620003356015602092620001ba565b6200034081620002ff565b0190565b6200035b9060208101905f81830391015262000326565b90565b156200036657565b620003706200003e565b62461bcd60e51b815280620003886004820162000344565b0390fd5b5f1b90565b90620003a460018060a01b03916200038c565b9181191691161790565b620003c7620003c1620003cd92620000ae565b62000187565b620000ae565b90565b620003db90620003ae565b90565b620003e990620003d0565b90565b90565b9062000409620004036200041192620003de565b620003ec565b825462000391565b9055565b90620004235f19916200038c565b9181191691161790565b62000446620004406200044c92620000ef565b62000187565b620000ef565b90565b90565b906200046c6200046662000474926200042d565b6200044f565b825462000415565b9055565b620005269291620005166200051e9262000492816200054e565b620004bf81620004b7620004b0620004aa5f620001ac565b620000b9565b91620000b9565b141562000222565b620004ec85620004e4620004dd620004d75f620001ac565b620000b9565b91620000b9565b1415620002af565b6200050e8362000507620005005f620002dd565b91620000ef565b116200035e565b6001620003ef565b600262000452565b6003620003ef565b565b6200053390620000b9565b9052565b91906200054c905f6020850194019062000528565b565b806200056f62000568620005625f620001ac565b620000b9565b91620000b9565b1462000582576200058090620005f2565b565b620005b2620005915f620001ac565b6200059b6200003e565b918291631e4fbdf760e01b83526004830162000537565b0390fd5b5f1c90565b60018060a01b031690565b620005d5620005db91620005b6565b620005bb565b90565b620005ea9054620005c6565b90565b5f0190565b620005fd5f620005de565b62000609825f620003ef565b90620006416200063a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003de565b91620003de565b916200064c6200003e565b806200065881620005ed565b0390a356fe60806040526004361015610013575b6108c5565b61001d5f3561012c565b8063013745181461012757806302d05d3f1461012257806328031cf71461011d5780632b0d1cda146101185780634857317e146101135780635bc35ae81461010e57806367a74ddc14610109578063715018a61461010457806383914540146100ff5780638b4c40b0146100fa5780638da5cb5b146100f5578063953b8fb8146100f0578063e744092e146100eb578063ef99fb02146100e6578063f2fde38b146100e1578063f3fef3a3146100dc5763f851a4400361000e57610890565b61084d565b61081a565b6107e6565b610761565b6106af565b61066b565b610642565b61060d565b6105a0565b61056c565b61050b565b61047c565b610407565b6103b9565b610307565b610261565b60e01c90565b60405190565b5f80fd5b5f80fd5b60018060a01b031690565b61015490610140565b90565b6101608161014b565b0361016757565b5f80fd5b9050359061017882610157565b565b9060208282031261019357610190915f0161016b565b90565b61013c565b90565b6101af6101aa6101b492610140565b610198565b610140565b90565b6101c09061019b565b90565b6101cc906101b7565b90565b906101d9906101c3565b5f5260205260405f2090565b1c90565b60018060a01b031690565b61020490600861020993026101e5565b6101e9565b90565b9061021791546101f4565b90565b6102309061022b6004915f926101cf565b61020c565b90565b61023c906101b7565b90565b61024890610233565b9052565b919061025f905f6020850194019061023f565b565b346102915761028d61027c61027736600461017a565b61021a565b610284610132565b9182918261024c565b0390f35b610138565b5f9103126102a057565b61013c565b60018060a01b031690565b6102c09060086102c593026101e5565b6102a5565b90565b906102d391546102b0565b90565b6102e260035f906102c8565b90565b6102ee9061014b565b9052565b9190610305905f602085019401906102e5565b565b3461033757610317366004610296565b6103336103226102d6565b61032a610132565b918291826102f2565b0390f35b610138565b90610346906101c3565b5f5260205260405f2090565b90565b61036590600861036a93026101e5565b610352565b90565b906103789154610355565b90565b6103919061038c6006915f9261033c565b61036d565b90565b90565b6103a090610394565b9052565b91906103b7905f60208501940190610397565b565b346103e9576103e56103d46103cf36600461017a565b61037b565b6103dc610132565b918291826103a4565b0390f35b610138565b610404906103ff6005915f9261033c565b61036d565b90565b346104375761043361042261041d36600461017a565b6103ee565b61042a610132565b918291826103a4565b0390f35b610138565b90565b61045361044e6104589261043c565b610198565b610394565b90565b61046e69010f0cf064dd5920000061043f565b90565b61047961045b565b90565b346104ac5761048c366004610296565b6104a8610497610471565b61049f610132565b918291826103a4565b0390f35b610138565b151590565b6104bf816104b1565b036104c657565b5f80fd5b905035906104d7826104b6565b565b919060408382031261050157806104f56104fe925f860161016b565b936020016104ca565b90565b61013c565b5f0190565b3461053a5761052461051e3660046104d9565b9061099b565b61052c610132565b8061053681610506565b0390f35b610138565b9190604083820312610567578061055b610564925f860161016b565b9360200161016b565b90565b61013c565b3461059b5761058561057f36600461053f565b90610c25565b61058d610132565b8061059781610506565b0390f35b610138565b346105ce576105b0366004610296565b6105b8610c56565b6105c0610132565b806105ca81610506565b0390f35b610138565b90565b6105ea6105e56105ef926105d3565b610198565b610394565b90565b6105ff6301e133806105d6565b90565b61060a6105f2565b90565b3461063d5761061d366004610296565b610639610628610602565b610630610132565b918291826103a4565b0390f35b610138565b61064d366004610296565b610655611759565b61065d610132565b8061066781610506565b0390f35b3461069b5761067b366004610296565b610697610686611788565b61068e610132565b918291826102f2565b0390f35b610138565b6106ac60025f9061036d565b90565b346106df576106bf366004610296565b6106db6106ca6106a0565b6106d2610132565b918291826103a4565b0390f35b610138565b906106ee906101c3565b5f5260205260405f2090565b60ff1690565b61071090600861071593026101e5565b6106fa565b90565b906107239154610700565b90565b61073c906107376007915f926106e4565b610718565b90565b610748906104b1565b9052565b919061075f905f6020850194019061073f565b565b346107915761078d61077c61077736600461017a565b610726565b610784610132565b9182918261074c565b0390f35b610138565b61079f81610394565b036107a657565b5f80fd5b905035906107b782610796565b565b91906040838203126107e157806107d56107de925f860161016b565b936020016107aa565b90565b61013c565b34610815576107ff6107f93660046107b9565b90611cf3565b610807610132565b8061081181610506565b0390f35b610138565b346108485761083261082d36600461017a565b611d6b565b61083a610132565b8061084481610506565b0390f35b610138565b3461087c576108666108603660046107b9565b90611e1c565b61086e610132565b8061087881610506565b0390f35b610138565b61088d60015f906102c8565b90565b346108c0576108a0366004610296565b6108bc6108ab610881565b6108b3610132565b918291826102f2565b0390f35b610138565b5f80fd5b906108db916108d6611f06565b61094a565b565b5f1b90565b906108ee60ff916108dd565b9181191691161790565b610901906104b1565b90565b90565b9061091c610917610923926108f8565b610904565b82546108e2565b9055565b91602061094892949361094160408201965f8301906102e5565b019061073f565b565b61095f8261095a600784906106e4565b610907565b907f9a8e30a8658b96ab3f034ce4bac6806278b4aee5880ccdd1ac35e4ed5bb31d239161099661098d610132565b92839283610927565b0390a1565b906109a5916108c9565b565b906109b9916109b4611f06565b610b7b565b565b5f1c90565b6109cc6109d1916109bb565b6106fa565b90565b6109de90546109c0565b90565b60209181520190565b5f7f546f6b656e206e6f7420616c6c6f776564000000000000000000000000000000910152565b610a1e60116020926109e1565b610a27816109ea565b0190565b610a409060208101905f818303910152610a11565b90565b15610a4a57565b610a52610132565b62461bcd60e51b815280610a6860048201610a2b565b0390fd5b90565b610a83610a7e610a8892610a6c565b610198565b610140565b90565b610a9490610a6f565b90565b5f7f496e76616c6964206f7261636c65206164647265737300000000000000000000910152565b610acb60166020926109e1565b610ad481610a97565b0190565b610aed9060208101905f818303910152610abe565b90565b15610af757565b610aff610132565b62461bcd60e51b815280610b1560048201610ad8565b0390fd5b610b229061019b565b90565b610b2e90610b19565b90565b90610b4260018060a01b03916108dd565b9181191691161790565b610b5590610b19565b90565b90565b90610b70610b6b610b7792610b4c565b610b58565b8254610b31565b9055565b610b97610b92610b8d600784906106e4565b6109d4565b610a43565b610bbc82610bb5610baf610baa5f610a8b565b61014b565b9161014b565b1415610af0565b610bd9610bc883610b25565b610bd4600484906101cf565b610b5b565b90610c0d610c077f78f66d11c0fe8f0ce8dec169ad57f3438085a89b7371335b6e2b10e9685d7ecc936101c3565b916101c3565b91610c16610132565b80610c2081610506565b0390a3565b90610c2f916109a7565b565b610c39611f06565b610c41610c43565b565b610c54610c4f5f610a8b565b611f7e565b565b610c5e610c31565b565b610c6c610c71916109bb565b6101e9565b90565b610c7e9054610c60565b90565b5f7f4e6f207072696365206f7261636c652073657420666f7220746f6b656e000000910152565b610cb5601d6020926109e1565b610cbe81610c81565b0190565b610cd79060208101905f818303910152610ca8565b90565b15610ce157565b610ce9610132565b62461bcd60e51b815280610cff60048201610cc2565b0390fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610d2b90610d03565b810190811067ffffffffffffffff821117610d4557604052565b610d0d565b60e01b90565b69ffffffffffffffffffff1690565b610d6881610d50565b03610d6f57565b5f80fd5b90505190610d8082610d5f565b565b90565b610d8e81610d82565b03610d9557565b5f80fd5b90505190610da682610d85565b565b90505190610db582610796565b565b919060a083820312610e0857610dcf815f8501610d73565b92610ddd8260208301610d99565b92610e05610dee8460408501610da8565b93610dfc8160608601610da8565b93608001610d73565b90565b61013c565b610e15610132565b3d5f823e3d90fd5b60ff1690565b610e2c81610e1d565b03610e3357565b5f80fd5b90505190610e4482610e23565b565b90602082820312610e5f57610e5c915f01610e37565b90565b61013c565b610e78610e73610e7d92610a6c565b610198565b610d82565b90565b5f7f496e76616c696420707269636500000000000000000000000000000000000000910152565b610eb4600d6020926109e1565b610ebd81610e80565b0190565b610ed69060208101905f818303910152610ea7565b90565b15610ee057565b610ee8610132565b62461bcd60e51b815280610efe60048201610ec1565b0390fd5b5f90565b610f0f9061019b565b90565b610f1b90610f06565b90565b610f27906101b7565b90565b610f3e610f39610f4392610d82565b610198565b610394565b90565b634e487b7160e01b5f52601160045260245ffd5b610f69610f6f91939293610394565b92610394565b91610f7b838202610394565b928184041490151715610f8a57565b610f46565b610f9890610e1d565b604d8111610fa657600a0a90565b610f46565b634e487b7160e01b5f52601260045260245ffd5b610fcb610fd191610394565b91610394565b908115610fdc570490565b610fab565b610fed610ff2916109bb565b610352565b90565b610fff9054610fe1565b90565b61101161101791939293610394565b92610394565b820391821161102257565b610f46565b61103b61103661104092610a6c565b610198565b610394565b90565b9061104f5f19916108dd565b9181191691161790565b61106d61106861107292610394565b610198565b610394565b90565b90565b9061108d61108861109492611059565b611075565b8254611043565b9055565b6110a76110ad91939293610394565b92610394565b82018092116110b857565b610f46565b60207f7461637420696e666f4065746865726775696c642e78797a0000000000000000917f446f6e6174696f6e20657863656564732024353030302f796561722e20436f6e5f8201520152565b61111760386040926109e1565b611120816110bd565b0190565b6111399060208101905f81830391015261110a565b90565b1561114357565b61114b610132565b62461bcd60e51b81528061116160048201611124565b0390fd5b61116e5f610a8b565b34906111b061118f61118a611185600485906101cf565b610c74565b610233565b6111a96111a361119e5f610a8b565b61014b565b9161014b565b1415610cda565b6111c46111bf600483906101cf565b610c74565b6111e860a06111d283610233565b63feaf968c906111e0610132565b938492610d4a565b825281806111f860048201610506565b03915afa80156114d75761121d602091611233935f809290506114a6575b5093610233565b63313ce5679061122b610132565b938492610d4a565b8252818061124360048201610506565b03915afa9081156114a1575f91611473575b50916112738261126d6112675f610e64565b91610d82565b13610ed9565b61127b610f02565b508061129761129161128c5f610a8b565b61014b565b9161014b565b145f146113ac5750906112c36112bd6112c9936112b761136b9691610f2a565b90610f5a565b91610f8f565b90610fbf565b5b6112e76112e16112dc6006339061033c565b610ff5565b42611002565b6113006112fa6112f56105f2565b610394565b91610394565b11611375575b61134761132761132061131b6005339061033c565b610ff5565b8390611098565b61134061133a61133561045b565b610394565b91610394565b111561113c565b6113656113566005339061033c565b9161136083610ff5565b611098565b90611078565b6113736115a7565b565b6113926113815f611027565b61138d6005339061033c565b611078565b6113a7426113a26006339061033c565b611078565b611306565b9060206113c46113bf6113da9594610f12565b610f1e565b63313ce567906113d2610132565b958692610d4a565b825281806113ea60048201610506565b03915afa90811561146e5761136b9461142961142361142f9361141d6114359661143b995f91611440575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6112ca565b611461915060203d8111611467575b6114598183610d21565b810190610e46565b5f611415565b503d61144f565b610e0d565b611494915060203d811161149a575b61148c8183610d21565b810190610e46565b5f611255565b503d611482565b610e0d565b6114c7915060a03d81116114d0575b6114bf8183610d21565b810190610db7565b50505090611216565b503d6114b5565b610e0d565b60207f7468616e20300000000000000000000000000000000000000000000000000000917f446f6e6174696f6e20616d6f756e74206d7573742062652067726561746572205f8201520152565b61153660266040926109e1565b61153f816114dc565b0190565b6115589060208101905f818303910152611529565b90565b1561156257565b61156a610132565b62461bcd60e51b81528061158060048201611543565b0390fd5b9160206115a592949361159e60408201965f830190610397565b0190610397565b565b6115c3346115bd6115b75f611027565b91610394565b1161155b565b6115df6115da60046115d45f610a8b565b906101cf565b610c74565b61160360a06115ed83610233565b63feaf968c906115fb610132565b938492610d4a565b8252818061161360048201610506565b03915afa80156117545761163860209161164e935f80929050611723575b5093610233565b63313ce56790611646610132565b938492610d4a565b8252818061165e60048201610506565b03915afa90811561171e575f916116f0575b50336116a361167e5f610a8b565b9261169d61169734966116913491610f2a565b90610f5a565b91610f8f565b90610fbf565b6116d66116d07fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b936116eb6116e2610132565b92839283611584565b0390a3565b611711915060203d8111611717575b6117098183610d21565b810190610e46565b5f611670565b503d6116ff565b610e0d565b611744915060a03d811161174d575b61173c8183610d21565b810190610db7565b50505090611631565b503d611732565b610e0d565b611761611165565b565b5f90565b611773611778916109bb565b6102a5565b90565b6117859054611767565b90565b611790611763565b5061179a5f61177b565b90565b908181926117e16117c06117bb6117b6600485906101cf565b610c74565b610233565b6117da6117d46117cf5f610a8b565b61014b565b9161014b565b1415610cda565b6117f56117f0600483906101cf565b610c74565b9361181a60a061180487610233565b63feaf968c90611812610132565b938492610d4a565b8252818061182a60048201610506565b03915afa8015611b0b5761184f602091611865935f80929050611ada575b5097610233565b63313ce5679061185d610132565b938492610d4a565b8252818061187560048201610506565b03915afa908115611ad5575f91611aa7575b50916118a58661189f6118995f610e64565b91610d82565b13610ed9565b6118ad610f02565b50806118c96118c36118be5f610a8b565b61014b565b9161014b565b145f146119de57506119a0916118f86118f26119a5976118ec6118fe9591610f2a565b90610f5a565b91610f8f565b90610fbf565b5b61191c6119166119116006339061033c565b610ff5565b42611002565b61193561192f61192a6105f2565b610394565b91610394565b116119a7575b61197c61195c6119556119506005339061033c565b610ff5565b8390611098565b61197561196f61196a61045b565b610394565b91610394565b111561113c565b61199a61198b6005339061033c565b9161199583610ff5565b611098565b90611078565b611b34565b565b6119c46119b35f611027565b6119bf6005339061033c565b611078565b6119d9426119d46006339061033c565b611078565b61193b565b9160206119f66119f1611a0c9495610f12565b610f1e565b63313ce56790611a04610132565b948592610d4a565b82528180611a1c60048201610506565b03915afa8015611aa257611a636119a094611a5d611a576119a59a611a51611a6996611a6f995f91611a74575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6118ff565b611a95915060203d8111611a9b575b611a8d8183610d21565b810190610e46565b5f611a49565b503d611a83565b610e0d565b611ac8915060203d8111611ace575b611ac08183610d21565b810190610e46565b5f611887565b503d611ab6565b610e0d565b611afb915060a03d8111611b04575b611af38183610d21565b810190610db7565b50505090611848565b503d611ae9565b610e0d565b611b199061019b565b90565b611b2590611b10565b90565b611b31906101b7565b90565b611b50611b4b611b46600784906106e4565b6109d4565b610a43565b611b6e611b5c82611b1c565b33611b6630611b28565b90859261204c565b611b82611b7d600483906101cf565b610c74565b90611ba760a0611b9184610233565b63feaf968c90611b9f610132565b938492610d4a565b82528180611bb760048201610506565b03915afa8015611cee57611bdc602091611bf2935f80929050611cbd575b5094610233565b63313ce56790611bea610132565b938492610d4a565b82528180611c0260048201610506565b03915afa8015611cb857611c3d915f91611c8a575b50611c37611c31339495611c2b8891610f2a565b90610f5a565b91610f8f565b90610fbf565b611c70611c6a7fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b93611c85611c7c610132565b92839283611584565b0390a3565b611cab915060203d8111611cb1575b611ca38183610d21565b810190610e46565b5f611c17565b503d611c99565b610e0d565b611cde915060a03d8111611ce7575b611cd68183610d21565b810190610db7565b50505090611bd5565b503d611ccc565b610e0d565b90611cfd9161179d565b565b611d1090611d0b611f06565b611d12565b565b80611d2d611d27611d225f610a8b565b61014b565b9161014b565b14611d3d57611d3b90611f7e565b565b611d67611d495f610a8b565b611d51610132565b918291631e4fbdf760e01b8352600483016102f2565b0390fd5b611d7490611cff565b565b5f7f4f6e6c792061646d696e2063616e207769746864726177000000000000000000910152565b611daa60176020926109e1565b611db381611d76565b0190565b611dcc9060208101905f818303910152611d9d565b90565b15611dd657565b611dde610132565b62461bcd60e51b815280611df460048201611db7565b0390fd5b611e019061019b565b90565b611e0d90611df8565b90565b611e19906101b7565b90565b611e4133611e3b611e35611e30600161177b565b61014b565b9161014b565b14611dcf565b80611e5c611e56611e515f610a8b565b61014b565b9161014b565b145f14611ee4575f808080611e81611e7c611e77600161177b565b611e04565b611e10565b8690828215611edb575bf115611ed6575b611ed1611ebf7feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d926101c3565b92611ec8610132565b918291826103a4565b0390a2565b610e0d565b506108fc611e8b565b611f01611ef082611b1c565b611efa600161177b565b84916120bf565b611e92565b611f0e611788565b611f27611f21611f1c61210d565b61014b565b9161014b565b03611f2e57565b611f57611f3961210d565b611f41610132565b91829163118cdaa760e01b8352600483016102f2565b0390fd5b90565b90611f73611f6e611f7a926101c3565b611f5b565b8254610b31565b9055565b611f875f61177b565b611f91825f611f5e565b90611fc5611fbf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101c3565b916101c3565b91611fce610132565b80611fd881610506565b0390a3565b611fe6906101b7565b90565b63ffffffff1690565b63ffffffff60e01b1690565b61201261200d61201792611fe9565b610d4a565b611ff2565b90565b60409061204361204a949695939661203960608401985f8501906102e5565b60208301906102e5565b0190610397565b565b60049261208661209a9593612095939461206d6323b872dd92949192611ffe565b93612076610132565b978895602087019081520161201a565b60208201810382520383610d21565b612139565b565b9160206120bd9294936120b660408201965f8301906102e5565b0190610397565b565b9061210661210b936120f7600494936120de63a9059cbb919391611ffe565b926120e7610132565b968794602086019081520161209c565b60208201810382520383610d21565b612139565b565b612115611763565b503390565b90565b61213161212c6121369261211a565b610198565b610394565b90565b905f602091612146610f02565b5061214f610f02565b50828151910182855af1156121e9573d5f519061217461216e5f611027565b91610394565b145f146121cf575061218581611fdd565b3b6121986121925f611027565b91610394565b145b6121a15750565b6121ad6121cb91611fdd565b6121b5610132565b918291635274afe760e01b8352600483016102f2565b0390fd5b6121e26121dc600161211d565b91610394565b141561219a565b6040513d5f823e3d90fdfea26469706673582212200889e622fac9babfc780bd286dd1059aadc7cbbd9e2a47bd79f5e746d6da1cc464736f6c63430008180033a2646970667358221220c42e5a45338ff078e3b1e47edecbae2c4f18a11d9d9d76645bf7f6228dc4917564736f6c63430008180033", + "nonce": "0xa", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x57484f5667f752a3cda65b815d986e366100d89b7208659b6e51ed72854f3469", + "transactionType": "CALL", + "contractName": "QuestFactory", + "contractAddress": "0xdc191c431636ce6fc3297fb05f97668e59490945", + "function": "createQuest(uint256)", + "arguments": [ + "1000000000000000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0xdc191c431636ce6fc3297fb05f97668e59490945", + "gas": "0x2a980c", + "value": "0x0", + "input": "0x9a39cb370000000000000000000000000000000000000000000000000de0b6b3a7640000", + "nonce": "0xb", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "initCode": "0x60806040523462000038576200001f620000186200015c565b9162000478565b620000296200003e565b61222a6200065e823961222a90f35b62000044565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90620000729062000048565b810190811060018060401b038211176200008b57604052565b62000052565b90620000a8620000a06200003e565b928362000066565b565b5f80fd5b60018060a01b031690565b620000c490620000ae565b90565b620000d281620000b9565b03620000da57565b5f80fd5b90505190620000ed82620000c7565b565b90565b620000fd81620000ef565b036200010557565b5f80fd5b905051906200011882620000f2565b565b909160608284031262000156576200015362000139845f8501620000de565b9362000149816020860162000109565b93604001620000de565b90565b620000aa565b6200017f6200288880380380620001738162000091565b9283398101906200011a565b909192565b90565b90565b620001a36200019d620001a99262000184565b62000187565b620000ae565b90565b620001b7906200018a565b90565b60209181520190565b5f7f496e76616c69642061646d696e20616464726573730000000000000000000000910152565b620001f96015602092620001ba565b6200020481620001c3565b0190565b6200021f9060208101905f818303910152620001ea565b90565b156200022a57565b620002346200003e565b62461bcd60e51b8152806200024c6004820162000208565b0390fd5b5f7f496e76616c69642063726561746f722061646472657373000000000000000000910152565b620002866017602092620001ba565b620002918162000250565b0190565b620002ac9060208101905f81830391015262000277565b90565b15620002b757565b620002c16200003e565b62461bcd60e51b815280620002d96004820162000295565b0390fd5b620002f6620002f0620002fc9262000184565b62000187565b620000ef565b90565b5f7f496e76616c69642074617267657420616d6f756e740000000000000000000000910152565b620003356015602092620001ba565b6200034081620002ff565b0190565b6200035b9060208101905f81830391015262000326565b90565b156200036657565b620003706200003e565b62461bcd60e51b815280620003886004820162000344565b0390fd5b5f1b90565b90620003a460018060a01b03916200038c565b9181191691161790565b620003c7620003c1620003cd92620000ae565b62000187565b620000ae565b90565b620003db90620003ae565b90565b620003e990620003d0565b90565b90565b9062000409620004036200041192620003de565b620003ec565b825462000391565b9055565b90620004235f19916200038c565b9181191691161790565b62000446620004406200044c92620000ef565b62000187565b620000ef565b90565b90565b906200046c6200046662000474926200042d565b6200044f565b825462000415565b9055565b620005269291620005166200051e9262000492816200054e565b620004bf81620004b7620004b0620004aa5f620001ac565b620000b9565b91620000b9565b141562000222565b620004ec85620004e4620004dd620004d75f620001ac565b620000b9565b91620000b9565b1415620002af565b6200050e8362000507620005005f620002dd565b91620000ef565b116200035e565b6001620003ef565b600262000452565b6003620003ef565b565b6200053390620000b9565b9052565b91906200054c905f6020850194019062000528565b565b806200056f62000568620005625f620001ac565b620000b9565b91620000b9565b1462000582576200058090620005f2565b565b620005b2620005915f620001ac565b6200059b6200003e565b918291631e4fbdf760e01b83526004830162000537565b0390fd5b5f1c90565b60018060a01b031690565b620005d5620005db91620005b6565b620005bb565b90565b620005ea9054620005c6565b90565b5f0190565b620005fd5f620005de565b62000609825f620003ef565b90620006416200063a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003de565b91620003de565b916200064c6200003e565b806200065881620005ed565b0390a356fe60806040526004361015610013575b6108c5565b61001d5f3561012c565b8063013745181461012757806302d05d3f1461012257806328031cf71461011d5780632b0d1cda146101185780634857317e146101135780635bc35ae81461010e57806367a74ddc14610109578063715018a61461010457806383914540146100ff5780638b4c40b0146100fa5780638da5cb5b146100f5578063953b8fb8146100f0578063e744092e146100eb578063ef99fb02146100e6578063f2fde38b146100e1578063f3fef3a3146100dc5763f851a4400361000e57610890565b61084d565b61081a565b6107e6565b610761565b6106af565b61066b565b610642565b61060d565b6105a0565b61056c565b61050b565b61047c565b610407565b6103b9565b610307565b610261565b60e01c90565b60405190565b5f80fd5b5f80fd5b60018060a01b031690565b61015490610140565b90565b6101608161014b565b0361016757565b5f80fd5b9050359061017882610157565b565b9060208282031261019357610190915f0161016b565b90565b61013c565b90565b6101af6101aa6101b492610140565b610198565b610140565b90565b6101c09061019b565b90565b6101cc906101b7565b90565b906101d9906101c3565b5f5260205260405f2090565b1c90565b60018060a01b031690565b61020490600861020993026101e5565b6101e9565b90565b9061021791546101f4565b90565b6102309061022b6004915f926101cf565b61020c565b90565b61023c906101b7565b90565b61024890610233565b9052565b919061025f905f6020850194019061023f565b565b346102915761028d61027c61027736600461017a565b61021a565b610284610132565b9182918261024c565b0390f35b610138565b5f9103126102a057565b61013c565b60018060a01b031690565b6102c09060086102c593026101e5565b6102a5565b90565b906102d391546102b0565b90565b6102e260035f906102c8565b90565b6102ee9061014b565b9052565b9190610305905f602085019401906102e5565b565b3461033757610317366004610296565b6103336103226102d6565b61032a610132565b918291826102f2565b0390f35b610138565b90610346906101c3565b5f5260205260405f2090565b90565b61036590600861036a93026101e5565b610352565b90565b906103789154610355565b90565b6103919061038c6006915f9261033c565b61036d565b90565b90565b6103a090610394565b9052565b91906103b7905f60208501940190610397565b565b346103e9576103e56103d46103cf36600461017a565b61037b565b6103dc610132565b918291826103a4565b0390f35b610138565b610404906103ff6005915f9261033c565b61036d565b90565b346104375761043361042261041d36600461017a565b6103ee565b61042a610132565b918291826103a4565b0390f35b610138565b90565b61045361044e6104589261043c565b610198565b610394565b90565b61046e69010f0cf064dd5920000061043f565b90565b61047961045b565b90565b346104ac5761048c366004610296565b6104a8610497610471565b61049f610132565b918291826103a4565b0390f35b610138565b151590565b6104bf816104b1565b036104c657565b5f80fd5b905035906104d7826104b6565b565b919060408382031261050157806104f56104fe925f860161016b565b936020016104ca565b90565b61013c565b5f0190565b3461053a5761052461051e3660046104d9565b9061099b565b61052c610132565b8061053681610506565b0390f35b610138565b9190604083820312610567578061055b610564925f860161016b565b9360200161016b565b90565b61013c565b3461059b5761058561057f36600461053f565b90610c25565b61058d610132565b8061059781610506565b0390f35b610138565b346105ce576105b0366004610296565b6105b8610c56565b6105c0610132565b806105ca81610506565b0390f35b610138565b90565b6105ea6105e56105ef926105d3565b610198565b610394565b90565b6105ff6301e133806105d6565b90565b61060a6105f2565b90565b3461063d5761061d366004610296565b610639610628610602565b610630610132565b918291826103a4565b0390f35b610138565b61064d366004610296565b610655611759565b61065d610132565b8061066781610506565b0390f35b3461069b5761067b366004610296565b610697610686611788565b61068e610132565b918291826102f2565b0390f35b610138565b6106ac60025f9061036d565b90565b346106df576106bf366004610296565b6106db6106ca6106a0565b6106d2610132565b918291826103a4565b0390f35b610138565b906106ee906101c3565b5f5260205260405f2090565b60ff1690565b61071090600861071593026101e5565b6106fa565b90565b906107239154610700565b90565b61073c906107376007915f926106e4565b610718565b90565b610748906104b1565b9052565b919061075f905f6020850194019061073f565b565b346107915761078d61077c61077736600461017a565b610726565b610784610132565b9182918261074c565b0390f35b610138565b61079f81610394565b036107a657565b5f80fd5b905035906107b782610796565b565b91906040838203126107e157806107d56107de925f860161016b565b936020016107aa565b90565b61013c565b34610815576107ff6107f93660046107b9565b90611cf3565b610807610132565b8061081181610506565b0390f35b610138565b346108485761083261082d36600461017a565b611d6b565b61083a610132565b8061084481610506565b0390f35b610138565b3461087c576108666108603660046107b9565b90611e1c565b61086e610132565b8061087881610506565b0390f35b610138565b61088d60015f906102c8565b90565b346108c0576108a0366004610296565b6108bc6108ab610881565b6108b3610132565b918291826102f2565b0390f35b610138565b5f80fd5b906108db916108d6611f06565b61094a565b565b5f1b90565b906108ee60ff916108dd565b9181191691161790565b610901906104b1565b90565b90565b9061091c610917610923926108f8565b610904565b82546108e2565b9055565b91602061094892949361094160408201965f8301906102e5565b019061073f565b565b61095f8261095a600784906106e4565b610907565b907f9a8e30a8658b96ab3f034ce4bac6806278b4aee5880ccdd1ac35e4ed5bb31d239161099661098d610132565b92839283610927565b0390a1565b906109a5916108c9565b565b906109b9916109b4611f06565b610b7b565b565b5f1c90565b6109cc6109d1916109bb565b6106fa565b90565b6109de90546109c0565b90565b60209181520190565b5f7f546f6b656e206e6f7420616c6c6f776564000000000000000000000000000000910152565b610a1e60116020926109e1565b610a27816109ea565b0190565b610a409060208101905f818303910152610a11565b90565b15610a4a57565b610a52610132565b62461bcd60e51b815280610a6860048201610a2b565b0390fd5b90565b610a83610a7e610a8892610a6c565b610198565b610140565b90565b610a9490610a6f565b90565b5f7f496e76616c6964206f7261636c65206164647265737300000000000000000000910152565b610acb60166020926109e1565b610ad481610a97565b0190565b610aed9060208101905f818303910152610abe565b90565b15610af757565b610aff610132565b62461bcd60e51b815280610b1560048201610ad8565b0390fd5b610b229061019b565b90565b610b2e90610b19565b90565b90610b4260018060a01b03916108dd565b9181191691161790565b610b5590610b19565b90565b90565b90610b70610b6b610b7792610b4c565b610b58565b8254610b31565b9055565b610b97610b92610b8d600784906106e4565b6109d4565b610a43565b610bbc82610bb5610baf610baa5f610a8b565b61014b565b9161014b565b1415610af0565b610bd9610bc883610b25565b610bd4600484906101cf565b610b5b565b90610c0d610c077f78f66d11c0fe8f0ce8dec169ad57f3438085a89b7371335b6e2b10e9685d7ecc936101c3565b916101c3565b91610c16610132565b80610c2081610506565b0390a3565b90610c2f916109a7565b565b610c39611f06565b610c41610c43565b565b610c54610c4f5f610a8b565b611f7e565b565b610c5e610c31565b565b610c6c610c71916109bb565b6101e9565b90565b610c7e9054610c60565b90565b5f7f4e6f207072696365206f7261636c652073657420666f7220746f6b656e000000910152565b610cb5601d6020926109e1565b610cbe81610c81565b0190565b610cd79060208101905f818303910152610ca8565b90565b15610ce157565b610ce9610132565b62461bcd60e51b815280610cff60048201610cc2565b0390fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610d2b90610d03565b810190811067ffffffffffffffff821117610d4557604052565b610d0d565b60e01b90565b69ffffffffffffffffffff1690565b610d6881610d50565b03610d6f57565b5f80fd5b90505190610d8082610d5f565b565b90565b610d8e81610d82565b03610d9557565b5f80fd5b90505190610da682610d85565b565b90505190610db582610796565b565b919060a083820312610e0857610dcf815f8501610d73565b92610ddd8260208301610d99565b92610e05610dee8460408501610da8565b93610dfc8160608601610da8565b93608001610d73565b90565b61013c565b610e15610132565b3d5f823e3d90fd5b60ff1690565b610e2c81610e1d565b03610e3357565b5f80fd5b90505190610e4482610e23565b565b90602082820312610e5f57610e5c915f01610e37565b90565b61013c565b610e78610e73610e7d92610a6c565b610198565b610d82565b90565b5f7f496e76616c696420707269636500000000000000000000000000000000000000910152565b610eb4600d6020926109e1565b610ebd81610e80565b0190565b610ed69060208101905f818303910152610ea7565b90565b15610ee057565b610ee8610132565b62461bcd60e51b815280610efe60048201610ec1565b0390fd5b5f90565b610f0f9061019b565b90565b610f1b90610f06565b90565b610f27906101b7565b90565b610f3e610f39610f4392610d82565b610198565b610394565b90565b634e487b7160e01b5f52601160045260245ffd5b610f69610f6f91939293610394565b92610394565b91610f7b838202610394565b928184041490151715610f8a57565b610f46565b610f9890610e1d565b604d8111610fa657600a0a90565b610f46565b634e487b7160e01b5f52601260045260245ffd5b610fcb610fd191610394565b91610394565b908115610fdc570490565b610fab565b610fed610ff2916109bb565b610352565b90565b610fff9054610fe1565b90565b61101161101791939293610394565b92610394565b820391821161102257565b610f46565b61103b61103661104092610a6c565b610198565b610394565b90565b9061104f5f19916108dd565b9181191691161790565b61106d61106861107292610394565b610198565b610394565b90565b90565b9061108d61108861109492611059565b611075565b8254611043565b9055565b6110a76110ad91939293610394565b92610394565b82018092116110b857565b610f46565b60207f7461637420696e666f4065746865726775696c642e78797a0000000000000000917f446f6e6174696f6e20657863656564732024353030302f796561722e20436f6e5f8201520152565b61111760386040926109e1565b611120816110bd565b0190565b6111399060208101905f81830391015261110a565b90565b1561114357565b61114b610132565b62461bcd60e51b81528061116160048201611124565b0390fd5b61116e5f610a8b565b34906111b061118f61118a611185600485906101cf565b610c74565b610233565b6111a96111a361119e5f610a8b565b61014b565b9161014b565b1415610cda565b6111c46111bf600483906101cf565b610c74565b6111e860a06111d283610233565b63feaf968c906111e0610132565b938492610d4a565b825281806111f860048201610506565b03915afa80156114d75761121d602091611233935f809290506114a6575b5093610233565b63313ce5679061122b610132565b938492610d4a565b8252818061124360048201610506565b03915afa9081156114a1575f91611473575b50916112738261126d6112675f610e64565b91610d82565b13610ed9565b61127b610f02565b508061129761129161128c5f610a8b565b61014b565b9161014b565b145f146113ac5750906112c36112bd6112c9936112b761136b9691610f2a565b90610f5a565b91610f8f565b90610fbf565b5b6112e76112e16112dc6006339061033c565b610ff5565b42611002565b6113006112fa6112f56105f2565b610394565b91610394565b11611375575b61134761132761132061131b6005339061033c565b610ff5565b8390611098565b61134061133a61133561045b565b610394565b91610394565b111561113c565b6113656113566005339061033c565b9161136083610ff5565b611098565b90611078565b6113736115a7565b565b6113926113815f611027565b61138d6005339061033c565b611078565b6113a7426113a26006339061033c565b611078565b611306565b9060206113c46113bf6113da9594610f12565b610f1e565b63313ce567906113d2610132565b958692610d4a565b825281806113ea60048201610506565b03915afa90811561146e5761136b9461142961142361142f9361141d6114359661143b995f91611440575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6112ca565b611461915060203d8111611467575b6114598183610d21565b810190610e46565b5f611415565b503d61144f565b610e0d565b611494915060203d811161149a575b61148c8183610d21565b810190610e46565b5f611255565b503d611482565b610e0d565b6114c7915060a03d81116114d0575b6114bf8183610d21565b810190610db7565b50505090611216565b503d6114b5565b610e0d565b60207f7468616e20300000000000000000000000000000000000000000000000000000917f446f6e6174696f6e20616d6f756e74206d7573742062652067726561746572205f8201520152565b61153660266040926109e1565b61153f816114dc565b0190565b6115589060208101905f818303910152611529565b90565b1561156257565b61156a610132565b62461bcd60e51b81528061158060048201611543565b0390fd5b9160206115a592949361159e60408201965f830190610397565b0190610397565b565b6115c3346115bd6115b75f611027565b91610394565b1161155b565b6115df6115da60046115d45f610a8b565b906101cf565b610c74565b61160360a06115ed83610233565b63feaf968c906115fb610132565b938492610d4a565b8252818061161360048201610506565b03915afa80156117545761163860209161164e935f80929050611723575b5093610233565b63313ce56790611646610132565b938492610d4a565b8252818061165e60048201610506565b03915afa90811561171e575f916116f0575b50336116a361167e5f610a8b565b9261169d61169734966116913491610f2a565b90610f5a565b91610f8f565b90610fbf565b6116d66116d07fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b936116eb6116e2610132565b92839283611584565b0390a3565b611711915060203d8111611717575b6117098183610d21565b810190610e46565b5f611670565b503d6116ff565b610e0d565b611744915060a03d811161174d575b61173c8183610d21565b810190610db7565b50505090611631565b503d611732565b610e0d565b611761611165565b565b5f90565b611773611778916109bb565b6102a5565b90565b6117859054611767565b90565b611790611763565b5061179a5f61177b565b90565b908181926117e16117c06117bb6117b6600485906101cf565b610c74565b610233565b6117da6117d46117cf5f610a8b565b61014b565b9161014b565b1415610cda565b6117f56117f0600483906101cf565b610c74565b9361181a60a061180487610233565b63feaf968c90611812610132565b938492610d4a565b8252818061182a60048201610506565b03915afa8015611b0b5761184f602091611865935f80929050611ada575b5097610233565b63313ce5679061185d610132565b938492610d4a565b8252818061187560048201610506565b03915afa908115611ad5575f91611aa7575b50916118a58661189f6118995f610e64565b91610d82565b13610ed9565b6118ad610f02565b50806118c96118c36118be5f610a8b565b61014b565b9161014b565b145f146119de57506119a0916118f86118f26119a5976118ec6118fe9591610f2a565b90610f5a565b91610f8f565b90610fbf565b5b61191c6119166119116006339061033c565b610ff5565b42611002565b61193561192f61192a6105f2565b610394565b91610394565b116119a7575b61197c61195c6119556119506005339061033c565b610ff5565b8390611098565b61197561196f61196a61045b565b610394565b91610394565b111561113c565b61199a61198b6005339061033c565b9161199583610ff5565b611098565b90611078565b611b34565b565b6119c46119b35f611027565b6119bf6005339061033c565b611078565b6119d9426119d46006339061033c565b611078565b61193b565b9160206119f66119f1611a0c9495610f12565b610f1e565b63313ce56790611a04610132565b948592610d4a565b82528180611a1c60048201610506565b03915afa8015611aa257611a636119a094611a5d611a576119a59a611a51611a6996611a6f995f91611a74575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6118ff565b611a95915060203d8111611a9b575b611a8d8183610d21565b810190610e46565b5f611a49565b503d611a83565b610e0d565b611ac8915060203d8111611ace575b611ac08183610d21565b810190610e46565b5f611887565b503d611ab6565b610e0d565b611afb915060a03d8111611b04575b611af38183610d21565b810190610db7565b50505090611848565b503d611ae9565b610e0d565b611b199061019b565b90565b611b2590611b10565b90565b611b31906101b7565b90565b611b50611b4b611b46600784906106e4565b6109d4565b610a43565b611b6e611b5c82611b1c565b33611b6630611b28565b90859261204c565b611b82611b7d600483906101cf565b610c74565b90611ba760a0611b9184610233565b63feaf968c90611b9f610132565b938492610d4a565b82528180611bb760048201610506565b03915afa8015611cee57611bdc602091611bf2935f80929050611cbd575b5094610233565b63313ce56790611bea610132565b938492610d4a565b82528180611c0260048201610506565b03915afa8015611cb857611c3d915f91611c8a575b50611c37611c31339495611c2b8891610f2a565b90610f5a565b91610f8f565b90610fbf565b611c70611c6a7fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b93611c85611c7c610132565b92839283611584565b0390a3565b611cab915060203d8111611cb1575b611ca38183610d21565b810190610e46565b5f611c17565b503d611c99565b610e0d565b611cde915060a03d8111611ce7575b611cd68183610d21565b810190610db7565b50505090611bd5565b503d611ccc565b610e0d565b90611cfd9161179d565b565b611d1090611d0b611f06565b611d12565b565b80611d2d611d27611d225f610a8b565b61014b565b9161014b565b14611d3d57611d3b90611f7e565b565b611d67611d495f610a8b565b611d51610132565b918291631e4fbdf760e01b8352600483016102f2565b0390fd5b611d7490611cff565b565b5f7f4f6e6c792061646d696e2063616e207769746864726177000000000000000000910152565b611daa60176020926109e1565b611db381611d76565b0190565b611dcc9060208101905f818303910152611d9d565b90565b15611dd657565b611dde610132565b62461bcd60e51b815280611df460048201611db7565b0390fd5b611e019061019b565b90565b611e0d90611df8565b90565b611e19906101b7565b90565b611e4133611e3b611e35611e30600161177b565b61014b565b9161014b565b14611dcf565b80611e5c611e56611e515f610a8b565b61014b565b9161014b565b145f14611ee4575f808080611e81611e7c611e77600161177b565b611e04565b611e10565b8690828215611edb575bf115611ed6575b611ed1611ebf7feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d926101c3565b92611ec8610132565b918291826103a4565b0390a2565b610e0d565b506108fc611e8b565b611f01611ef082611b1c565b611efa600161177b565b84916120bf565b611e92565b611f0e611788565b611f27611f21611f1c61210d565b61014b565b9161014b565b03611f2e57565b611f57611f3961210d565b611f41610132565b91829163118cdaa760e01b8352600483016102f2565b0390fd5b90565b90611f73611f6e611f7a926101c3565b611f5b565b8254610b31565b9055565b611f875f61177b565b611f91825f611f5e565b90611fc5611fbf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101c3565b916101c3565b91611fce610132565b80611fd881610506565b0390a3565b611fe6906101b7565b90565b63ffffffff1690565b63ffffffff60e01b1690565b61201261200d61201792611fe9565b610d4a565b611ff2565b90565b60409061204361204a949695939661203960608401985f8501906102e5565b60208301906102e5565b0190610397565b565b60049261208661209a9593612095939461206d6323b872dd92949192611ffe565b93612076610132565b978895602087019081520161201a565b60208201810382520383610d21565b612139565b565b9160206120bd9294936120b660408201965f8301906102e5565b0190610397565b565b9061210661210b936120f7600494936120de63a9059cbb919391611ffe565b926120e7610132565b968794602086019081520161209c565b60208201810382520383610d21565b612139565b565b612115611763565b503390565b90565b61213161212c6121369261211a565b610198565b610394565b90565b905f602091612146610f02565b5061214f610f02565b50828151910182855af1156121e9573d5f519061217461216e5f611027565b91610394565b145f146121cf575061218581611fdd565b3b6121986121925f611027565b91610394565b145b6121a15750565b6121ad6121cb91611fdd565b6121b5610132565b918291635274afe760e01b8352600483016102f2565b0390fd5b6121e26121dc600161211d565b91610394565b141561219a565b6040513d5f823e3d90fdfea26469706673582212200889e622fac9babfc780bd286dd1059aadc7cbbd9e2a47bd79f5e746d6da1cc464736f6c63430008180033000000000000000000000000cd949192344f41de8d99336a4f32bb0b9c04e5770000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000cd949192344f41de8d99336a4f32bb0b9c04e577" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xb6cb6ace3971a7bd2960031162a868a2c56a893bd554ede5a1cd56d2a5eed2bf", + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "allowToken(address,bool)", + "arguments": [ + "0x0000000000000000000000000000000000000000", + "true" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x10788", + "value": "0x0", + "input": "0x5bc35ae800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa800825f2c6b923e02ae9c008d56a2928b4c720131ae6f067daec0fd850916c9", + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "allowToken(address,bool)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "true" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x108d4", + "value": "0x0", + "input": "0x5bc35ae800000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c80000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xd", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "setPriceOracle(address,address)", + "arguments": [ + "0x0000000000000000000000000000000000000000", + "0x694AA1769357215DE4FAC081bf1f309aDC325306" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x12e05", + "value": "0x0", + "input": "0x67a74ddc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694aa1769357215de4fac081bf1f309adc325306", + "nonce": "0xe", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "setPriceOracle(address,address)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "0xA2F78ab2355fe2f984D808B5CeE7FD0A93D5270E" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x12f64", + "value": "0x0", + "input": "0x67a74ddc00000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8000000000000000000000000a2f78ab2355fe2f984d808b5cee7fd0a93d5270e", + "nonce": "0xf", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "donateETH()", + "arguments": [], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x24742", + "value": "0x16345785d8a0000", + "input": "0x8b4c40b0", + "nonce": "0x10", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8", + "function": "approve(address,uint256)", + "arguments": [ + "0x84BBa5C7C9238202784d4a8B596C4998130F1009", + "100000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8", + "gas": "0xf959", + "value": "0x0", + "input": "0x095ea7b300000000000000000000000084bba5c7c9238202784d4a8b596c4998130f10090000000000000000000000000000000000000000000000000000000005f5e100", + "nonce": "0x11", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "donateERC20(address,uint256)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "100000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x26176", + "value": "0x0", + "input": "0xef99fb0200000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c80000000000000000000000000000000000000000000000000000000005f5e100", + "nonce": "0x12", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "withdraw(address,uint256)", + "arguments": [ + "0x0000000000000000000000000000000000000000", + "50000000000000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0xb958", + "value": "0x0", + "input": "0xf3fef3a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1a2bc2ec50000", + "nonce": "0x13", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "withdraw(address,uint256)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "50000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0xee9c", + "value": "0x0", + "input": "0xf3fef3a300000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c80000000000000000000000000000000000000000000000000000000002faf080", + "nonce": "0x14", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xde6fee9a3053114bf4eb779a9bb871a359c0d6b6ff7178451d5b1c8a5322531b", + "0x57484f5667f752a3cda65b815d986e366100d89b7208659b6e51ed72854f3469", + "0xb6cb6ace3971a7bd2960031162a868a2c56a893bd554ede5a1cd56d2a5eed2bf", + "0xa800825f2c6b923e02ae9c008d56a2928b4c720131ae6f067daec0fd850916c9" + ], + "returns": { + "0": { + "internal_type": "contract QuestFactory", + "value": "0xdc191c431636Ce6Fc3297FB05F97668e59490945" + } + }, + "timestamp": 1739055178, + "chain": 11155111, + "commit": "52cac7d" +} \ No newline at end of file diff --git a/broadcast/1.Deploy.s.sol/11155111/run-latest.json b/broadcast/1.Deploy.s.sol/11155111/run-latest.json new file mode 100644 index 0000000..df62383 --- /dev/null +++ b/broadcast/1.Deploy.s.sol/11155111/run-latest.json @@ -0,0 +1,261 @@ +{ + "transactions": [ + { + "hash": "0xde6fee9a3053114bf4eb779a9bb871a359c0d6b6ff7178451d5b1c8a5322531b", + "transactionType": "CREATE", + "contractName": "QuestFactory", + "contractAddress": "0xdc191c431636ce6fc3297fb05f97668e59490945", + "function": null, + "arguments": null, + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "gas": "0x39ae89", + "value": "0x0", + "input": "0x6080604052346200002d5762000014620000d4565b6200001e62000033565b613345620000e3823961334590f35b62000039565b60405190565b5f80fd5b5f1b90565b906200005560018060a01b03916200003d565b9181191691161790565b60018060a01b031690565b90565b62000086620000806200008c926200005f565b6200006a565b6200005f565b90565b6200009a906200006d565b90565b620000a8906200008f565b90565b90565b90620000c8620000c2620000d0926200009d565b620000ab565b825462000042565b9055565b620000e0335f620000ae565b56fe6080604052600436101562000015575b6200042c565b620000215f356200007a565b8063874af06214620000745780639a39cb37146200006e578063a9a0166e1462000068578063e085f98014620000625763f851a440036200000f57620003ed565b6200036b565b62000219565b620001b2565b62000158565b60e01c90565b60405190565b5f80fd5b5f80fd5b90565b6200009c816200008e565b03620000a457565b5f80fd5b90503590620000b78262000091565b565b90602082820312620000d557620000d2915f01620000a8565b90565b6200008a565b60018060a01b031690565b620000f190620000db565b90565b620000ff90620000e6565b9052565b6200010e906200008e565b9052565b6200014e62000156946200014360609498979562000138608086019a5f870190620000f4565b602085019062000103565b6040830190620000f4565b019062000103565b565b346200019557620001916200017962000173366004620000b9565b62000608565b906200018794929462000080565b9485948562000112565b0390f35b62000086565b9190620001b0905f60208501940190620000f4565b565b34620001eb57620001e7620001d3620001cd366004620000b9565b62000929565b620001dd62000080565b918291826200019b565b0390f35b62000086565b5f910312620001fc57565b6200008a565b919062000217905f6020850194019062000103565b565b3462000252576200022c366004620001f1565b6200024e6200023a62000a6d565b6200024462000080565b9182918262000202565b0390f35b62000086565b634e487b7160e01b5f52603260045260245ffd5b5490565b5f5260205f2090565b62000284816200026c565b821015620002a1576200029960049162000270565b910201905f90565b62000258565b5f1c90565b60018060a01b031690565b620002c6620002cc91620002a7565b620002ac565b90565b620002db9054620002b7565b90565b90565b620002f0620002f691620002a7565b620002de565b90565b620003059054620002e1565b90565b60019062000316826200026c565b8110156200036757620003299162000279565b5090620003385f8301620002cf565b916200034760018201620002f9565b916200036460036200035c60028501620002cf565b9301620002f9565b90565b5f80fd5b34620003a857620003a46200038c62000386366004620000b9565b62000308565b906200039a94929462000080565b9485948562000112565b0390f35b62000086565b1c90565b620003c5906008620003cb9302620003ae565b620002ac565b90565b90620003db9154620003b2565b90565b620003ea5f80620003ce565b90565b34620004265762000400366004620001f1565b620004226200040e620003de565b6200041862000080565b918291826200019b565b0390f35b62000086565b5f80fd5b5f90565b5f90565b60209181520190565b5f7f517565737420696e646578206f7574206f6620626f756e647300000000000000910152565b62000477601960209262000438565b620004828162000441565b0190565b6200049d9060208101905f81830391015262000468565b90565b15620004a857565b620004b262000080565b62461bcd60e51b815280620004ca6004820162000486565b0390fd5b90620004da90620000e6565b9052565b90620004ea906200008e565b9052565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906200051890620004ee565b810190811067ffffffffffffffff8211176200053357604052565b620004f8565b90620005506200054862000080565b92836200050c565b565b6200055e608062000539565b90565b90620005da620005d060036200057662000552565b9462000591620005885f8301620002cf565b5f8801620004ce565b620005ad620005a360018301620002f9565b60208801620004de565b620005c9620005bf60028301620002cf565b60408801620004ce565b01620002f9565b60608401620004de565b565b620005e79062000561565b90565b620005f69051620000e6565b90565b6200060590516200008e565b90565b6200067262000679916200061b62000430565b506200062662000434565b506200063162000430565b506200063c62000434565b506200066a81620006636200065c6200065660016200026c565b6200008e565b916200008e565b10620004a0565b600162000279565b50620005dc565b620006865f8201620005ea565b6200069460208301620005f9565b92620006b16060620006a960408601620005ea565b9401620005f9565b9193929190565b604090620006e6620006ee9496959396620006db60608401985f850190620000f4565b602083019062000103565b0190620000f4565b565b620006fa62000080565b3d5f823e3d90fd5b90565b90565b620007216200071b6200072792620000db565b62000705565b620000db565b90565b620007359062000708565b90565b62000743906200072a565b90565b62000752608062000539565b90565b5f5260205f2090565b5490565b6200076d816200075e565b8210156200078a576200078260049162000755565b910201905f90565b62000258565b634e487b7160e01b5f525f60045260245ffd5b5f1b90565b90620007bb60018060a01b0391620007a3565b9181191691161790565b620007d0906200072a565b90565b90565b90620007f0620007ea620007f892620007c5565b620007d3565b8254620007a8565b9055565b906200080a5f1991620007a3565b9181191691161790565b6200082d6200082762000833926200008e565b62000705565b6200008e565b90565b90565b90620008536200084d6200085b9262000814565b62000836565b8254620007fc565b9055565b90620008cb60606003620008d294620008885f8201620008815f8801620005ea565b90620007d6565b620008a5600182016200089e60208801620005f9565b9062000839565b620008c260028201620008bb60408801620005ea565b90620007d6565b019201620005f9565b9062000839565b565b9190620008e857620008e6916200085f565b565b62000790565b90815491680100000000000000008310156200092357826200091a916001620009219501815562000762565b90620008d4565b565b620004f8565b6200093362000430565b506200093f5f620002cf565b819033916200094d62000080565b9261288884019184831067ffffffffffffffff84111762000a675784936200097e9361288862000a888739620006b8565b03905ff090811562000a6157620009f762000a5e9291620009a0600162000702565b620009f1620009af8562000738565b92620009e733620009dd4293620009d3620009c962000746565b985f8a01620004ce565b60208801620004de565b60408601620004ce565b60608401620004de565b620008ee565b62000a028162000738565b33429162000a5562000a4062000a397f01d8320e268685ac2181caee70ccf6f0b9a42f977e68559a40838f40b97bd31793620007c5565b93620007c5565b9362000a4b62000080565b9182918262000202565b0390a362000738565b90565b620006f0565b620004f8565b62000a7762000434565b5062000a8460016200026c565b9056fe60806040523462000038576200001f620000186200015c565b9162000478565b620000296200003e565b61222a6200065e823961222a90f35b62000044565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90620000729062000048565b810190811060018060401b038211176200008b57604052565b62000052565b90620000a8620000a06200003e565b928362000066565b565b5f80fd5b60018060a01b031690565b620000c490620000ae565b90565b620000d281620000b9565b03620000da57565b5f80fd5b90505190620000ed82620000c7565b565b90565b620000fd81620000ef565b036200010557565b5f80fd5b905051906200011882620000f2565b565b909160608284031262000156576200015362000139845f8501620000de565b9362000149816020860162000109565b93604001620000de565b90565b620000aa565b6200017f6200288880380380620001738162000091565b9283398101906200011a565b909192565b90565b90565b620001a36200019d620001a99262000184565b62000187565b620000ae565b90565b620001b7906200018a565b90565b60209181520190565b5f7f496e76616c69642061646d696e20616464726573730000000000000000000000910152565b620001f96015602092620001ba565b6200020481620001c3565b0190565b6200021f9060208101905f818303910152620001ea565b90565b156200022a57565b620002346200003e565b62461bcd60e51b8152806200024c6004820162000208565b0390fd5b5f7f496e76616c69642063726561746f722061646472657373000000000000000000910152565b620002866017602092620001ba565b620002918162000250565b0190565b620002ac9060208101905f81830391015262000277565b90565b15620002b757565b620002c16200003e565b62461bcd60e51b815280620002d96004820162000295565b0390fd5b620002f6620002f0620002fc9262000184565b62000187565b620000ef565b90565b5f7f496e76616c69642074617267657420616d6f756e740000000000000000000000910152565b620003356015602092620001ba565b6200034081620002ff565b0190565b6200035b9060208101905f81830391015262000326565b90565b156200036657565b620003706200003e565b62461bcd60e51b815280620003886004820162000344565b0390fd5b5f1b90565b90620003a460018060a01b03916200038c565b9181191691161790565b620003c7620003c1620003cd92620000ae565b62000187565b620000ae565b90565b620003db90620003ae565b90565b620003e990620003d0565b90565b90565b9062000409620004036200041192620003de565b620003ec565b825462000391565b9055565b90620004235f19916200038c565b9181191691161790565b62000446620004406200044c92620000ef565b62000187565b620000ef565b90565b90565b906200046c6200046662000474926200042d565b6200044f565b825462000415565b9055565b620005269291620005166200051e9262000492816200054e565b620004bf81620004b7620004b0620004aa5f620001ac565b620000b9565b91620000b9565b141562000222565b620004ec85620004e4620004dd620004d75f620001ac565b620000b9565b91620000b9565b1415620002af565b6200050e8362000507620005005f620002dd565b91620000ef565b116200035e565b6001620003ef565b600262000452565b6003620003ef565b565b6200053390620000b9565b9052565b91906200054c905f6020850194019062000528565b565b806200056f62000568620005625f620001ac565b620000b9565b91620000b9565b1462000582576200058090620005f2565b565b620005b2620005915f620001ac565b6200059b6200003e565b918291631e4fbdf760e01b83526004830162000537565b0390fd5b5f1c90565b60018060a01b031690565b620005d5620005db91620005b6565b620005bb565b90565b620005ea9054620005c6565b90565b5f0190565b620005fd5f620005de565b62000609825f620003ef565b90620006416200063a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003de565b91620003de565b916200064c6200003e565b806200065881620005ed565b0390a356fe60806040526004361015610013575b6108c5565b61001d5f3561012c565b8063013745181461012757806302d05d3f1461012257806328031cf71461011d5780632b0d1cda146101185780634857317e146101135780635bc35ae81461010e57806367a74ddc14610109578063715018a61461010457806383914540146100ff5780638b4c40b0146100fa5780638da5cb5b146100f5578063953b8fb8146100f0578063e744092e146100eb578063ef99fb02146100e6578063f2fde38b146100e1578063f3fef3a3146100dc5763f851a4400361000e57610890565b61084d565b61081a565b6107e6565b610761565b6106af565b61066b565b610642565b61060d565b6105a0565b61056c565b61050b565b61047c565b610407565b6103b9565b610307565b610261565b60e01c90565b60405190565b5f80fd5b5f80fd5b60018060a01b031690565b61015490610140565b90565b6101608161014b565b0361016757565b5f80fd5b9050359061017882610157565b565b9060208282031261019357610190915f0161016b565b90565b61013c565b90565b6101af6101aa6101b492610140565b610198565b610140565b90565b6101c09061019b565b90565b6101cc906101b7565b90565b906101d9906101c3565b5f5260205260405f2090565b1c90565b60018060a01b031690565b61020490600861020993026101e5565b6101e9565b90565b9061021791546101f4565b90565b6102309061022b6004915f926101cf565b61020c565b90565b61023c906101b7565b90565b61024890610233565b9052565b919061025f905f6020850194019061023f565b565b346102915761028d61027c61027736600461017a565b61021a565b610284610132565b9182918261024c565b0390f35b610138565b5f9103126102a057565b61013c565b60018060a01b031690565b6102c09060086102c593026101e5565b6102a5565b90565b906102d391546102b0565b90565b6102e260035f906102c8565b90565b6102ee9061014b565b9052565b9190610305905f602085019401906102e5565b565b3461033757610317366004610296565b6103336103226102d6565b61032a610132565b918291826102f2565b0390f35b610138565b90610346906101c3565b5f5260205260405f2090565b90565b61036590600861036a93026101e5565b610352565b90565b906103789154610355565b90565b6103919061038c6006915f9261033c565b61036d565b90565b90565b6103a090610394565b9052565b91906103b7905f60208501940190610397565b565b346103e9576103e56103d46103cf36600461017a565b61037b565b6103dc610132565b918291826103a4565b0390f35b610138565b610404906103ff6005915f9261033c565b61036d565b90565b346104375761043361042261041d36600461017a565b6103ee565b61042a610132565b918291826103a4565b0390f35b610138565b90565b61045361044e6104589261043c565b610198565b610394565b90565b61046e69010f0cf064dd5920000061043f565b90565b61047961045b565b90565b346104ac5761048c366004610296565b6104a8610497610471565b61049f610132565b918291826103a4565b0390f35b610138565b151590565b6104bf816104b1565b036104c657565b5f80fd5b905035906104d7826104b6565b565b919060408382031261050157806104f56104fe925f860161016b565b936020016104ca565b90565b61013c565b5f0190565b3461053a5761052461051e3660046104d9565b9061099b565b61052c610132565b8061053681610506565b0390f35b610138565b9190604083820312610567578061055b610564925f860161016b565b9360200161016b565b90565b61013c565b3461059b5761058561057f36600461053f565b90610c25565b61058d610132565b8061059781610506565b0390f35b610138565b346105ce576105b0366004610296565b6105b8610c56565b6105c0610132565b806105ca81610506565b0390f35b610138565b90565b6105ea6105e56105ef926105d3565b610198565b610394565b90565b6105ff6301e133806105d6565b90565b61060a6105f2565b90565b3461063d5761061d366004610296565b610639610628610602565b610630610132565b918291826103a4565b0390f35b610138565b61064d366004610296565b610655611759565b61065d610132565b8061066781610506565b0390f35b3461069b5761067b366004610296565b610697610686611788565b61068e610132565b918291826102f2565b0390f35b610138565b6106ac60025f9061036d565b90565b346106df576106bf366004610296565b6106db6106ca6106a0565b6106d2610132565b918291826103a4565b0390f35b610138565b906106ee906101c3565b5f5260205260405f2090565b60ff1690565b61071090600861071593026101e5565b6106fa565b90565b906107239154610700565b90565b61073c906107376007915f926106e4565b610718565b90565b610748906104b1565b9052565b919061075f905f6020850194019061073f565b565b346107915761078d61077c61077736600461017a565b610726565b610784610132565b9182918261074c565b0390f35b610138565b61079f81610394565b036107a657565b5f80fd5b905035906107b782610796565b565b91906040838203126107e157806107d56107de925f860161016b565b936020016107aa565b90565b61013c565b34610815576107ff6107f93660046107b9565b90611cf3565b610807610132565b8061081181610506565b0390f35b610138565b346108485761083261082d36600461017a565b611d6b565b61083a610132565b8061084481610506565b0390f35b610138565b3461087c576108666108603660046107b9565b90611e1c565b61086e610132565b8061087881610506565b0390f35b610138565b61088d60015f906102c8565b90565b346108c0576108a0366004610296565b6108bc6108ab610881565b6108b3610132565b918291826102f2565b0390f35b610138565b5f80fd5b906108db916108d6611f06565b61094a565b565b5f1b90565b906108ee60ff916108dd565b9181191691161790565b610901906104b1565b90565b90565b9061091c610917610923926108f8565b610904565b82546108e2565b9055565b91602061094892949361094160408201965f8301906102e5565b019061073f565b565b61095f8261095a600784906106e4565b610907565b907f9a8e30a8658b96ab3f034ce4bac6806278b4aee5880ccdd1ac35e4ed5bb31d239161099661098d610132565b92839283610927565b0390a1565b906109a5916108c9565b565b906109b9916109b4611f06565b610b7b565b565b5f1c90565b6109cc6109d1916109bb565b6106fa565b90565b6109de90546109c0565b90565b60209181520190565b5f7f546f6b656e206e6f7420616c6c6f776564000000000000000000000000000000910152565b610a1e60116020926109e1565b610a27816109ea565b0190565b610a409060208101905f818303910152610a11565b90565b15610a4a57565b610a52610132565b62461bcd60e51b815280610a6860048201610a2b565b0390fd5b90565b610a83610a7e610a8892610a6c565b610198565b610140565b90565b610a9490610a6f565b90565b5f7f496e76616c6964206f7261636c65206164647265737300000000000000000000910152565b610acb60166020926109e1565b610ad481610a97565b0190565b610aed9060208101905f818303910152610abe565b90565b15610af757565b610aff610132565b62461bcd60e51b815280610b1560048201610ad8565b0390fd5b610b229061019b565b90565b610b2e90610b19565b90565b90610b4260018060a01b03916108dd565b9181191691161790565b610b5590610b19565b90565b90565b90610b70610b6b610b7792610b4c565b610b58565b8254610b31565b9055565b610b97610b92610b8d600784906106e4565b6109d4565b610a43565b610bbc82610bb5610baf610baa5f610a8b565b61014b565b9161014b565b1415610af0565b610bd9610bc883610b25565b610bd4600484906101cf565b610b5b565b90610c0d610c077f78f66d11c0fe8f0ce8dec169ad57f3438085a89b7371335b6e2b10e9685d7ecc936101c3565b916101c3565b91610c16610132565b80610c2081610506565b0390a3565b90610c2f916109a7565b565b610c39611f06565b610c41610c43565b565b610c54610c4f5f610a8b565b611f7e565b565b610c5e610c31565b565b610c6c610c71916109bb565b6101e9565b90565b610c7e9054610c60565b90565b5f7f4e6f207072696365206f7261636c652073657420666f7220746f6b656e000000910152565b610cb5601d6020926109e1565b610cbe81610c81565b0190565b610cd79060208101905f818303910152610ca8565b90565b15610ce157565b610ce9610132565b62461bcd60e51b815280610cff60048201610cc2565b0390fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610d2b90610d03565b810190811067ffffffffffffffff821117610d4557604052565b610d0d565b60e01b90565b69ffffffffffffffffffff1690565b610d6881610d50565b03610d6f57565b5f80fd5b90505190610d8082610d5f565b565b90565b610d8e81610d82565b03610d9557565b5f80fd5b90505190610da682610d85565b565b90505190610db582610796565b565b919060a083820312610e0857610dcf815f8501610d73565b92610ddd8260208301610d99565b92610e05610dee8460408501610da8565b93610dfc8160608601610da8565b93608001610d73565b90565b61013c565b610e15610132565b3d5f823e3d90fd5b60ff1690565b610e2c81610e1d565b03610e3357565b5f80fd5b90505190610e4482610e23565b565b90602082820312610e5f57610e5c915f01610e37565b90565b61013c565b610e78610e73610e7d92610a6c565b610198565b610d82565b90565b5f7f496e76616c696420707269636500000000000000000000000000000000000000910152565b610eb4600d6020926109e1565b610ebd81610e80565b0190565b610ed69060208101905f818303910152610ea7565b90565b15610ee057565b610ee8610132565b62461bcd60e51b815280610efe60048201610ec1565b0390fd5b5f90565b610f0f9061019b565b90565b610f1b90610f06565b90565b610f27906101b7565b90565b610f3e610f39610f4392610d82565b610198565b610394565b90565b634e487b7160e01b5f52601160045260245ffd5b610f69610f6f91939293610394565b92610394565b91610f7b838202610394565b928184041490151715610f8a57565b610f46565b610f9890610e1d565b604d8111610fa657600a0a90565b610f46565b634e487b7160e01b5f52601260045260245ffd5b610fcb610fd191610394565b91610394565b908115610fdc570490565b610fab565b610fed610ff2916109bb565b610352565b90565b610fff9054610fe1565b90565b61101161101791939293610394565b92610394565b820391821161102257565b610f46565b61103b61103661104092610a6c565b610198565b610394565b90565b9061104f5f19916108dd565b9181191691161790565b61106d61106861107292610394565b610198565b610394565b90565b90565b9061108d61108861109492611059565b611075565b8254611043565b9055565b6110a76110ad91939293610394565b92610394565b82018092116110b857565b610f46565b60207f7461637420696e666f4065746865726775696c642e78797a0000000000000000917f446f6e6174696f6e20657863656564732024353030302f796561722e20436f6e5f8201520152565b61111760386040926109e1565b611120816110bd565b0190565b6111399060208101905f81830391015261110a565b90565b1561114357565b61114b610132565b62461bcd60e51b81528061116160048201611124565b0390fd5b61116e5f610a8b565b34906111b061118f61118a611185600485906101cf565b610c74565b610233565b6111a96111a361119e5f610a8b565b61014b565b9161014b565b1415610cda565b6111c46111bf600483906101cf565b610c74565b6111e860a06111d283610233565b63feaf968c906111e0610132565b938492610d4a565b825281806111f860048201610506565b03915afa80156114d75761121d602091611233935f809290506114a6575b5093610233565b63313ce5679061122b610132565b938492610d4a565b8252818061124360048201610506565b03915afa9081156114a1575f91611473575b50916112738261126d6112675f610e64565b91610d82565b13610ed9565b61127b610f02565b508061129761129161128c5f610a8b565b61014b565b9161014b565b145f146113ac5750906112c36112bd6112c9936112b761136b9691610f2a565b90610f5a565b91610f8f565b90610fbf565b5b6112e76112e16112dc6006339061033c565b610ff5565b42611002565b6113006112fa6112f56105f2565b610394565b91610394565b11611375575b61134761132761132061131b6005339061033c565b610ff5565b8390611098565b61134061133a61133561045b565b610394565b91610394565b111561113c565b6113656113566005339061033c565b9161136083610ff5565b611098565b90611078565b6113736115a7565b565b6113926113815f611027565b61138d6005339061033c565b611078565b6113a7426113a26006339061033c565b611078565b611306565b9060206113c46113bf6113da9594610f12565b610f1e565b63313ce567906113d2610132565b958692610d4a565b825281806113ea60048201610506565b03915afa90811561146e5761136b9461142961142361142f9361141d6114359661143b995f91611440575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6112ca565b611461915060203d8111611467575b6114598183610d21565b810190610e46565b5f611415565b503d61144f565b610e0d565b611494915060203d811161149a575b61148c8183610d21565b810190610e46565b5f611255565b503d611482565b610e0d565b6114c7915060a03d81116114d0575b6114bf8183610d21565b810190610db7565b50505090611216565b503d6114b5565b610e0d565b60207f7468616e20300000000000000000000000000000000000000000000000000000917f446f6e6174696f6e20616d6f756e74206d7573742062652067726561746572205f8201520152565b61153660266040926109e1565b61153f816114dc565b0190565b6115589060208101905f818303910152611529565b90565b1561156257565b61156a610132565b62461bcd60e51b81528061158060048201611543565b0390fd5b9160206115a592949361159e60408201965f830190610397565b0190610397565b565b6115c3346115bd6115b75f611027565b91610394565b1161155b565b6115df6115da60046115d45f610a8b565b906101cf565b610c74565b61160360a06115ed83610233565b63feaf968c906115fb610132565b938492610d4a565b8252818061161360048201610506565b03915afa80156117545761163860209161164e935f80929050611723575b5093610233565b63313ce56790611646610132565b938492610d4a565b8252818061165e60048201610506565b03915afa90811561171e575f916116f0575b50336116a361167e5f610a8b565b9261169d61169734966116913491610f2a565b90610f5a565b91610f8f565b90610fbf565b6116d66116d07fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b936116eb6116e2610132565b92839283611584565b0390a3565b611711915060203d8111611717575b6117098183610d21565b810190610e46565b5f611670565b503d6116ff565b610e0d565b611744915060a03d811161174d575b61173c8183610d21565b810190610db7565b50505090611631565b503d611732565b610e0d565b611761611165565b565b5f90565b611773611778916109bb565b6102a5565b90565b6117859054611767565b90565b611790611763565b5061179a5f61177b565b90565b908181926117e16117c06117bb6117b6600485906101cf565b610c74565b610233565b6117da6117d46117cf5f610a8b565b61014b565b9161014b565b1415610cda565b6117f56117f0600483906101cf565b610c74565b9361181a60a061180487610233565b63feaf968c90611812610132565b938492610d4a565b8252818061182a60048201610506565b03915afa8015611b0b5761184f602091611865935f80929050611ada575b5097610233565b63313ce5679061185d610132565b938492610d4a565b8252818061187560048201610506565b03915afa908115611ad5575f91611aa7575b50916118a58661189f6118995f610e64565b91610d82565b13610ed9565b6118ad610f02565b50806118c96118c36118be5f610a8b565b61014b565b9161014b565b145f146119de57506119a0916118f86118f26119a5976118ec6118fe9591610f2a565b90610f5a565b91610f8f565b90610fbf565b5b61191c6119166119116006339061033c565b610ff5565b42611002565b61193561192f61192a6105f2565b610394565b91610394565b116119a7575b61197c61195c6119556119506005339061033c565b610ff5565b8390611098565b61197561196f61196a61045b565b610394565b91610394565b111561113c565b61199a61198b6005339061033c565b9161199583610ff5565b611098565b90611078565b611b34565b565b6119c46119b35f611027565b6119bf6005339061033c565b611078565b6119d9426119d46006339061033c565b611078565b61193b565b9160206119f66119f1611a0c9495610f12565b610f1e565b63313ce56790611a04610132565b948592610d4a565b82528180611a1c60048201610506565b03915afa8015611aa257611a636119a094611a5d611a576119a59a611a51611a6996611a6f995f91611a74575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6118ff565b611a95915060203d8111611a9b575b611a8d8183610d21565b810190610e46565b5f611a49565b503d611a83565b610e0d565b611ac8915060203d8111611ace575b611ac08183610d21565b810190610e46565b5f611887565b503d611ab6565b610e0d565b611afb915060a03d8111611b04575b611af38183610d21565b810190610db7565b50505090611848565b503d611ae9565b610e0d565b611b199061019b565b90565b611b2590611b10565b90565b611b31906101b7565b90565b611b50611b4b611b46600784906106e4565b6109d4565b610a43565b611b6e611b5c82611b1c565b33611b6630611b28565b90859261204c565b611b82611b7d600483906101cf565b610c74565b90611ba760a0611b9184610233565b63feaf968c90611b9f610132565b938492610d4a565b82528180611bb760048201610506565b03915afa8015611cee57611bdc602091611bf2935f80929050611cbd575b5094610233565b63313ce56790611bea610132565b938492610d4a565b82528180611c0260048201610506565b03915afa8015611cb857611c3d915f91611c8a575b50611c37611c31339495611c2b8891610f2a565b90610f5a565b91610f8f565b90610fbf565b611c70611c6a7fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b93611c85611c7c610132565b92839283611584565b0390a3565b611cab915060203d8111611cb1575b611ca38183610d21565b810190610e46565b5f611c17565b503d611c99565b610e0d565b611cde915060a03d8111611ce7575b611cd68183610d21565b810190610db7565b50505090611bd5565b503d611ccc565b610e0d565b90611cfd9161179d565b565b611d1090611d0b611f06565b611d12565b565b80611d2d611d27611d225f610a8b565b61014b565b9161014b565b14611d3d57611d3b90611f7e565b565b611d67611d495f610a8b565b611d51610132565b918291631e4fbdf760e01b8352600483016102f2565b0390fd5b611d7490611cff565b565b5f7f4f6e6c792061646d696e2063616e207769746864726177000000000000000000910152565b611daa60176020926109e1565b611db381611d76565b0190565b611dcc9060208101905f818303910152611d9d565b90565b15611dd657565b611dde610132565b62461bcd60e51b815280611df460048201611db7565b0390fd5b611e019061019b565b90565b611e0d90611df8565b90565b611e19906101b7565b90565b611e4133611e3b611e35611e30600161177b565b61014b565b9161014b565b14611dcf565b80611e5c611e56611e515f610a8b565b61014b565b9161014b565b145f14611ee4575f808080611e81611e7c611e77600161177b565b611e04565b611e10565b8690828215611edb575bf115611ed6575b611ed1611ebf7feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d926101c3565b92611ec8610132565b918291826103a4565b0390a2565b610e0d565b506108fc611e8b565b611f01611ef082611b1c565b611efa600161177b565b84916120bf565b611e92565b611f0e611788565b611f27611f21611f1c61210d565b61014b565b9161014b565b03611f2e57565b611f57611f3961210d565b611f41610132565b91829163118cdaa760e01b8352600483016102f2565b0390fd5b90565b90611f73611f6e611f7a926101c3565b611f5b565b8254610b31565b9055565b611f875f61177b565b611f91825f611f5e565b90611fc5611fbf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101c3565b916101c3565b91611fce610132565b80611fd881610506565b0390a3565b611fe6906101b7565b90565b63ffffffff1690565b63ffffffff60e01b1690565b61201261200d61201792611fe9565b610d4a565b611ff2565b90565b60409061204361204a949695939661203960608401985f8501906102e5565b60208301906102e5565b0190610397565b565b60049261208661209a9593612095939461206d6323b872dd92949192611ffe565b93612076610132565b978895602087019081520161201a565b60208201810382520383610d21565b612139565b565b9160206120bd9294936120b660408201965f8301906102e5565b0190610397565b565b9061210661210b936120f7600494936120de63a9059cbb919391611ffe565b926120e7610132565b968794602086019081520161209c565b60208201810382520383610d21565b612139565b565b612115611763565b503390565b90565b61213161212c6121369261211a565b610198565b610394565b90565b905f602091612146610f02565b5061214f610f02565b50828151910182855af1156121e9573d5f519061217461216e5f611027565b91610394565b145f146121cf575061218581611fdd565b3b6121986121925f611027565b91610394565b145b6121a15750565b6121ad6121cb91611fdd565b6121b5610132565b918291635274afe760e01b8352600483016102f2565b0390fd5b6121e26121dc600161211d565b91610394565b141561219a565b6040513d5f823e3d90fdfea26469706673582212200889e622fac9babfc780bd286dd1059aadc7cbbd9e2a47bd79f5e746d6da1cc464736f6c63430008180033a2646970667358221220c42e5a45338ff078e3b1e47edecbae2c4f18a11d9d9d76645bf7f6228dc4917564736f6c63430008180033", + "nonce": "0xa", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x57484f5667f752a3cda65b815d986e366100d89b7208659b6e51ed72854f3469", + "transactionType": "CALL", + "contractName": "QuestFactory", + "contractAddress": "0xdc191c431636ce6fc3297fb05f97668e59490945", + "function": "createQuest(uint256)", + "arguments": [ + "1000000000000000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0xdc191c431636ce6fc3297fb05f97668e59490945", + "gas": "0x2a980c", + "value": "0x0", + "input": "0x9a39cb370000000000000000000000000000000000000000000000000de0b6b3a7640000", + "nonce": "0xb", + "chainId": "0xaa36a7" + }, + "additionalContracts": [ + { + "transactionType": "CREATE", + "address": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "initCode": "0x60806040523462000038576200001f620000186200015c565b9162000478565b620000296200003e565b61222a6200065e823961222a90f35b62000044565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90620000729062000048565b810190811060018060401b038211176200008b57604052565b62000052565b90620000a8620000a06200003e565b928362000066565b565b5f80fd5b60018060a01b031690565b620000c490620000ae565b90565b620000d281620000b9565b03620000da57565b5f80fd5b90505190620000ed82620000c7565b565b90565b620000fd81620000ef565b036200010557565b5f80fd5b905051906200011882620000f2565b565b909160608284031262000156576200015362000139845f8501620000de565b9362000149816020860162000109565b93604001620000de565b90565b620000aa565b6200017f6200288880380380620001738162000091565b9283398101906200011a565b909192565b90565b90565b620001a36200019d620001a99262000184565b62000187565b620000ae565b90565b620001b7906200018a565b90565b60209181520190565b5f7f496e76616c69642061646d696e20616464726573730000000000000000000000910152565b620001f96015602092620001ba565b6200020481620001c3565b0190565b6200021f9060208101905f818303910152620001ea565b90565b156200022a57565b620002346200003e565b62461bcd60e51b8152806200024c6004820162000208565b0390fd5b5f7f496e76616c69642063726561746f722061646472657373000000000000000000910152565b620002866017602092620001ba565b620002918162000250565b0190565b620002ac9060208101905f81830391015262000277565b90565b15620002b757565b620002c16200003e565b62461bcd60e51b815280620002d96004820162000295565b0390fd5b620002f6620002f0620002fc9262000184565b62000187565b620000ef565b90565b5f7f496e76616c69642074617267657420616d6f756e740000000000000000000000910152565b620003356015602092620001ba565b6200034081620002ff565b0190565b6200035b9060208101905f81830391015262000326565b90565b156200036657565b620003706200003e565b62461bcd60e51b815280620003886004820162000344565b0390fd5b5f1b90565b90620003a460018060a01b03916200038c565b9181191691161790565b620003c7620003c1620003cd92620000ae565b62000187565b620000ae565b90565b620003db90620003ae565b90565b620003e990620003d0565b90565b90565b9062000409620004036200041192620003de565b620003ec565b825462000391565b9055565b90620004235f19916200038c565b9181191691161790565b62000446620004406200044c92620000ef565b62000187565b620000ef565b90565b90565b906200046c6200046662000474926200042d565b6200044f565b825462000415565b9055565b620005269291620005166200051e9262000492816200054e565b620004bf81620004b7620004b0620004aa5f620001ac565b620000b9565b91620000b9565b141562000222565b620004ec85620004e4620004dd620004d75f620001ac565b620000b9565b91620000b9565b1415620002af565b6200050e8362000507620005005f620002dd565b91620000ef565b116200035e565b6001620003ef565b600262000452565b6003620003ef565b565b6200053390620000b9565b9052565b91906200054c905f6020850194019062000528565b565b806200056f62000568620005625f620001ac565b620000b9565b91620000b9565b1462000582576200058090620005f2565b565b620005b2620005915f620001ac565b6200059b6200003e565b918291631e4fbdf760e01b83526004830162000537565b0390fd5b5f1c90565b60018060a01b031690565b620005d5620005db91620005b6565b620005bb565b90565b620005ea9054620005c6565b90565b5f0190565b620005fd5f620005de565b62000609825f620003ef565b90620006416200063a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003de565b91620003de565b916200064c6200003e565b806200065881620005ed565b0390a356fe60806040526004361015610013575b6108c5565b61001d5f3561012c565b8063013745181461012757806302d05d3f1461012257806328031cf71461011d5780632b0d1cda146101185780634857317e146101135780635bc35ae81461010e57806367a74ddc14610109578063715018a61461010457806383914540146100ff5780638b4c40b0146100fa5780638da5cb5b146100f5578063953b8fb8146100f0578063e744092e146100eb578063ef99fb02146100e6578063f2fde38b146100e1578063f3fef3a3146100dc5763f851a4400361000e57610890565b61084d565b61081a565b6107e6565b610761565b6106af565b61066b565b610642565b61060d565b6105a0565b61056c565b61050b565b61047c565b610407565b6103b9565b610307565b610261565b60e01c90565b60405190565b5f80fd5b5f80fd5b60018060a01b031690565b61015490610140565b90565b6101608161014b565b0361016757565b5f80fd5b9050359061017882610157565b565b9060208282031261019357610190915f0161016b565b90565b61013c565b90565b6101af6101aa6101b492610140565b610198565b610140565b90565b6101c09061019b565b90565b6101cc906101b7565b90565b906101d9906101c3565b5f5260205260405f2090565b1c90565b60018060a01b031690565b61020490600861020993026101e5565b6101e9565b90565b9061021791546101f4565b90565b6102309061022b6004915f926101cf565b61020c565b90565b61023c906101b7565b90565b61024890610233565b9052565b919061025f905f6020850194019061023f565b565b346102915761028d61027c61027736600461017a565b61021a565b610284610132565b9182918261024c565b0390f35b610138565b5f9103126102a057565b61013c565b60018060a01b031690565b6102c09060086102c593026101e5565b6102a5565b90565b906102d391546102b0565b90565b6102e260035f906102c8565b90565b6102ee9061014b565b9052565b9190610305905f602085019401906102e5565b565b3461033757610317366004610296565b6103336103226102d6565b61032a610132565b918291826102f2565b0390f35b610138565b90610346906101c3565b5f5260205260405f2090565b90565b61036590600861036a93026101e5565b610352565b90565b906103789154610355565b90565b6103919061038c6006915f9261033c565b61036d565b90565b90565b6103a090610394565b9052565b91906103b7905f60208501940190610397565b565b346103e9576103e56103d46103cf36600461017a565b61037b565b6103dc610132565b918291826103a4565b0390f35b610138565b610404906103ff6005915f9261033c565b61036d565b90565b346104375761043361042261041d36600461017a565b6103ee565b61042a610132565b918291826103a4565b0390f35b610138565b90565b61045361044e6104589261043c565b610198565b610394565b90565b61046e69010f0cf064dd5920000061043f565b90565b61047961045b565b90565b346104ac5761048c366004610296565b6104a8610497610471565b61049f610132565b918291826103a4565b0390f35b610138565b151590565b6104bf816104b1565b036104c657565b5f80fd5b905035906104d7826104b6565b565b919060408382031261050157806104f56104fe925f860161016b565b936020016104ca565b90565b61013c565b5f0190565b3461053a5761052461051e3660046104d9565b9061099b565b61052c610132565b8061053681610506565b0390f35b610138565b9190604083820312610567578061055b610564925f860161016b565b9360200161016b565b90565b61013c565b3461059b5761058561057f36600461053f565b90610c25565b61058d610132565b8061059781610506565b0390f35b610138565b346105ce576105b0366004610296565b6105b8610c56565b6105c0610132565b806105ca81610506565b0390f35b610138565b90565b6105ea6105e56105ef926105d3565b610198565b610394565b90565b6105ff6301e133806105d6565b90565b61060a6105f2565b90565b3461063d5761061d366004610296565b610639610628610602565b610630610132565b918291826103a4565b0390f35b610138565b61064d366004610296565b610655611759565b61065d610132565b8061066781610506565b0390f35b3461069b5761067b366004610296565b610697610686611788565b61068e610132565b918291826102f2565b0390f35b610138565b6106ac60025f9061036d565b90565b346106df576106bf366004610296565b6106db6106ca6106a0565b6106d2610132565b918291826103a4565b0390f35b610138565b906106ee906101c3565b5f5260205260405f2090565b60ff1690565b61071090600861071593026101e5565b6106fa565b90565b906107239154610700565b90565b61073c906107376007915f926106e4565b610718565b90565b610748906104b1565b9052565b919061075f905f6020850194019061073f565b565b346107915761078d61077c61077736600461017a565b610726565b610784610132565b9182918261074c565b0390f35b610138565b61079f81610394565b036107a657565b5f80fd5b905035906107b782610796565b565b91906040838203126107e157806107d56107de925f860161016b565b936020016107aa565b90565b61013c565b34610815576107ff6107f93660046107b9565b90611cf3565b610807610132565b8061081181610506565b0390f35b610138565b346108485761083261082d36600461017a565b611d6b565b61083a610132565b8061084481610506565b0390f35b610138565b3461087c576108666108603660046107b9565b90611e1c565b61086e610132565b8061087881610506565b0390f35b610138565b61088d60015f906102c8565b90565b346108c0576108a0366004610296565b6108bc6108ab610881565b6108b3610132565b918291826102f2565b0390f35b610138565b5f80fd5b906108db916108d6611f06565b61094a565b565b5f1b90565b906108ee60ff916108dd565b9181191691161790565b610901906104b1565b90565b90565b9061091c610917610923926108f8565b610904565b82546108e2565b9055565b91602061094892949361094160408201965f8301906102e5565b019061073f565b565b61095f8261095a600784906106e4565b610907565b907f9a8e30a8658b96ab3f034ce4bac6806278b4aee5880ccdd1ac35e4ed5bb31d239161099661098d610132565b92839283610927565b0390a1565b906109a5916108c9565b565b906109b9916109b4611f06565b610b7b565b565b5f1c90565b6109cc6109d1916109bb565b6106fa565b90565b6109de90546109c0565b90565b60209181520190565b5f7f546f6b656e206e6f7420616c6c6f776564000000000000000000000000000000910152565b610a1e60116020926109e1565b610a27816109ea565b0190565b610a409060208101905f818303910152610a11565b90565b15610a4a57565b610a52610132565b62461bcd60e51b815280610a6860048201610a2b565b0390fd5b90565b610a83610a7e610a8892610a6c565b610198565b610140565b90565b610a9490610a6f565b90565b5f7f496e76616c6964206f7261636c65206164647265737300000000000000000000910152565b610acb60166020926109e1565b610ad481610a97565b0190565b610aed9060208101905f818303910152610abe565b90565b15610af757565b610aff610132565b62461bcd60e51b815280610b1560048201610ad8565b0390fd5b610b229061019b565b90565b610b2e90610b19565b90565b90610b4260018060a01b03916108dd565b9181191691161790565b610b5590610b19565b90565b90565b90610b70610b6b610b7792610b4c565b610b58565b8254610b31565b9055565b610b97610b92610b8d600784906106e4565b6109d4565b610a43565b610bbc82610bb5610baf610baa5f610a8b565b61014b565b9161014b565b1415610af0565b610bd9610bc883610b25565b610bd4600484906101cf565b610b5b565b90610c0d610c077f78f66d11c0fe8f0ce8dec169ad57f3438085a89b7371335b6e2b10e9685d7ecc936101c3565b916101c3565b91610c16610132565b80610c2081610506565b0390a3565b90610c2f916109a7565b565b610c39611f06565b610c41610c43565b565b610c54610c4f5f610a8b565b611f7e565b565b610c5e610c31565b565b610c6c610c71916109bb565b6101e9565b90565b610c7e9054610c60565b90565b5f7f4e6f207072696365206f7261636c652073657420666f7220746f6b656e000000910152565b610cb5601d6020926109e1565b610cbe81610c81565b0190565b610cd79060208101905f818303910152610ca8565b90565b15610ce157565b610ce9610132565b62461bcd60e51b815280610cff60048201610cc2565b0390fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90610d2b90610d03565b810190811067ffffffffffffffff821117610d4557604052565b610d0d565b60e01b90565b69ffffffffffffffffffff1690565b610d6881610d50565b03610d6f57565b5f80fd5b90505190610d8082610d5f565b565b90565b610d8e81610d82565b03610d9557565b5f80fd5b90505190610da682610d85565b565b90505190610db582610796565b565b919060a083820312610e0857610dcf815f8501610d73565b92610ddd8260208301610d99565b92610e05610dee8460408501610da8565b93610dfc8160608601610da8565b93608001610d73565b90565b61013c565b610e15610132565b3d5f823e3d90fd5b60ff1690565b610e2c81610e1d565b03610e3357565b5f80fd5b90505190610e4482610e23565b565b90602082820312610e5f57610e5c915f01610e37565b90565b61013c565b610e78610e73610e7d92610a6c565b610198565b610d82565b90565b5f7f496e76616c696420707269636500000000000000000000000000000000000000910152565b610eb4600d6020926109e1565b610ebd81610e80565b0190565b610ed69060208101905f818303910152610ea7565b90565b15610ee057565b610ee8610132565b62461bcd60e51b815280610efe60048201610ec1565b0390fd5b5f90565b610f0f9061019b565b90565b610f1b90610f06565b90565b610f27906101b7565b90565b610f3e610f39610f4392610d82565b610198565b610394565b90565b634e487b7160e01b5f52601160045260245ffd5b610f69610f6f91939293610394565b92610394565b91610f7b838202610394565b928184041490151715610f8a57565b610f46565b610f9890610e1d565b604d8111610fa657600a0a90565b610f46565b634e487b7160e01b5f52601260045260245ffd5b610fcb610fd191610394565b91610394565b908115610fdc570490565b610fab565b610fed610ff2916109bb565b610352565b90565b610fff9054610fe1565b90565b61101161101791939293610394565b92610394565b820391821161102257565b610f46565b61103b61103661104092610a6c565b610198565b610394565b90565b9061104f5f19916108dd565b9181191691161790565b61106d61106861107292610394565b610198565b610394565b90565b90565b9061108d61108861109492611059565b611075565b8254611043565b9055565b6110a76110ad91939293610394565b92610394565b82018092116110b857565b610f46565b60207f7461637420696e666f4065746865726775696c642e78797a0000000000000000917f446f6e6174696f6e20657863656564732024353030302f796561722e20436f6e5f8201520152565b61111760386040926109e1565b611120816110bd565b0190565b6111399060208101905f81830391015261110a565b90565b1561114357565b61114b610132565b62461bcd60e51b81528061116160048201611124565b0390fd5b61116e5f610a8b565b34906111b061118f61118a611185600485906101cf565b610c74565b610233565b6111a96111a361119e5f610a8b565b61014b565b9161014b565b1415610cda565b6111c46111bf600483906101cf565b610c74565b6111e860a06111d283610233565b63feaf968c906111e0610132565b938492610d4a565b825281806111f860048201610506565b03915afa80156114d75761121d602091611233935f809290506114a6575b5093610233565b63313ce5679061122b610132565b938492610d4a565b8252818061124360048201610506565b03915afa9081156114a1575f91611473575b50916112738261126d6112675f610e64565b91610d82565b13610ed9565b61127b610f02565b508061129761129161128c5f610a8b565b61014b565b9161014b565b145f146113ac5750906112c36112bd6112c9936112b761136b9691610f2a565b90610f5a565b91610f8f565b90610fbf565b5b6112e76112e16112dc6006339061033c565b610ff5565b42611002565b6113006112fa6112f56105f2565b610394565b91610394565b11611375575b61134761132761132061131b6005339061033c565b610ff5565b8390611098565b61134061133a61133561045b565b610394565b91610394565b111561113c565b6113656113566005339061033c565b9161136083610ff5565b611098565b90611078565b6113736115a7565b565b6113926113815f611027565b61138d6005339061033c565b611078565b6113a7426113a26006339061033c565b611078565b611306565b9060206113c46113bf6113da9594610f12565b610f1e565b63313ce567906113d2610132565b958692610d4a565b825281806113ea60048201610506565b03915afa90811561146e5761136b9461142961142361142f9361141d6114359661143b995f91611440575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6112ca565b611461915060203d8111611467575b6114598183610d21565b810190610e46565b5f611415565b503d61144f565b610e0d565b611494915060203d811161149a575b61148c8183610d21565b810190610e46565b5f611255565b503d611482565b610e0d565b6114c7915060a03d81116114d0575b6114bf8183610d21565b810190610db7565b50505090611216565b503d6114b5565b610e0d565b60207f7468616e20300000000000000000000000000000000000000000000000000000917f446f6e6174696f6e20616d6f756e74206d7573742062652067726561746572205f8201520152565b61153660266040926109e1565b61153f816114dc565b0190565b6115589060208101905f818303910152611529565b90565b1561156257565b61156a610132565b62461bcd60e51b81528061158060048201611543565b0390fd5b9160206115a592949361159e60408201965f830190610397565b0190610397565b565b6115c3346115bd6115b75f611027565b91610394565b1161155b565b6115df6115da60046115d45f610a8b565b906101cf565b610c74565b61160360a06115ed83610233565b63feaf968c906115fb610132565b938492610d4a565b8252818061161360048201610506565b03915afa80156117545761163860209161164e935f80929050611723575b5093610233565b63313ce56790611646610132565b938492610d4a565b8252818061165e60048201610506565b03915afa90811561171e575f916116f0575b50336116a361167e5f610a8b565b9261169d61169734966116913491610f2a565b90610f5a565b91610f8f565b90610fbf565b6116d66116d07fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b936116eb6116e2610132565b92839283611584565b0390a3565b611711915060203d8111611717575b6117098183610d21565b810190610e46565b5f611670565b503d6116ff565b610e0d565b611744915060a03d811161174d575b61173c8183610d21565b810190610db7565b50505090611631565b503d611732565b610e0d565b611761611165565b565b5f90565b611773611778916109bb565b6102a5565b90565b6117859054611767565b90565b611790611763565b5061179a5f61177b565b90565b908181926117e16117c06117bb6117b6600485906101cf565b610c74565b610233565b6117da6117d46117cf5f610a8b565b61014b565b9161014b565b1415610cda565b6117f56117f0600483906101cf565b610c74565b9361181a60a061180487610233565b63feaf968c90611812610132565b938492610d4a565b8252818061182a60048201610506565b03915afa8015611b0b5761184f602091611865935f80929050611ada575b5097610233565b63313ce5679061185d610132565b938492610d4a565b8252818061187560048201610506565b03915afa908115611ad5575f91611aa7575b50916118a58661189f6118995f610e64565b91610d82565b13610ed9565b6118ad610f02565b50806118c96118c36118be5f610a8b565b61014b565b9161014b565b145f146119de57506119a0916118f86118f26119a5976118ec6118fe9591610f2a565b90610f5a565b91610f8f565b90610fbf565b5b61191c6119166119116006339061033c565b610ff5565b42611002565b61193561192f61192a6105f2565b610394565b91610394565b116119a7575b61197c61195c6119556119506005339061033c565b610ff5565b8390611098565b61197561196f61196a61045b565b610394565b91610394565b111561113c565b61199a61198b6005339061033c565b9161199583610ff5565b611098565b90611078565b611b34565b565b6119c46119b35f611027565b6119bf6005339061033c565b611078565b6119d9426119d46006339061033c565b611078565b61193b565b9160206119f66119f1611a0c9495610f12565b610f1e565b63313ce56790611a04610132565b948592610d4a565b82528180611a1c60048201610506565b03915afa8015611aa257611a636119a094611a5d611a576119a59a611a51611a6996611a6f995f91611a74575b509491610f2a565b90610f5a565b91610f8f565b90610fbf565b91610f8f565b90610fbf565b6118ff565b611a95915060203d8111611a9b575b611a8d8183610d21565b810190610e46565b5f611a49565b503d611a83565b610e0d565b611ac8915060203d8111611ace575b611ac08183610d21565b810190610e46565b5f611887565b503d611ab6565b610e0d565b611afb915060a03d8111611b04575b611af38183610d21565b810190610db7565b50505090611848565b503d611ae9565b610e0d565b611b199061019b565b90565b611b2590611b10565b90565b611b31906101b7565b90565b611b50611b4b611b46600784906106e4565b6109d4565b610a43565b611b6e611b5c82611b1c565b33611b6630611b28565b90859261204c565b611b82611b7d600483906101cf565b610c74565b90611ba760a0611b9184610233565b63feaf968c90611b9f610132565b938492610d4a565b82528180611bb760048201610506565b03915afa8015611cee57611bdc602091611bf2935f80929050611cbd575b5094610233565b63313ce56790611bea610132565b938492610d4a565b82528180611c0260048201610506565b03915afa8015611cb857611c3d915f91611c8a575b50611c37611c31339495611c2b8891610f2a565b90610f5a565b91610f8f565b90610fbf565b611c70611c6a7fce9409ee3dc10e35de83dda0f830e4a13935452188fe71a956b850ecb839425f936101c3565b936101c3565b93611c85611c7c610132565b92839283611584565b0390a3565b611cab915060203d8111611cb1575b611ca38183610d21565b810190610e46565b5f611c17565b503d611c99565b610e0d565b611cde915060a03d8111611ce7575b611cd68183610d21565b810190610db7565b50505090611bd5565b503d611ccc565b610e0d565b90611cfd9161179d565b565b611d1090611d0b611f06565b611d12565b565b80611d2d611d27611d225f610a8b565b61014b565b9161014b565b14611d3d57611d3b90611f7e565b565b611d67611d495f610a8b565b611d51610132565b918291631e4fbdf760e01b8352600483016102f2565b0390fd5b611d7490611cff565b565b5f7f4f6e6c792061646d696e2063616e207769746864726177000000000000000000910152565b611daa60176020926109e1565b611db381611d76565b0190565b611dcc9060208101905f818303910152611d9d565b90565b15611dd657565b611dde610132565b62461bcd60e51b815280611df460048201611db7565b0390fd5b611e019061019b565b90565b611e0d90611df8565b90565b611e19906101b7565b90565b611e4133611e3b611e35611e30600161177b565b61014b565b9161014b565b14611dcf565b80611e5c611e56611e515f610a8b565b61014b565b9161014b565b145f14611ee4575f808080611e81611e7c611e77600161177b565b611e04565b611e10565b8690828215611edb575bf115611ed6575b611ed1611ebf7feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d926101c3565b92611ec8610132565b918291826103a4565b0390a2565b610e0d565b506108fc611e8b565b611f01611ef082611b1c565b611efa600161177b565b84916120bf565b611e92565b611f0e611788565b611f27611f21611f1c61210d565b61014b565b9161014b565b03611f2e57565b611f57611f3961210d565b611f41610132565b91829163118cdaa760e01b8352600483016102f2565b0390fd5b90565b90611f73611f6e611f7a926101c3565b611f5b565b8254610b31565b9055565b611f875f61177b565b611f91825f611f5e565b90611fc5611fbf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101c3565b916101c3565b91611fce610132565b80611fd881610506565b0390a3565b611fe6906101b7565b90565b63ffffffff1690565b63ffffffff60e01b1690565b61201261200d61201792611fe9565b610d4a565b611ff2565b90565b60409061204361204a949695939661203960608401985f8501906102e5565b60208301906102e5565b0190610397565b565b60049261208661209a9593612095939461206d6323b872dd92949192611ffe565b93612076610132565b978895602087019081520161201a565b60208201810382520383610d21565b612139565b565b9160206120bd9294936120b660408201965f8301906102e5565b0190610397565b565b9061210661210b936120f7600494936120de63a9059cbb919391611ffe565b926120e7610132565b968794602086019081520161209c565b60208201810382520383610d21565b612139565b565b612115611763565b503390565b90565b61213161212c6121369261211a565b610198565b610394565b90565b905f602091612146610f02565b5061214f610f02565b50828151910182855af1156121e9573d5f519061217461216e5f611027565b91610394565b145f146121cf575061218581611fdd565b3b6121986121925f611027565b91610394565b145b6121a15750565b6121ad6121cb91611fdd565b6121b5610132565b918291635274afe760e01b8352600483016102f2565b0390fd5b6121e26121dc600161211d565b91610394565b141561219a565b6040513d5f823e3d90fdfea26469706673582212200889e622fac9babfc780bd286dd1059aadc7cbbd9e2a47bd79f5e746d6da1cc464736f6c63430008180033000000000000000000000000cd949192344f41de8d99336a4f32bb0b9c04e5770000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000cd949192344f41de8d99336a4f32bb0b9c04e577" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xb6cb6ace3971a7bd2960031162a868a2c56a893bd554ede5a1cd56d2a5eed2bf", + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "allowToken(address,bool)", + "arguments": [ + "0x0000000000000000000000000000000000000000", + "true" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x10788", + "value": "0x0", + "input": "0x5bc35ae800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xc", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa800825f2c6b923e02ae9c008d56a2928b4c720131ae6f067daec0fd850916c9", + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "allowToken(address,bool)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "true" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x108d4", + "value": "0x0", + "input": "0x5bc35ae800000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c80000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xd", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "setPriceOracle(address,address)", + "arguments": [ + "0x0000000000000000000000000000000000000000", + "0x694AA1769357215DE4FAC081bf1f309aDC325306" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x12e05", + "value": "0x0", + "input": "0x67a74ddc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000694aa1769357215de4fac081bf1f309adc325306", + "nonce": "0xe", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "setPriceOracle(address,address)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "0xA2F78ab2355fe2f984D808B5CeE7FD0A93D5270E" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x12f64", + "value": "0x0", + "input": "0x67a74ddc00000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8000000000000000000000000a2f78ab2355fe2f984d808b5cee7fd0a93d5270e", + "nonce": "0xf", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "donateETH()", + "arguments": [], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x24742", + "value": "0x16345785d8a0000", + "input": "0x8b4c40b0", + "nonce": "0x10", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8", + "function": "approve(address,uint256)", + "arguments": [ + "0x84BBa5C7C9238202784d4a8B596C4998130F1009", + "100000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8", + "gas": "0xf959", + "value": "0x0", + "input": "0x095ea7b300000000000000000000000084bba5c7c9238202784d4a8b596c4998130f10090000000000000000000000000000000000000000000000000000000005f5e100", + "nonce": "0x11", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "donateERC20(address,uint256)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "100000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0x26176", + "value": "0x0", + "input": "0xef99fb0200000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c80000000000000000000000000000000000000000000000000000000005f5e100", + "nonce": "0x12", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "withdraw(address,uint256)", + "arguments": [ + "0x0000000000000000000000000000000000000000", + "50000000000000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0xb958", + "value": "0x0", + "input": "0xf3fef3a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1a2bc2ec50000", + "nonce": "0x13", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "QuestDonation", + "contractAddress": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "function": "withdraw(address,uint256)", + "arguments": [ + "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + "50000000" + ], + "transaction": { + "from": "0xcd949192344f41de8d99336a4f32bb0b9c04e577", + "to": "0x84bba5c7c9238202784d4a8b596c4998130f1009", + "gas": "0xee9c", + "value": "0x0", + "input": "0xf3fef3a300000000000000000000000094a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c80000000000000000000000000000000000000000000000000000000002faf080", + "nonce": "0x14", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xde6fee9a3053114bf4eb779a9bb871a359c0d6b6ff7178451d5b1c8a5322531b", + "0x57484f5667f752a3cda65b815d986e366100d89b7208659b6e51ed72854f3469", + "0xb6cb6ace3971a7bd2960031162a868a2c56a893bd554ede5a1cd56d2a5eed2bf", + "0xa800825f2c6b923e02ae9c008d56a2928b4c720131ae6f067daec0fd850916c9" + ], + "returns": { + "0": { + "internal_type": "contract QuestFactory", + "value": "0xdc191c431636Ce6Fc3297FB05F97668e59490945" + } + }, + "timestamp": 1739055178, + "chain": 11155111, + "commit": "52cac7d" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 25b918f..52b4115 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,5 +2,13 @@ src = "src" out = "out" libs = ["lib"] +via_ir = true + +[rpc_endpoints] +sepolia = "${SEPOLIA_RPC_URL}" + + # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options + + diff --git a/script/1_DeployQuest.s.sol b/script/1_DeployQuest.s.sol new file mode 100644 index 0000000..0650569 --- /dev/null +++ b/script/1_DeployQuest.s.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {Script, console} from "forge-std/Script.sol"; +import {Helper} from "./Helper.sol"; +import {QuestFactory} from "../src/QuestFactory.sol"; + + + +contract DeployQuestScript is Script, Helper { + + function run() external returns (address questFactoryAddress, address questDonationAddress) { + uint256 deployerPrivateKey = getDeployerPrivateKey(); + vm.startBroadcast(deployerPrivateKey); + + // Deploy QuestFactory with constructor parameters + // Sets msg.sender as admin for factory and all future quests created + QuestFactory questFactory = new QuestFactory(); + questFactoryAddress = address(questFactory); + + // Create a new Quest with a target amount (for example, 1 ether) + // Msg.sender is the creator of the quest, but only admin can withdraw funds + uint256 targetAmount = 1 ether; + questDonationAddress = questFactory.createQuest(targetAmount); + + // Log deployed addresses + console.log("QuestFactory deployed to:", questFactoryAddress); + console.log("QuestDonation deployed to:", questDonationAddress); + + vm.stopBroadcast(); + } + +} + \ No newline at end of file diff --git a/script/2_SetupQuest.s.sol b/script/2_SetupQuest.s.sol new file mode 100644 index 0000000..008932f --- /dev/null +++ b/script/2_SetupQuest.s.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {Script, console} from "forge-std/Script.sol"; +import {Helper} from "./Helper.sol"; +import {QuestDonation} from "../src/QuestDonation.sol"; + + +contract SetupQuestScript is Script, Helper { + + function run(address questDonationAddress) external { + uint256 deployerPrivateKey = getDeployerPrivateKey(); + vm.startBroadcast(deployerPrivateKey); + + QuestDonation questDonation = QuestDonation(questDonationAddress); + + // Allow tokens + // ETH is not already allowed by default + questDonation.allowToken(address(0), true); + questDonation.allowToken(USDC, true); + console.log("ETH address(0) and USDC set as allowed tokens"); + + // Set price oracles + questDonation.setPriceOracle(address(0), ETH_USD_FEED); // For Native ETH + questDonation.setPriceOracle(USDC, USDC_USD_FEED); // USDC Oracle + console.log("Price oracles set for ETH and USDC"); + + vm.stopBroadcast(); + } + +} + \ No newline at end of file diff --git a/script/3_InteractionQuest.s.sol b/script/3_InteractionQuest.s.sol new file mode 100644 index 0000000..9038699 --- /dev/null +++ b/script/3_InteractionQuest.s.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {Script, console} from "forge-std/Script.sol"; +import {Helper} from "./Helper.sol"; +import {QuestDonation} from "../src/QuestDonation.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + + +contract InteractionQuestScript is Script, Helper { + + function run(address questDonationAddress) external { + uint256 deployerPrivateKey = getDeployerPrivateKey(); + vm.startBroadcast(deployerPrivateKey); + + QuestDonation questDonation = QuestDonation(questDonationAddress); + + // DEPLOYER WALLET + // CHECK ETH BALANCE + address deployerAddress = vm.addr(deployerPrivateKey); + console.log("Address:", deployerAddress); + console.log("ETH Balance: ", deployerAddress.balance/ 10**18); + // CHECK USDC BALANCE + console.log("USDC balance:", IERC20(USDC).balanceOf(address(deployerAddress))/ 10**6); + + + // Make donations + // ETH donation + questDonation.donateETH{value: 0.1 ether}(); // Donate ETH + console.log("Donated 0.1 ETH"); + + // USDC donation + uint256 usdcAmount = 100 * 10**6; + IERC20(USDC).approve(address(questDonation), usdcAmount); // DONATE USDC + questDonation.donateERC20(USDC, usdcAmount); + console.log("Donated 100 USDC"); + + + // Log balances after donations + console.log("===QUEST CONTRACT: Balances after donations ==="); + console.log("ETH balance:", address(questDonation).balance); + console.log("USDC balance:", IERC20(USDC).balanceOf(address(questDonation))); + + + // Withdraw funds + uint256 ethBalance = address(questDonation).balance; + uint256 usdcBalance = IERC20(USDC).balanceOf(address(questDonation)); + + if (ethBalance > 0) { + questDonation.withdraw(address(0), ethBalance/2); // WITHDRAW ETH + console.log("Withdrawn ETH balance:", ethBalance/2); + } + + if (usdcBalance > 0) { + questDonation.withdraw(USDC, usdcBalance/2); // EITHDRAW USDC + console.log("Withdrawn USDC balance:", usdcBalance/2); + } + + // Log balances after withdrawals + console.log("===QUEST CONTRACT: Balances after withdrawals ==="); + console.log("ETH balance:", address(questDonation).balance); + console.log("USDC balance:", IERC20(USDC).balanceOf(address(questDonation))); + + vm.stopBroadcast(); + } + +} + \ No newline at end of file diff --git a/script/Counter.s.sol b/script/Counter.s.sol deleted file mode 100644 index cdc1fe9..0000000 --- a/script/Counter.s.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Script, console} from "forge-std/Script.sol"; -import {Counter} from "../src/Counter.sol"; - -contract CounterScript is Script { - Counter public counter; - - function setUp() public {} - - function run() public { - vm.startBroadcast(); - - counter = new Counter(); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol new file mode 100644 index 0000000..909b753 --- /dev/null +++ b/script/Deploy.s.sol @@ -0,0 +1,25 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Helper} from "./Helper.sol"; +import {DeployQuestScript} from "./1_DeployQuest.s.sol"; +import {SetupQuestScript} from "./2_SetupQuest.s.sol"; +import {InteractionQuestScript} from "./3_InteractionQuest.s.sol"; + +contract DeployScript is Helper { + function run() external { + + //DEPLOYS FACTORY AND FIRST EXAMPLE QUEST + DeployQuestScript deployQuest = new DeployQuestScript(); + ( , address firstQuest) = deployQuest.run(); + + // ALLOW TOKENS AND ADD ORACLE + SetupQuestScript setupQuest = new SetupQuestScript(); + setupQuest.run(firstQuest); + + // INTERACTING WITH FIRST QUEST + InteractionQuestScript interactingQuest = new InteractionQuestScript(); + interactingQuest.run(firstQuest); + + } +} \ No newline at end of file diff --git a/script/Helper.sol b/script/Helper.sol new file mode 100644 index 0000000..239bdde --- /dev/null +++ b/script/Helper.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.24; +import {Script} from "forge-std/Script.sol"; + + +contract Helper is Script{ + address constant USDC = 0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8; + + // Chainlink Price Feed addresses + address constant ETH_USD_FEED = 0x694AA1769357215DE4FAC081bf1f309aDC325306; + address constant USDC_USD_FEED = 0xA2F78ab2355fe2f984D808B5CeE7FD0A93D5270E; + error InvalidPrivateKey(string); + + + function getDeployerPrivateKey() internal view returns (uint256 deployerPrivateKey) { + deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + if (deployerPrivateKey == 0) { + revert InvalidPrivateKey( + "You don't have a deployer account. Make sure you have set DEPLOYER_PRIVATE_KEY in .env or use `yarn generate` to generate a new random account" + ); + } + } + + +} \ No newline at end of file diff --git a/src/Counter.sol b/src/Counter.sol deleted file mode 100644 index aded799..0000000 --- a/src/Counter.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -contract Counter { - uint256 public number; - - function setNumber(uint256 newNumber) public { - number = newNumber; - } - - function increment() public { - number++; - } -} diff --git a/src/QuestDonation.sol b/src/QuestDonation.sol index 56d965e..e7a91ed 100644 --- a/src/QuestDonation.sol +++ b/src/QuestDonation.sol @@ -4,15 +4,19 @@ pragma solidity ^0.8.24; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "lib/chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; contract QuestDonation is Ownable { using SafeERC20 for IERC20; - address public multisig; - AggregatorV3Interface public priceOracle; // ETH/USD price feed + address public admin; + uint256 public targetAmount; + address public creator; uint256 public constant MAX_DONATION = 5000 * 1e18; // $5000 worth uint256 public constant YEAR = 365 days; + // Oracle mappings + mapping(address => AggregatorV3Interface) public priceOracles; // token => price feed mapping(address => uint256) public yearlyDonations; mapping(address => uint256) public lastDonationTimestamp; mapping(address => bool) public allowedTokens; @@ -20,19 +24,41 @@ contract QuestDonation is Ownable { event DonationReceived(address indexed donor, address indexed token, uint256 amount, uint256 usdValue); event TokenAllowed(address token, bool status); event FundsWithdrawn(address indexed token, uint256 amount); + event PriceOracleSet(address indexed token, address indexed oracle); - constructor(address _multisig, address _priceOracle) Ownable(msg.sender) { - require(_multisig != address(0), "Invalid multisig address"); - require(_priceOracle != address(0), "Invalid oracle address"); + constructor( + address _admin, + uint256 _targetAmount, + address _creator + ) Ownable(_admin) { + require(_admin != address(0), "Invalid admin address"); + require(_creator != address(0), "Invalid creator address"); + require(_targetAmount > 0, "Invalid target amount"); - multisig = _multisig; - priceOracle = AggregatorV3Interface(_priceOracle); + admin = _admin; + targetAmount = _targetAmount; + creator = _creator; } - modifier withinDonationLimit(uint256 ethAmount) { - (, int256 price, , , ) = priceOracle.latestRoundData(); + + modifier withinDonationLimit(address token, uint256 amount) { + require(address(priceOracles[token]) != address(0), "No price oracle set for token"); + AggregatorV3Interface priceFeed = priceOracles[token]; + (, int256 price, , , ) = priceFeed.latestRoundData(); + uint8 priceDecimals = priceFeed.decimals(); + require(price > 0, "Invalid price"); - uint256 usdValue = (ethAmount * uint256(price)) / 1e8; // Convert to USD + + uint256 usdValue; + if (token == address(0)) { + // Native token (ETH) has 18 decimals + usdValue = (amount * uint256(price)) / (10 ** priceDecimals); + } else { + // For ERC20 tokens, get their decimals + uint8 tokenDecimals = IERC20Metadata(token).decimals(); + // Adjust the calculation based on token decimals + usdValue = (amount * uint256(price)) / (10 ** tokenDecimals) / (10 ** priceDecimals); + } uint256 lastYear = lastDonationTimestamp[msg.sender]; if (block.timestamp - lastYear > YEAR) { @@ -45,16 +71,22 @@ contract QuestDonation is Ownable { _; } - function donateETH() external payable withinDonationLimit(msg.value) { + function donateETH() external payable withinDonationLimit(address(0), msg.value) { + require(msg.value > 0, "Donation amount must be greater than 0"); - (, int256 price, , , ) = priceOracle.latestRoundData(); - emit DonationReceived(msg.sender, address(0), msg.value, msg.value * uint256(price) / 1e8); + AggregatorV3Interface priceFeed = priceOracles[address(0)]; + (, int256 price, , , ) = priceFeed.latestRoundData(); + uint8 priceDecimals = priceFeed.decimals(); + emit DonationReceived(msg.sender, address(0), msg.value, msg.value * uint256(price) / (10 ** priceDecimals)); } - function donateERC20(address token, uint256 amount) external withinDonationLimit(amount) { + function donateERC20(address token, uint256 amount) external withinDonationLimit(token, amount) { require(allowedTokens[token], "Token not allowed"); IERC20(token).safeTransferFrom(msg.sender, address(this), amount); - emit DonationReceived(msg.sender, token, amount, amount); + AggregatorV3Interface priceFeed = priceOracles[token]; + (, int256 price, , , ) = priceFeed.latestRoundData(); + uint8 priceDecimals = priceFeed.decimals(); + emit DonationReceived(msg.sender, token, amount, amount * uint256(price) / (10 ** priceDecimals)); } function allowToken(address token, bool status) external onlyOwner { @@ -62,12 +94,24 @@ contract QuestDonation is Ownable { emit TokenAllowed(token, status); } + // Example + // Data Feed: ETH/USD + // Address token: address(0), oracle: 0xchainlin + function setPriceOracle(address token, address oracle) external onlyOwner { + require(allowedTokens[token], "Token not allowed"); + require(oracle != address(0), "Invalid oracle address"); + + priceOracles[token] = AggregatorV3Interface(oracle); + emit PriceOracleSet(token, oracle); + } + + function withdraw(address token, uint256 amount) external { - require(msg.sender == multisig, "Only multisig can withdraw"); + require(msg.sender == admin, "Only admin can withdraw"); if (token == address(0)) { - payable(multisig).transfer(amount); + payable(admin).transfer(amount); } else { - IERC20(token).safeTransfer(multisig, amount); + IERC20(token).safeTransfer(admin, amount); } emit FundsWithdrawn(token, amount); } diff --git a/src/QuestFactory.sol b/src/QuestFactory.sol new file mode 100644 index 0000000..4e4ad67 --- /dev/null +++ b/src/QuestFactory.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./QuestDonation.sol"; + +contract QuestFactory { + address public admin; + + constructor() { + admin = msg.sender; // Set contract deployer as admin + } + + // Structure to store quest details + struct Quest { + address questContract; + uint256 targetAmount; + address creator; + uint256 timestamp; + } + + // Array to store all quests + Quest[] public quests; + + // Event emitted when new quest is created + event QuestCreated( + address indexed questContract, + address indexed creator, + uint256 timestamp + ); + + // Function to create new quest + function createQuest( + uint256 _targetAmount + ) external returns (address) { + // Deploy new QuestDonation contract + QuestDonation newQuest = new QuestDonation( + admin, + _targetAmount, + msg.sender + ); + + // Store quest details + quests.push( + Quest({ + questContract: address(newQuest), + targetAmount: _targetAmount, + creator: msg.sender, + timestamp: block.timestamp + }) + ); + + // Emit event + emit QuestCreated( + address(newQuest), + msg.sender, + block.timestamp + ); + + return address(newQuest); + } + + // Get total number of quests + function getQuestsCount() external view returns (uint256) { + return quests.length; + } + + // Get quest by index + function getQuestByIndex(uint256 _index) external view returns ( + address questContract, + uint256 targetAmount, + address creator, + uint256 timestamp + ) { + require(_index < quests.length, "Quest index out of bounds"); + Quest memory quest = quests[_index]; + return ( + quest.questContract, + quest.targetAmount, + quest.creator, + quest.timestamp + ); + } +} diff --git a/test/Counter.t.sol b/test/Counter.t.sol deleted file mode 100644 index 54b724f..0000000 --- a/test/Counter.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Test, console} from "forge-std/Test.sol"; -import {Counter} from "../src/Counter.sol"; - -contract CounterTest is Test { - Counter public counter; - - function setUp() public { - counter = new Counter(); - counter.setNumber(0); - } - - function test_Increment() public { - counter.increment(); - assertEq(counter.number(), 1); - } - - function testFuzz_SetNumber(uint256 x) public { - counter.setNumber(x); - assertEq(counter.number(), x); - } -} diff --git a/test/QuestDonation.t.sol b/test/QuestDonation.t.sol index d773c4e..8f66836 100644 --- a/test/QuestDonation.t.sol +++ b/test/QuestDonation.t.sol @@ -1,20 +1,29 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import {Test, console2} from "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {QuestDonation} from "../src/QuestDonation.sol"; import {MockV3Aggregator} from "./mocks/MockV3Aggregator.sol"; +import {MockERC20} from "./mocks/MockERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + contract QuestDonationTest is Test { QuestDonation public questDonation; - address public mockPriceFeed; + MockV3Aggregator public mockPriceFeedETH; + MockV3Aggregator public mockPriceFeedUSDC; + MockERC20 public mockUSDC; address public owner; address public donor1; address public donor2; address public questReceiver; // ETH price of $2000 - int256 constant INITIAL_PRICE = 2000 * 1e8; + int256 constant INITIAL_ETH_PRICE = 2000 * 1e8; + int256 constant INITIAL_USDC_PRICE = 1 * 1e8; + + uint256 constant targetAmount = 1 ether; // Setup function runs before each test function setUp() public { @@ -22,15 +31,35 @@ contract QuestDonationTest is Test { donor1 = makeAddr("donor1"); donor2 = makeAddr("donor2"); questReceiver = makeAddr("questReceiver"); + // Deploy and initialize mock price feed - MockV3Aggregator mockPriceFeedContract = new MockV3Aggregator(8, INITIAL_PRICE); - mockPriceFeed = address(mockPriceFeedContract); + mockPriceFeedETH = new MockV3Aggregator(8, INITIAL_ETH_PRICE); + mockPriceFeedUSDC = new MockV3Aggregator(8, INITIAL_USDC_PRICE); - // Deploy QuestDonation contract with mock price feed - questDonation = new QuestDonation(makeAddr("multisig"), mockPriceFeed); - // Fund test addresses + // Deploy mock USDC token + mockUSDC = new MockERC20("Mock USDC", "USDC", 6); + + // Deploy QuestDonation contract with mock params + questDonation = new QuestDonation(owner, targetAmount, owner); + + // Allow ETH, USDC and set oracle + questDonation.allowToken(address(0), true); // Replace address(0) with the actual token address if needed + questDonation.setPriceOracle(address(0), address(mockPriceFeedETH)); // Assuming setPriceOracle is a function in QuestDonation + + questDonation.allowToken(address(mockUSDC), true); + questDonation.setPriceOracle(address(mockUSDC), address(mockPriceFeedUSDC)); + + // Fund test addresses with ETH vm.deal(donor1, 10 ether); vm.deal(donor2, 10 ether); + + // Fund donor1 with mock USDC + vm.prank(owner); + mockUSDC.mint(donor1, 1000 * 1e6); + + // Approve QuestDonation to spend USDC on behalf of donor1 + vm.prank(donor1); + mockUSDC.approve(address(questDonation), 1000 * 1e6); } function testDonation() public { @@ -67,8 +96,8 @@ contract QuestDonationTest is Test { vm.prank(donor1); questDonation.donateETH{value: donationAmount}(); - // Withdraw as multisig - vm.prank(questDonation.multisig()); + // Withdraw as owner + vm.prank(owner); questDonation.withdraw(address(0), donationAmount); // Assert withdrawal was successful @@ -82,10 +111,38 @@ contract QuestDonationTest is Test { } function test_RevertWhen_WithdrawingWithNoDonations() public { - vm.prank(questDonation.multisig()); + vm.prank(owner); vm.expectRevert(); questDonation.withdraw(address(0), 1 ether); } + function testDonationWithUSDC() public { + uint256 donationAmount = 500 * 1e6; // 1000 USDC + + // Simulate USDC transfer to QuestDonation contract + vm.prank(donor1); + // mockUSDC.approve(address(questDonation), donationAmount); + questDonation.donateERC20(address(mockUSDC), donationAmount); + + // Assert donation was recorded correctly + assertEq(IERC20(mockUSDC).balanceOf(address(questDonation)), donationAmount); + } + + function testWithdrawalWithUSDC() public { + uint256 donationAmount = 200 * 1e6; + + // Simulate USDC transfer to QuestDonation contract + vm.prank(donor1); + // mockUSDC.approve(address(questDonation), donationAmount); + questDonation.donateERC20(address(mockUSDC), donationAmount); + + // Withdraw as owner + vm.prank(owner); + questDonation.withdraw(address(mockUSDC), donationAmount); + + // Assert withdrawal was successful + assertEq(mockUSDC.balanceOf(address(questDonation)), 0); + } + receive() external payable {} } diff --git a/test/mocks/MockERC20.sol b/test/mocks/MockERC20.sol new file mode 100644 index 0000000..6358b83 --- /dev/null +++ b/test/mocks/MockERC20.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract MockERC20 is ERC20 { + constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) { + _mint(msg.sender, 1000000 * 10 ** uint256(decimals)); // Mint initial supply to the deployer + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } +} \ No newline at end of file