Skip to content

Commit a813af5

Browse files
committed
[FIX] polyswap contract and submit order script
1 parent e7831a2 commit a813af5

File tree

4 files changed

+38
-11
lines changed

4 files changed

+38
-11
lines changed

.env.sample

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
POLYSWAP_HANDLER=0x8a1C17fa964061443C84e5f98A69D7C1A643fFAd # with polymarket mock
1+
POLYSWAP_HANDLER=0x0D92aFDB0D334c221A946927877b12157Bed2F5d # with polymarket mock
22
COMPOSABLE_COW=0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74
33
POLYMARKET_MOCK=0x62e36fBc7D6518A3DeEA0f863f50c8AC4c4a7695 # Polymarket mock contract
44
POLYMARKET=0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E

script/SubmitSingleOrder.s.sol

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {Enum} from "safe/common/Enum.sol";
1313

1414
// Composable CoW
1515
import {IConditionalOrder, ComposableCoW} from "composable-cow/src/ComposableCoW.sol";
16+
import {IValueFactory} from "composable-cow/src/interfaces/IValueFactory.sol";
1617

1718
// Polyswap
1819
import {PolyswapOrder} from "../src/PolyswapOrder.sol";
@@ -37,10 +38,10 @@ contract SubmitSingleOrder is Script {
3738
sellToken: sellToken,
3839
buyToken: buyToken,
3940
receiver: address(0),
40-
sellAmount: 1e17, // 0.1 sell token
41-
minBuyAmount: 90e16, // 0.09 buy token
41+
sellAmount: 100000, // 0.1 sell token
42+
minBuyAmount: 80000, // 0.08 buy token
4243
t0: block.timestamp,
43-
t: block.timestamp + 30 days,
44+
t: block.timestamp + 1 days,
4445
polymarketOrderHash: polymarketOrderHash
4546
});
4647

@@ -50,8 +51,7 @@ contract SubmitSingleOrder is Script {
5051
staticInput: abi.encode(polyswapOrder)
5152
});
5253

53-
// bytes32 orderHash = composableCow.hash(params);
54-
// console.logBytes32(orderHash);
54+
console.logBytes32(composableCow.hash(params));
5555

5656
vm.startBroadcast(deployerPrivateKey);
5757

@@ -60,9 +60,11 @@ contract SubmitSingleOrder is Script {
6060
address(composableCow),
6161
0,
6262
abi.encodeCall(
63-
composableCow.create,
63+
composableCow.createWithContext,
6464
(
6565
params,
66+
IValueFactory(0x52eD56Da04309Aca4c3FECC595298d80C2f16BAc), // TimestampValueFactory
67+
bytes(""),
6668
true
6769
)
6870
),
@@ -73,3 +75,28 @@ contract SubmitSingleOrder is Script {
7375
vm.stopBroadcast();
7476
}
7577
}
78+
79+
contract ApproveSellTokenOnSafe is Script {
80+
using SafeLib for Safe;
81+
82+
function run() external {
83+
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
84+
Safe safe = Safe(payable(vm.envAddress("SAFE")));
85+
IERC20 sellToken = IERC20(vm.envAddress("SELL_TOKEN"));
86+
address spender = vm.envAddress("SPENDER");
87+
88+
safe.executeSingleOwner(
89+
address(sellToken),
90+
0,
91+
abi.encodeCall(
92+
sellToken.approve,
93+
(
94+
spender,
95+
type(uint256).max
96+
)
97+
),
98+
Enum.Operation.Call,
99+
vm.addr(deployerPrivateKey)
100+
);
101+
}
102+
}

src/PolyswapOrder.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ library PolyswapOrder {
5050
if (!(address(self.sellToken) != address(0) && address(self.buyToken) != address(0))) {
5151
revert IConditionalOrder.OrderNotValid(INVALID_TOKEN);
5252
}
53-
if (!(self.t0 > block.timestamp)) revert IConditionalOrder.OrderNotValid(INVALID_START_DATE);
53+
if (!(self.t0 < type(uint32).max)) revert IConditionalOrder.OrderNotValid(INVALID_START_DATE);
5454
if (!(self.t > self.t0 && self.t < type(uint32).max)) revert IConditionalOrder.OrderNotValid(INVALID_END_DATE);
5555
if (!(self.sellAmount > 0)) revert IConditionalOrder.OrderNotValid(INVALID_SELL_AMOUNT);
5656
if (!(self.minBuyAmount > 0)) revert IConditionalOrder.OrderNotValid(INVALID_MIN_BUY_AMOUNT);
5757

5858
// Check if the Polymarket order is valid and not filled or cancelled.
59-
if (!(self.polymarketOrderHash == 0)) revert IConditionalOrder.OrderNotValid(INVALID_POLYMARKET_ORDER_HASH);
59+
if (!(self.polymarketOrderHash != 0)) revert IConditionalOrder.OrderNotValid(INVALID_POLYMARKET_ORDER_HASH);
6060
OrderStatus memory order = polymarket.getOrderStatus(self.polymarketOrderHash);
6161
if (order.remaining == 0 && order.isFilledOrCancelled == false) {
6262
revert IConditionalOrder.OrderNotValid(INVALID_POLYMARKET_ORDER_HASH);
@@ -79,7 +79,7 @@ library PolyswapOrder {
7979
sellAmount: self.sellAmount,
8080
buyAmount: self.minBuyAmount,
8181
validTo: self.t.toUint32(),
82-
appData: self.polymarketOrderHash,
82+
appData: bytes32(0x053e648e24f8653eb9cffe71f170227d25f8fd69c135bcf2125ae24f4d210b9b), // need to create our own app data
8383
feeAmount: 0,
8484
kind: GPv2Order.KIND_SELL,
8585
partiallyFillable: false,

test/Notes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
`cast call $POLYMARKET_MOCK "getOrderStatus(bytes32)((bool,uint256))" $POLYMARKET_ORDER_HASH --rpc-url https://polygon-rpc.com`
99

1010
#### approve the sell token on the safe to the spender
11-
`cast send $SELL_TOKEN "approve(address,address,uint256)" $SAFE $SPENDER 0.01ether --private-key $PRIVATE_KEY --rpc-url https://polygon-rpc.com`
11+
`forge script ./script/SubmitSingleOrder.s.sol:ApproveSellTokenOnSafe --rpc-url https://polygon-rpc.com --broadcast --private-key $PRIVATE_KEY`
1212

1313
### if first time conditional order on safe:
1414
#### set fallback handler one time

0 commit comments

Comments
 (0)