|
| 1 | +// SPDX-License-Identifier: UNLICENSED |
| 2 | +pragma solidity >=0.8.25 <0.9.0; |
| 3 | + |
| 4 | +import { Script } from "forge-std/Script.sol"; |
| 5 | +import { console2 } from "forge-std/console2.sol"; |
| 6 | + |
| 7 | +import { TypeCasts } from "@hyperlane-xyz/libs/TypeCasts.sol"; |
| 8 | +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; |
| 9 | + |
| 10 | +import { Hyperlane7683 } from "../src/Hyperlane7683.sol"; |
| 11 | +import { OrderData, OrderEncoder } from "../src/libs/OrderEncoder.sol"; |
| 12 | +import { BatchOpen } from "./DeployBatchOpen.s.sol"; |
| 13 | + |
| 14 | +import { |
| 15 | + OnchainCrossChainOrder |
| 16 | +} from "../src/ERC7683/IERC7683.sol"; |
| 17 | + |
| 18 | +/// @dev See the Solidity Scripting tutorial: https://book.getfoundry.sh/tutorials/solidity-scripting |
| 19 | +contract OpenBatchOrder is Script { |
| 20 | + function run() public { |
| 21 | + uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PK"); |
| 22 | + |
| 23 | + vm.startBroadcast(deployerPrivateKey); |
| 24 | + |
| 25 | + address localRouter = vm.envAddress("ROUTER_ADDRESS"); |
| 26 | + address sender = vm.envAddress("ORDER_SENDER"); |
| 27 | + address recipient = vm.envAddress("ORDER_RECIPIENT"); |
| 28 | + address inputToken = vm.envAddress("ITT_INPUT"); |
| 29 | + address outputToken = vm.envAddress("ITT_OUTPUT"); |
| 30 | + uint256 amountIn = vm.envUint("AMOUNT_IN"); |
| 31 | + uint256 amountOut = vm.envUint("AMOUNT_OUT"); |
| 32 | + uint256 senderNonce = vm.envUint("SENDER_NONCE"); |
| 33 | + uint32 originDomain = Hyperlane7683(localRouter).localDomain(); |
| 34 | + uint256 destinationDomain = vm.envUint("DESTINATION_DOMAIN"); |
| 35 | + uint32 fillDeadline = type(uint32).max; |
| 36 | + address batchOpen = vm.envAddress("BATCH_OPEN"); |
| 37 | + |
| 38 | + ERC20(inputToken).approve(batchOpen, amountIn * 3); |
| 39 | + |
| 40 | + OrderData memory order = OrderData( |
| 41 | + TypeCasts.addressToBytes32(sender), |
| 42 | + TypeCasts.addressToBytes32(recipient), |
| 43 | + TypeCasts.addressToBytes32(inputToken), |
| 44 | + TypeCasts.addressToBytes32(outputToken), |
| 45 | + amountIn, |
| 46 | + amountOut, |
| 47 | + senderNonce, |
| 48 | + originDomain, |
| 49 | + uint32(destinationDomain), |
| 50 | + TypeCasts.addressToBytes32(localRouter), |
| 51 | + fillDeadline, |
| 52 | + new bytes(0) |
| 53 | + ); |
| 54 | + |
| 55 | + OnchainCrossChainOrder[] memory onchainOrders = new OnchainCrossChainOrder[](3); |
| 56 | + |
| 57 | + onchainOrders[0] = OnchainCrossChainOrder( |
| 58 | + fillDeadline, |
| 59 | + OrderEncoder.orderDataType(), |
| 60 | + OrderEncoder.encode(order) |
| 61 | + ); |
| 62 | + |
| 63 | + order.senderNonce = senderNonce + 1; |
| 64 | + onchainOrders[1] = OnchainCrossChainOrder( |
| 65 | + fillDeadline, |
| 66 | + OrderEncoder.orderDataType(), |
| 67 | + OrderEncoder.encode(order) |
| 68 | + ); |
| 69 | + |
| 70 | + order.senderNonce = senderNonce + 2; |
| 71 | + onchainOrders[2] = OnchainCrossChainOrder( |
| 72 | + fillDeadline, |
| 73 | + OrderEncoder.orderDataType(), |
| 74 | + OrderEncoder.encode(order) |
| 75 | + ); |
| 76 | + |
| 77 | + BatchOpen(batchOpen).openOrders(onchainOrders, inputToken, amountIn * 3); |
| 78 | + |
| 79 | + vm.stopBroadcast(); |
| 80 | + } |
| 81 | +} |
0 commit comments