diff --git a/Makefile b/Makefile index 8f27ad1..d4ba228 100644 --- a/Makefile +++ b/Makefile @@ -30,11 +30,11 @@ anvil :; anvil -m 'test test test test test test test test test test test junk' NETWORK_ARGS := --rpc-url http://localhost:8545 --private-key $(DEFAULT_ANVIL_KEY) --broadcast ifeq ($(findstring --network baseSepolia,$(ARGS)),--network baseSepolia) - NETWORK_ARGS := --rpc-url $(BASE_SEPOLIA_RPC_URL) --broadcast --account developmentPrivateKey --verify --etherscan-api-key $(BASESCAN_API_KEY) -vvvvv + NETWORK_ARGS := --rpc-url $(BASE_SEPOLIA_RPC_URL) --broadcast --account dev --verify --etherscan-api-key $(BASESCAN_API_KEY) -vvvvv endif -deploy: - @forge script script/DeployBox.s.sol:DeployBox $(NETWORK_ARGS) +deployChamaFactory: + @forge script script/DeployChama.s.sol:DeployChama $(NETWORK_ARGS) upgrade: @forge script script/UpgradeBox.s.sol:UpgradeBox $(NETWORK_ARGS) \ No newline at end of file diff --git a/broadcast/DeployChama.s.sol/84532/run-latest.json b/broadcast/DeployChama.s.sol/84532/run-latest.json new file mode 100644 index 0000000..7a0038a --- /dev/null +++ b/broadcast/DeployChama.s.sol/84532/run-latest.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x9c3844a531ded7b4dd099491d72ce89b1807dc0a8dd3d1ee2f58ba8fa6dd2de4", + "transactionType": "CREATE", + "contractName": "Chama", + "contractAddress": "0xc2f4fc5416d96ac447388ead98c8eedb45d6ba82", + "function": null, + "arguments": null, + "transaction": { + "from": "0x0bd7dd9a885d9526ff82813829ef5c7d8afdb8c4", + "gas": "0x4b3249", + "value": "0x0", + "input": "0x608060405234801561000f575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610081575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161007891906101d6565b60405180910390fd5b610090816100d660201b60201c565b503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101ef565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101c082610197565b9050919050565b6101d0816101b6565b82525050565b5f6020820190506101e95f8301846101c7565b92915050565b6142cb80620001fd5f395ff3fe608060405234801562000010575f80fd5b50600436106200009e575f3560e01c8063715018a6116200006d578063715018a6146200015057806374c13fda146200015c5780638da5cb5b146200017e578063e53d087614620001a0578063f2fde38b14620001d6576200009e565b8063017f230614620000a257806317d8ec7f14620000d857806355e45fee14620000fa578063567579091462000130575b5f80fd5b620000c06004803603810190620000ba919062000b45565b620001f6565b604051620000cf919062000bce565b60405180910390f35b620000e2620003a7565b604051620000f1919062000bce565b60405180910390f35b62000118600480360381019062000112919062000be9565b620003cc565b60405162000127919062000bce565b60405180910390f35b6200014e600480360381019062000148919062000c38565b62000419565b005b6200015a620006b3565b005b62000166620006ca565b60405162000175919062000d03565b60405180910390f35b62000188620006ef565b60405162000197919062000bce565b60405180910390f35b620001be6004803603810190620001b8919062000d1e565b62000716565b604051620001cd919062000bce565b60405180910390f35b620001f46004803603810190620001ee919062000d82565b6200076b565b005b5f808460025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040516200022a9062000935565b620002389392919062000dc3565b604051809103905ff08015801562000252573d5f803e3d5ffd5b5090508060038560405162000268919062000e72565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600485604051620002c6919062000e72565b90815260200160405180910390205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff167fccd3fd34999c91094bc4975f14e72854cb1dac75570490a4bec54dee2895e6708260405162000394919062000bce565b60405180910390a2809150509392505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80600383604051620003e0919062000e72565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080915050919050565b805f6003826040516200042d919062000e72565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506004826040516200046f919062000e72565b90815260200160405180910390205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801562000561575060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1562000599576040517ffc4ae9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620005ff576040517f94e4aefd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60038460405162000612919062000e72565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166315b287ea866040518263ffffffff1660e01b81526004016200067d919062000bce565b5f604051808303815f87803b15801562000695575f80fd5b505af1158015620006a8573d5f803e3d5ffd5b505050505050505050565b620006bd620007f6565b620006c85f62000874565b565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600482805160208101820180518482526020830160208501208183528095505050505050602052805f5260405f205f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b62000775620007f6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620007e8575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620007df919062000bce565b60405180910390fd5b620007f38162000874565b50565b3373ffffffffffffffffffffffffffffffffffffffff1662000817620006ef565b73ffffffffffffffffffffffffffffffffffffffff16146200087257336040517f8bbe4d7a00000000000000000000000000000000000000000000000000000000815260040162000869919062000bce565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61340b8062000e8b83390190565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200097f8262000954565b9050919050565b620009918162000973565b81146200099c575f80fd5b50565b5f81359050620009af8162000986565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000a0582620009bd565b810181811067ffffffffffffffff8211171562000a275762000a26620009cd565b5b80604052505050565b5f62000a3b62000943565b905062000a498282620009fa565b919050565b5f67ffffffffffffffff82111562000a6b5762000a6a620009cd565b5b62000a7682620009bd565b9050602081019050919050565b828183375f83830152505050565b5f62000aa762000aa18462000a4e565b62000a30565b90508281526020810184848401111562000ac65762000ac5620009b9565b5b62000ad384828562000a83565b509392505050565b5f82601f83011262000af25762000af1620009b5565b5b813562000b0484826020860162000a91565b91505092915050565b5f819050919050565b62000b218162000b0d565b811462000b2c575f80fd5b50565b5f8135905062000b3f8162000b16565b92915050565b5f805f6060848603121562000b5f5762000b5e6200094c565b5b5f62000b6e868287016200099f565b935050602084013567ffffffffffffffff81111562000b925762000b9162000950565b5b62000ba08682870162000adb565b925050604062000bb38682870162000b2f565b9150509250925092565b62000bc88162000973565b82525050565b5f60208201905062000be35f83018462000bbd565b92915050565b5f6020828403121562000c015762000c006200094c565b5b5f82013567ffffffffffffffff81111562000c215762000c2062000950565b5b62000c2f8482850162000adb565b91505092915050565b5f806040838503121562000c515762000c506200094c565b5b5f62000c60858286016200099f565b925050602083013567ffffffffffffffff81111562000c845762000c8362000950565b5b62000c928582860162000adb565b9150509250929050565b5f819050919050565b5f62000cc562000cbf62000cb98462000954565b62000c9c565b62000954565b9050919050565b5f62000cd88262000ca5565b9050919050565b5f62000ceb8262000ccc565b9050919050565b62000cfd8162000cdf565b82525050565b5f60208201905062000d185f83018462000cf2565b92915050565b5f806040838503121562000d375762000d366200094c565b5b5f83013567ffffffffffffffff81111562000d575762000d5662000950565b5b62000d658582860162000adb565b925050602062000d78858286016200099f565b9150509250929050565b5f6020828403121562000d9a5762000d996200094c565b5b5f62000da9848285016200099f565b91505092915050565b62000dbd8162000b0d565b82525050565b5f60608201905062000dd85f83018662000bbd565b62000de7602083018562000bbd565b62000df6604083018462000db2565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b8381101562000e3157808201518184015260208101905062000e14565b5f8484015250505050565b5f62000e488262000dfe565b62000e54818562000e08565b935062000e6681856020860162000e12565b80840191505092915050565b5f62000e7f828462000e3c565b91508190509291505056fe608060405262278d00600f5534801562000017575f80fd5b506040516200340b3803806200340b83398181016040528101906200003d9190620007b6565b33828260015f819055506127108111156200009557612710816040517fa620018e0000000000000000000000000000000000000000000000000000000081526004016200008c92919062000820565b60405180910390fd5b806006819055508160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60058190555050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000158575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200014f91906200085c565b60405180910390fd5b6200016981620003ac60201b60201c565b50620001808360126200046f60201b90919060201c565b505f60405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020014281525090508060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f601181905550620002e95f801b33620004a460201b60201c565b506200033c7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d46367fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a6200059f60201b60201c565b6200036e7fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a33620004a460201b60201c565b50620003a17fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a85620004a460201b60201c565b505050505062000877565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6200049c835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6200060060201b60201c565b905092915050565b5f620004b783836200067160201b60201c565b62000595576001805f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000531620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905062000599565b5f90505b92915050565b5f620005b183620006dc60201b60201c565b90508160015f8581526020019081526020015f20600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b5f620006138383620006f960201b60201c565b6200066757825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f2081905550600190506200066b565b5f90505b92915050565b5f60015f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f60015f8381526020019081526020015f20600101549050919050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000748826200071d565b9050919050565b6200075a816200073c565b811462000765575f80fd5b50565b5f8151905062000778816200074f565b92915050565b5f819050919050565b62000792816200077e565b81146200079d575f80fd5b50565b5f81519050620007b08162000787565b92915050565b5f805f60608486031215620007d057620007cf62000719565b5b5f620007df8682870162000768565b9350506020620007f28682870162000768565b92505060406200080586828701620007a0565b9150509250925092565b6200081a816200077e565b82525050565b5f604082019050620008355f8301856200080f565b6200084460208301846200080f565b9392505050565b62000856816200073c565b82525050565b5f602082019050620008715f8301846200084b565b92915050565b612b8680620008855f395ff3fe608060405234801561000f575f80fd5b50600436106101d8575f3560e01c80638a19c8bc116101025780639eab5253116100a0578063d547741f1161006f578063d547741f14610516578063de11c94a14610532578063f28fdd0314610550578063f2fde38b1461056e576101d8565b80639eab5253146104a0578063a217fddf146104be578063aa5f9c3c146104dc578063b5b7a184146104f8576101d8565b80638da5cb5b116100dc5780638da5cb5b1461042c5780638f2839701461044a57806391d14854146104665780639c8fe8b914610496576101d8565b80638a19c8bc146103c05780638a888e8a146103de5780638be10d6a1461040e576101d8565b80633f19d0431161017a5780636b5f444c116101495780636b5f444c146103605780636e9960c31461037c5780636eb0fdd01461039a578063715018a6146103b6576101d8565b80633f19d043146102c85780634416cb9b146102f85780634c203fcd1461031457806353f01da414610344576101d8565b8063248a9ca3116101b6578063248a9ca3146102445780632f2ff15d1461027457806330d2c0d31461029057806336568abe146102ac576101d8565b806301ffc9a7146101dc57806314c519c21461020c57806315b287ea14610228575b5f80fd5b6101f660048036038101906101f19190612430565b61058a565b6040516102039190612475565b60405180910390f35b610226600480360381019061022191906124e8565b610603565b005b610242600480360381019061023d91906124e8565b6107df565b005b61025e60048036038101906102599190612546565b610971565b60405161026b9190612580565b60405180910390f35b61028e60048036038101906102899190612599565b61098e565b005b6102aa60048036038101906102a5919061260a565b6109b0565b005b6102c660048036038101906102c19190612599565b610ace565b005b6102e260048036038101906102dd91906124e8565b610b49565b6040516102ef9190612644565b60405180910390f35b610312600480360381019061030d919061265d565b610b8f565b005b61032e600480360381019061032991906124e8565b610eaf565b60405161033b919061270b565b60405180910390f35b61035e600480360381019061035991906124e8565b610f6e565b005b61037a6004803603810190610375919061260a565b61112b565b005b610384611160565b6040516103919190612733565b60405180910390f35b6103b460048036038101906103af919061265d565b611188565b005b6103be61139c565b005b6103c86113af565b6040516103d59190612644565b60405180910390f35b6103f860048036038101906103f391906124e8565b6113b5565b6040516104059190612644565b60405180910390f35b6104166113bb565b6040516104239190612644565b60405180910390f35b6104346113c1565b6040516104419190612733565b60405180910390f35b610464600480360381019061045f91906124e8565b6113e9565b005b610480600480360381019061047b9190612599565b611480565b60405161048d9190612475565b60405180910390f35b61049e6114e4565b005b6104a8611775565b6040516104b591906127f4565b60405180910390f35b6104c6611786565b6040516104d39190612580565b60405180910390f35b6104f660048036038101906104f19190612814565b61178c565b005b61050061195d565b60405161050d9190612644565b60405180910390f35b610530600480360381019061052b9190612599565b611963565b005b61053a611985565b6040516105479190612733565b60405180910390f35b6105586119aa565b6040516105659190612733565b60405180910390f35b610588600480360381019061058391906124e8565b6119d2565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105fc57506105fb82611a56565b5b9050919050565b7fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a61062d81611abf565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610692576040517f310a773d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106ed9190612733565b602060405180830381865afa158015610708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072c9190612866565b1115610764576040517fac764e3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff6c166311bcdcd234f4c1d885aba9aa0e83f4af37419f3024a014c3878f2d3b8826040516107d39190612733565b60405180910390a15050565b7fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a61080981611abf565b61081d826012611ad390919063ffffffff16565b1561085f57816040517f54ccedc60000000000000000000000000000000000000000000000000000000081526004016108569190612733565b60405180910390fd5b610873826012611b0090919063ffffffff16565b505f60405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020014281525090508060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015590505061096b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d463684611b2d565b50505050565b5f60015f8381526020019081526020015f20600101549050919050565b61099782610971565b6109a081611abf565b6109aa8383611b2d565b50505050565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d46366109da81611abf565b8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a2691906128be565b92505081905550610a7b33308460045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c16909392919063ffffffff16565b423373ffffffffffffffffffffffffffffffffffffffff167f65cae25c71d42b6f17dedd09abadc5a1700fcb8fee308b460b4238ba2a2288ef84604051610ac29190612644565b60405180910390a35050565b610ad6611c98565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b448282611c9f565b505050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d4636610bb981611abf565b610bc1611d89565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054841115610cf8578360085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040517f7ca9c921000000000000000000000000000000000000000000000000000000008152600401610cef9291906128f1565b60405180910390fd5b6040518060800160405280858152602001600654815260200142815260200184815250600a5f60055481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301559050508360085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610dde9190612918565b92505081905550610e31338560045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dcd9092919063ffffffff16565b6005543373ffffffffffffffffffffffffffffffffffffffff167feb1b81c526e6a52a729580d97a7bf6611d5fd8949027ae89a22e17ecb0f48d71866006544288604051610e82949392919061294b565b60405180910390a360055f815480929190610e9c9061298e565b9190505550610ea9611e4c565b50505050565b610eb76123a3565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815250509050919050565b7fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a610f9881611abf565b610fac826012611ad390919063ffffffff16565b610fe2576040517fd4ed313400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f811461106757806040517f0eef1d3800000000000000000000000000000000000000000000000000000000815260040161105e9190612644565b60405180910390fd5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f905550506110ee836012611e5590919063ffffffff16565b507f0629c4ccd5d844cc377d634107fd2683ffa339ff96c928662b6443e03bc251168360405161111e9190612733565b60405180910390a1505050565b7fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a61115581611abf565b81600f819055505050565b5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d46366111b281611abf565b6111ba611d89565b5f600a5f8581526020019081526020015f206040518060800160405290815f8201548152602001600182015481526020016002820154815260200160038201548152505090505f6127108260200151835f015161121791906129d5565b6112219190612a43565b90505f81835f015161123391906128be565b90508087101561126d5786600a5f60055481526020019081526020015f205f015f8282546112619190612918565b925050819055506112ea565b8087036112aa57600a5f60055481526020019081526020015f205f8082015f9055600182015f9055600282015f9055600382015f905550506112e9565b86816040517fe8adb0e80000000000000000000000000000000000000000000000000000000081526004016112e09291906128f1565b60405180910390fd5b5b8660075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113369190612918565b9250508190555061138b33308960045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c16909392919063ffffffff16565b505050611396611e4c565b50505050565b6113a4611e82565b6113ad5f611f6b565b565b60115481565b5f919050565b60105481565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f28161202e565b61143d7fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ace565b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6114ec611d89565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d463661151681611abf565b601054421015611552576040517fb50cb25900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b61155e601261205c565b8110156116ed575f61157a82601261206f90919063ffffffff16565b90505f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8103611602577fd0d16e3b40b7f7ddc1d7f375faae6afe708df1d7686724515769cde445a8f7b0826040516115f39190612733565b60405180910390a150506116e0565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548261168d9190612918565b90506116db338260045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dcd9092919063ffffffff16565b505050505b8080600101915050611554565b50600f54426116fc91906128be565b601081905550423373ffffffffffffffffffffffffffffffffffffffff167f7f6e5d740a471e7d1e68a05399e87f18678258bd381e390c83d5d7a3fda7646d60115460405161174b9190612644565b60405180910390a360115f8154809291906117659061298e565b919050555050611773611e4c565b565b60606117816012612086565b905090565b5f801b81565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d46366117b681611abf565b8160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156118775760095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826040517f73d8a74c00000000000000000000000000000000000000000000000000000000815260040161186e9291906128f1565b60405180910390fd5b8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546118c391906128be565b925050819055508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461195191906128be565b92505081905550505050565b600f5481565b61196c82610971565b61197581611abf565b61197f8383611c9f565b50505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119da611e82565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4a575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611a419190612733565b60405180910390fd5b611a5381611f6b565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ad081611acb611c98565b6120a5565b50565b5f611af8835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6120f6565b905092915050565b5f611b25835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612116565b905092915050565b5f611b388383611480565b611c0c576001805f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611ba9611c98565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611c10565b5f90505b92915050565b611c92848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611c4b93929190612a73565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061217d565b50505050565b5f33905090565b5f611caa8383611480565b15611d7f575f60015f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611d1c611c98565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611d83565b5f90505b92915050565b60025f5403611dc4576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b611e47838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611e00929190612aa8565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061217d565b505050565b60015f81905550565b5f611e7a835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612218565b905092915050565b611e8a611c98565b73ffffffffffffffffffffffffffffffffffffffff16611ea86113c1565b73ffffffffffffffffffffffffffffffffffffffff1614158015611f205750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f07611c98565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611f6957611f2d611c98565b6040517f8bbe4d7a000000000000000000000000000000000000000000000000000000008152600401611f609190612733565b60405180910390fd5b565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120587fbb46d0af9106a86e3cb61ab45bd36f61bb3b468e4db75bf9d14199a518ba3f9a82611b2d565b5050565b5f612068825f01612314565b9050919050565b5f61207c835f0183612323565b5f1c905092915050565b60605f612094835f0161234a565b905060608190508092505050919050565b6120af8282611480565b6120f25780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016120e9929190612acf565b60405180910390fd5b5050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f61212183836120f6565b61217357825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050612177565b5f90505b92915050565b5f8060205f8451602086015f885af18061219c576040513d5f823e3d81fd5b3d92505f519150505f82146121b55760018114156121d0565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561221257836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016122099190612733565b60405180910390fd5b50505050565b5f80836001015f8481526020019081526020015f205490505f8114612309575f6001826122459190612918565b90505f6001865f018054905061225b9190612918565b90508082146122c1575f865f01828154811061227a57612279612af6565b5b905f5260205f200154905080875f01848154811061229b5761229a612af6565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f018054806122d4576122d3612b23565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061230e565b5f9150505b92915050565b5f815f01805490509050919050565b5f825f01828154811061233957612338612af6565b5b905f5260205f200154905092915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561239757602002820191905f5260205f20905b815481526020019060010190808311612383575b50505050509050919050565b60405180606001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61240f816123db565b8114612419575f80fd5b50565b5f8135905061242a81612406565b92915050565b5f60208284031215612445576124446123d7565b5b5f6124528482850161241c565b91505092915050565b5f8115159050919050565b61246f8161245b565b82525050565b5f6020820190506124885f830184612466565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124b78261248e565b9050919050565b6124c7816124ad565b81146124d1575f80fd5b50565b5f813590506124e2816124be565b92915050565b5f602082840312156124fd576124fc6123d7565b5b5f61250a848285016124d4565b91505092915050565b5f819050919050565b61252581612513565b811461252f575f80fd5b50565b5f813590506125408161251c565b92915050565b5f6020828403121561255b5761255a6123d7565b5b5f61256884828501612532565b91505092915050565b61257a81612513565b82525050565b5f6020820190506125935f830184612571565b92915050565b5f80604083850312156125af576125ae6123d7565b5b5f6125bc85828601612532565b92505060206125cd858286016124d4565b9150509250929050565b5f819050919050565b6125e9816125d7565b81146125f3575f80fd5b50565b5f81359050612604816125e0565b92915050565b5f6020828403121561261f5761261e6123d7565b5b5f61262c848285016125f6565b91505092915050565b61263e816125d7565b82525050565b5f6020820190506126575f830184612635565b92915050565b5f805f60608486031215612674576126736123d7565b5b5f612681868287016125f6565b9350506020612692868287016125f6565b92505060406126a3868287016124d4565b9150509250925092565b6126b6816124ad565b82525050565b6126c5816125d7565b82525050565b606082015f8201516126df5f8501826126ad565b5060208201516126f260208501826126bc565b50604082015161270560408501826126bc565b50505050565b5f60608201905061271e5f8301846126cb565b92915050565b61272d816124ad565b82525050565b5f6020820190506127465f830184612724565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61278083836126ad565b60208301905092915050565b5f602082019050919050565b5f6127a28261274c565b6127ac8185612756565b93506127b783612766565b805f5b838110156127e75781516127ce8882612775565b97506127d98361278c565b9250506001810190506127ba565b5085935050505092915050565b5f6020820190508181035f83015261280c8184612798565b905092915050565b5f806040838503121561282a576128296123d7565b5b5f612837858286016124d4565b9250506020612848858286016125f6565b9150509250929050565b5f81519050612860816125e0565b92915050565b5f6020828403121561287b5761287a6123d7565b5b5f61288884828501612852565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6128c8826125d7565b91506128d3836125d7565b92508282019050808211156128eb576128ea612891565b5b92915050565b5f6040820190506129045f830185612635565b6129116020830184612635565b9392505050565b5f612922826125d7565b915061292d836125d7565b925082820390508181111561294557612944612891565b5b92915050565b5f60808201905061295e5f830187612635565b61296b6020830186612635565b6129786040830185612635565b6129856060830184612635565b95945050505050565b5f612998826125d7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129ca576129c9612891565b5b600182019050919050565b5f6129df826125d7565b91506129ea836125d7565b92508282026129f8816125d7565b91508282048414831517612a0f57612a0e612891565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a4d826125d7565b9150612a58836125d7565b925082612a6857612a67612a16565b5b828204905092915050565b5f606082019050612a865f830186612724565b612a936020830185612724565b612aa06040830184612635565b949350505050565b5f604082019050612abb5f830185612724565b612ac86020830184612635565b9392505050565b5f604082019050612ae25f830185612724565b612aef6020830184612571565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220b029187924fbf1a353f404a2c6099f40be73b244d17ad4628a1ed1277402289d64736f6c63430008180033a2646970667358221220cd785211d892355e73a2fa2857f7a539323b273fcff638927aefd35f8da290ba64736f6c63430008180033", + "nonce": "0x1", + "chainId": "0x14a34" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x74a193", + "logs": [ + { + "address": "0xc2f4fc5416d96ac447388ead98c8eedb45d6ba82", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000bd7dd9a885d9526ff82813829ef5c7d8afdb8c4" + ], + "data": "0x", + "blockHash": "0x02a04adac17b12acc0019c8148c6453b405dbb3f2b322088ad5150d1ed6ae9d1", + "blockNumber": "0x186a0bc", + "blockTimestamp": "0x6820a058", + "transactionHash": "0x9c3844a531ded7b4dd099491d72ce89b1807dc0a8dd3d1ee2f58ba8fa6dd2de4", + "transactionIndex": "0x15", + "logIndex": "0x67", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000400000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000020000000000000000000000000000000000080000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9c3844a531ded7b4dd099491d72ce89b1807dc0a8dd3d1ee2f58ba8fa6dd2de4", + "transactionIndex": "0x15", + "blockHash": "0x02a04adac17b12acc0019c8148c6453b405dbb3f2b322088ad5150d1ed6ae9d1", + "blockNumber": "0x186a0bc", + "gasUsed": "0x39d7ea", + "effectiveGasPrice": "0xf43ef", + "from": "0x0bd7dd9a885d9526ff82813829ef5c7d8afdb8c4", + "to": null, + "contractAddress": "0xc2f4fc5416d96ac447388ead98c8eedb45d6ba82", + "l1BaseFeeScalar": "0x44d", + "l1BlobBaseFee": "0x1", + "l1BlobBaseFeeScalar": "0xa118b", + "l1Fee": "0x1a84", + "l1GasPrice": "0x13", + "l1GasUsed": "0x1aa9e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1746968665, + "chain": 84532, + "commit": "c58e88d" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 8bf3176..c3fc66d 100644 --- a/foundry.toml +++ b/foundry.toml @@ -6,5 +6,12 @@ libs = ["lib"] remappings = [ "@openzeppelin/contracts=lib/openzeppelin-contracts/contracts", "forge-std/=lib/forge-std/src/", + "@uniswap/v4-core/=lib/v4-core/", + "forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/", + "forge-std/=lib/v4-core/lib/forge-std/src/", + "permit2/=lib/v4-periphery/lib/permit2/", + "solmate/=lib/v4-core/lib/solmate/", + "v4-core/=lib/v4-core/", + "v4-periphery/=lib/v4-periphery/", ] # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/script/DeployChama.s.sol b/script/DeployChama.s.sol new file mode 100644 index 0000000..854e93b --- /dev/null +++ b/script/DeployChama.s.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {Script} from "forge-std/Script.sol"; +import {Chama} from "src/Chama.sol"; + +contract DeployChama is Script { + Chama chamaFactory; + + function run() public { + vm.startBroadcast(); + chamaFactory = new Chama(); + vm.stopBroadcast(); + } +} diff --git a/src/Contributions.sol b/src/Contributions.sol index 818e101..ab47030 100644 --- a/src/Contributions.sol +++ b/src/Contributions.sol @@ -120,6 +120,7 @@ contract Contributions is Loans, Ownable, IContributions { members.add(_address); Member memory newMember = Member(_address, 0, block.timestamp); memberData[_address] = newMember; + _grantRole(MEMBER_ROLE, _address); } function changeAdmin(address _newAdmin) external { diff --git a/src/uniV4Intergration/TreasuryManager.sol b/src/uniV4Intergration/TreasuryManager.sol new file mode 100644 index 0000000..08f56a0 --- /dev/null +++ b/src/uniV4Intergration/TreasuryManager.sol @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IHooks} from "@uniswap/v4-core/src/interfaces/IHooks.sol"; +import {PoolManager, IPoolManager} from "@uniswap/v4-core/src/PoolManager.sol"; +import {PoolModifyLiquidityTest} from "@uniswap/v4-core/src/test/PoolModifyLiquidityTest.sol"; +import {PoolSwapTest} from "@uniswap/v4-core/src/test/PoolSwapTest.sol"; +import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; +import {Errors} from "../utils/Errors.sol"; + +contract TreasuryManager is AccessControl { + using SafeERC20 for IERC20; + + bytes32 public constant TREASURY_ADMIN_ROLE = keccak256("TREASURY_ADMIN_ROLE"); + bytes32 public constant CHAMA_ROLE = keccak256("CHAMA_ROLE"); + + PoolManager public immutable poolManager; + PoolModifyLiquidityTest public immutable modifyPositionRouter; + PoolSwapTest public immutable swapRouter; + + address public immutable usdcToken; + + mapping(address => mapping(address => uint256)) public poolIds; + + // Protocol fees in basis points + uint256 public baseFee = 30; // 0.3% + uint256 public stablecoinReducedFee = 10; // 0.1% for stablecoin swaps + + // Yield strategy settings + address public currentYieldProtocol; + bool public autoReinvestYield = true; + + event SwapExecuted(address indexed token0, address indexed token1, uint256 amountIn, uint256 amountOut); + event LiquidityAdded(address indexed token0, address indexed token1, uint256 amount0, uint256 amount1); + event YieldDeposited(address indexed protocol, address indexed token, uint256 amount); + event FeesCollected(address indexed token, uint256 amount); + + constructor(address _poolManager, address _usdcToken, address _admin) { + poolManager = PoolManager(_poolManager); + modifyPositionRouter = new PoolModifyLiquidityTest(IPoolManager(_poolManager)); + swapRouter = new PoolSwapTest(IPoolManager(_poolManager)); + usdcToken = _usdcToken; + + _grantRole(DEFAULT_ADMIN_ROLE, _admin); + _grantRole(TREASURY_ADMIN_ROLE, _admin); + } + + function getDynamicFee(address token0, address token1) public view returns (uint256) { + // If both tokens are stablecoins, apply reduced fee + if (isStablecoin(token0) && isStablecoin(token1)) { + return stablecoinReducedFee; + } + + return baseFee; + } + + function isStablecoin(address token) public view returns (bool) { + // TODO Add logic to identify stablecoins (USDC, USDT, DAI, etc.) + // For now, using a simple check for USDC + return token == usdcToken; + } + + function swapTokens(address tokenIn, address tokenOut, uint256 amountIn, uint256 minAmountOut, address recipient) + external + onlyRole(CHAMA_ROLE) + returns (uint256 amountOut) + { + // TODO: Implement swap logic using Uniswap v4 PoolSwapTest + IERC20(tokenIn).safeTransferFrom(msg.sender, address(this), amountIn); + IERC20(tokenIn).approve(address(swapRouter), amountIn); + + // Execute swap through Uniswap v4 + // Placeholder for actual Uniswap v4 swap logic + amountOut = executeSwap(tokenIn, tokenOut, amountIn); + + require(amountOut >= minAmountOut, "Slippage too high"); + + IERC20(tokenOut).safeTransfer(recipient, amountOut); + + emit SwapExecuted(tokenIn, tokenOut, amountIn, amountOut); + return amountOut; + } + + // Placeholder for swap execution (to be implemented with actual Uniswap v4 calls) + function executeSwap(address tokenIn, address tokenOut, uint256 amountIn) internal returns (uint256) { + // TODO: implement actual Uniswap v4 swap logic here + // This is just a placeholder for now + return amountIn; + } + + // Add liquidity to Uniswap v4 pool, Remember to add the logic to add the liquidity to actual uniswap v4 pools + function addLiquidity( + address token0, + address token1, + uint256 amount0, + uint256 amount1, + int24 tickLower, + int24 tickUpper + ) external onlyRole(TREASURY_ADMIN_ROLE) returns (uint256 positionId) { + IERC20(token0).safeTransferFrom(msg.sender, address(this), amount0); + IERC20(token1).safeTransferFrom(msg.sender, address(this), amount1); + + IERC20(token0).approve(address(modifyPositionRouter), amount0); + IERC20(token1).approve(address(modifyPositionRouter), amount1); + + // Placeholder for actual Uniswap v4 liquidity addition + // This would call the modifyPositionRouter with the correct parameters + + emit LiquidityAdded(token0, token1, amount0, amount1); + return 0; + } + + // Deposit unused assets into yield-generating protocol + function depositIntoYieldProtocol(address token, uint256 amount, address yieldProtocol) + external + onlyRole(TREASURY_ADMIN_ROLE) + { + IERC20(token).safeTransferFrom(msg.sender, address(this), amount); + + // Placeholder for yield protocol deposit logic + // This would integrate with lending protocols on Base + + currentYieldProtocol = yieldProtocol; + + emit YieldDeposited(yieldProtocol, token, amount); + } + + // Update fee parameters (only admin) + function updateFeeParameters(uint256 _baseFee, uint256 _stablecoinReducedFee) + external + onlyRole(TREASURY_ADMIN_ROLE) + { + require(_baseFee <= 100, "Fee too high"); // Max 1% + require(_stablecoinReducedFee <= _baseFee, "Reduced fee must be <= base fee"); + + baseFee = _baseFee; + stablecoinReducedFee = _stablecoinReducedFee; + } + + // Grant CHAMA_ROLE to a Chama contract + function addChamaContract(address chamaContract) external onlyRole(TREASURY_ADMIN_ROLE) { + _grantRole(CHAMA_ROLE, chamaContract); + } +} diff --git a/test/unit/ContributionsTest.t.sol b/test/unit/ContributionsTest.t.sol index a2cb7cd..2e6e429 100644 --- a/test/unit/ContributionsTest.t.sol +++ b/test/unit/ContributionsTest.t.sol @@ -20,7 +20,7 @@ contract ContributionsTest is Test { function setUp() external { usdt = new Usdt(); - contributions = new Contributions(admin, address(usdt)); + contributions = new Contributions(admin, address(usdt), 10); usdt.mint(admin, 100); usdt.mint(member1, 100); usdt.mint(member2, 100);