diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bad7c9d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,33 @@ +name: CI +on: + push: + branches: + - main + pull_request: + branches: + - "**" + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Check format + run: forge fmt --check + + - name: Install forge dependencies + run: forge install + + - name: Build project + run: forge build + + - name: Run tests + run: forge test -vvv \ No newline at end of file diff --git a/script/01_DeployFactory.s.sol b/script/01_DeployFactory.s.sol new file mode 100644 index 0000000..32b20c7 --- /dev/null +++ b/script/01_DeployFactory.s.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import "forge-std/Script.sol"; +import {HyperWalletFactory} from "../src/HyperWalletFactory.sol"; + +contract DeployFactory is Script { + function run() external returns (HyperWalletFactory factory) { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + vm.startBroadcast(deployerPrivateKey); + + factory = new HyperWalletFactory(vm.addr(deployerPrivateKey)); + + vm.stopBroadcast(); + + console2.log("HyperWalletFactory deployed at:", address(factory)); + console2.log("HyperWallet implementation deployed at:", factory.HYPER_WALLET()); + } +} diff --git a/script/02_DeployCoreWriter.s.sol b/script/02_DeployCoreWriter.s.sol new file mode 100644 index 0000000..a20aa78 --- /dev/null +++ b/script/02_DeployCoreWriter.s.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import "forge-std/Script.sol"; +import {CoreWriterModule} from "../src/modules/coreWriter/CoreWriterModule.sol"; + +contract DeployCoreWriter is Script { + function run() external returns (CoreWriterModule coreWriter) { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + vm.startBroadcast(deployerPrivateKey); + + coreWriter = new CoreWriterModule("CoreWriter", "1.0"); + + vm.stopBroadcast(); + + console2.log("CoreWriterModule deployed at:", address(coreWriter)); + } +} diff --git a/script/03_DeployCoreWriterSdk.s.sol b/script/03_DeployCoreWriterSdk.s.sol new file mode 100644 index 0000000..aea72c2 --- /dev/null +++ b/script/03_DeployCoreWriterSdk.s.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import "forge-std/Script.sol"; +import {CoreWriterSdkModule} from "../src/modules/coreWriter/CoreWriterSdkModule.sol"; + +contract DeployCoreWriterSdk is Script { + function run() external returns (CoreWriterSdkModule coreWriterSdk) { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + vm.startBroadcast(deployerPrivateKey); + + coreWriterSdk = new CoreWriterSdkModule("CoreWriterSdk", "1.0"); + + vm.stopBroadcast(); + + console2.log("CoreWriterSdkModule deployed at:", address(coreWriterSdk)); + } +} diff --git a/script/04_DeployCoreWriterSdkSecurity.s.sol b/script/04_DeployCoreWriterSdkSecurity.s.sol new file mode 100644 index 0000000..34700e7 --- /dev/null +++ b/script/04_DeployCoreWriterSdkSecurity.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import "forge-std/Script.sol"; +import {CoreWriterSdkSecurityModule} from "../src/modules/coreWriter/CoreWriterSdkSecurityModule.sol"; + +contract DeployCoreWriterSdkSecurity is Script { + // testnet value + uint64 hypeCoreTokenId = 1105; + uint64 usdcCoreTokenId = 0; + + function run() external returns (CoreWriterSdkSecurityModule coreWriterSdkSecurity) { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + vm.startBroadcast(deployerPrivateKey); + + coreWriterSdkSecurity = + new CoreWriterSdkSecurityModule(hypeCoreTokenId, usdcCoreTokenId, "CoreWriterSdkSecurity", "1.0"); + + vm.stopBroadcast(); + + console2.log("CoreWriterSdkSecurityModule deployed at:", address(coreWriterSdkSecurity)); + } +} diff --git a/script/05_DeployEnabler.s.sol b/script/05_DeployEnabler.s.sol new file mode 100644 index 0000000..6595e3f --- /dev/null +++ b/script/05_DeployEnabler.s.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import "forge-std/Script.sol"; +import {EnablerModule} from "../src/modules/enabler/EnablerModule.sol"; + +contract DeployEnabler is Script { + // testnet value + uint64 hypeCoreTokenId = 1105; + uint64 usdcCoreTokenId = 0; + address usdcSystemAddress = 0x2000000000000000000000000000000000000000; + address usdcTokenAddress = 0xd9CBEC81df392A88AEff575E962d149d57F4d6bc; + + function run() external returns (EnablerModule enabler) { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + vm.startBroadcast(deployerPrivateKey); + + enabler = new EnablerModule( + hypeCoreTokenId, + usdcCoreTokenId, + usdcSystemAddress, + usdcTokenAddress, + vm.addr(deployerPrivateKey), + "Enabler", + "1.0" + ); + + vm.stopBroadcast(); + + console2.log("EnablerModule deployed at:", address(enabler)); + } +} diff --git a/script/06_DeployFlashLoan.s.sol b/script/06_DeployFlashLoan.s.sol new file mode 100644 index 0000000..bdd5845 --- /dev/null +++ b/script/06_DeployFlashLoan.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import "forge-std/Script.sol"; +import {TokenBook} from "../src/utils/TokenBook.sol"; +import {FlashLoanModule} from "../src/modules/flashLoan/FlashLoanModule.sol"; + +contract DeployFlashLoan is Script { + function run() external returns (TokenBook tokenBook, FlashLoanModule flashLoan) { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + address deployer = vm.addr(deployerPrivateKey); + + vm.startBroadcast(deployerPrivateKey); + + tokenBook = new TokenBook(deployer); + + flashLoan = new FlashLoanModule(address(tokenBook), "FlashLoan", "1.0"); + + vm.stopBroadcast(); + + console2.log("TokenBook deployed at:", address(tokenBook)); + console2.log("FlashLoanModule deployed at:", address(flashLoan)); + } +}