@stryke-xyz/premarket-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/abi/AggregationRouterV6.abi.json +1186 -0
  2. package/dist/abi/NativeOrderFactory.abi.json +291 -0
  3. package/dist/abi/NativeOrderImpl.abi.json +381 -0
  4. package/dist/abi/limitOrderProtocol.json +63 -0
  5. package/dist/address.d.ts +13 -0
  6. package/dist/address.js +32 -0
  7. package/dist/api/filler.d.ts +109 -0
  8. package/dist/api/filler.js +289 -0
  9. package/dist/api/index.d.ts +3 -0
  10. package/dist/api/index.js +3 -0
  11. package/dist/api/order-helper.d.ts +59 -0
  12. package/dist/api/order-helper.js +112 -0
  13. package/dist/api/orderbook-api.d.ts +36 -0
  14. package/dist/api/orderbook-api.js +69 -0
  15. package/dist/bps.d.ts +35 -0
  16. package/dist/bps.js +52 -0
  17. package/dist/config/chains.d.ts +50 -0
  18. package/dist/config/chains.js +21 -0
  19. package/dist/config/index.d.ts +25 -0
  20. package/dist/config/index.js +103 -0
  21. package/dist/config/markets.d.ts +53 -0
  22. package/dist/config/markets.js +125 -0
  23. package/dist/constants.d.ts +4 -0
  24. package/dist/constants.js +30 -0
  25. package/dist/index.d.ts +19 -0
  26. package/dist/index.js +21 -0
  27. package/dist/limit-order/amounts.d.ts +14 -0
  28. package/dist/limit-order/amounts.js +19 -0
  29. package/dist/limit-order/eip712/domain.d.ts +10 -0
  30. package/dist/limit-order/eip712/domain.js +18 -0
  31. package/dist/limit-order/eip712/eip712.types.d.ts +23 -0
  32. package/dist/limit-order/eip712/eip712.types.js +1 -0
  33. package/dist/limit-order/eip712/index.d.ts +3 -0
  34. package/dist/limit-order/eip712/index.js +3 -0
  35. package/dist/limit-order/eip712/order-typed-data-builder.d.ts +6 -0
  36. package/dist/limit-order/eip712/order-typed-data-builder.js +25 -0
  37. package/dist/limit-order/extensions/extension-builder.d.ts +35 -0
  38. package/dist/limit-order/extensions/extension-builder.js +83 -0
  39. package/dist/limit-order/extensions/extension.d.ts +45 -0
  40. package/dist/limit-order/extensions/extension.js +108 -0
  41. package/dist/limit-order/extensions/extension.spec.d.ts +1 -0
  42. package/dist/limit-order/extensions/extension.spec.js +17 -0
  43. package/dist/limit-order/extensions/fee-taker/errors.d.ts +2 -0
  44. package/dist/limit-order/extensions/fee-taker/errors.js +2 -0
  45. package/dist/limit-order/extensions/fee-taker/fee-calculator.d.ts +40 -0
  46. package/dist/limit-order/extensions/fee-taker/fee-calculator.js +83 -0
  47. package/dist/limit-order/extensions/fee-taker/fee-calculator.spec.d.ts +1 -0
  48. package/dist/limit-order/extensions/fee-taker/fee-calculator.spec.js +14 -0
  49. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.d.ts +130 -0
  50. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.js +249 -0
  51. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.spec.d.ts +1 -0
  52. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.spec.js +72 -0
  53. package/dist/limit-order/extensions/fee-taker/fees.d.ts +19 -0
  54. package/dist/limit-order/extensions/fee-taker/fees.js +36 -0
  55. package/dist/limit-order/extensions/fee-taker/index.d.ts +7 -0
  56. package/dist/limit-order/extensions/fee-taker/index.js +7 -0
  57. package/dist/limit-order/extensions/fee-taker/integrator-fee.d.ts +13 -0
  58. package/dist/limit-order/extensions/fee-taker/integrator-fee.js +28 -0
  59. package/dist/limit-order/extensions/fee-taker/resolver-fee.d.ts +19 -0
  60. package/dist/limit-order/extensions/fee-taker/resolver-fee.js +28 -0
  61. package/dist/limit-order/extensions/fee-taker/types.d.ts +4 -0
  62. package/dist/limit-order/extensions/fee-taker/types.js +1 -0
  63. package/dist/limit-order/extensions/fee-taker/whitelist-half-address.d.ts +18 -0
  64. package/dist/limit-order/extensions/fee-taker/whitelist-half-address.js +26 -0
  65. package/dist/limit-order/extensions/index.d.ts +3 -0
  66. package/dist/limit-order/extensions/index.js +3 -0
  67. package/dist/limit-order/index.d.ts +10 -0
  68. package/dist/limit-order/index.js +10 -0
  69. package/dist/limit-order/interaction.d.ts +16 -0
  70. package/dist/limit-order/interaction.js +25 -0
  71. package/dist/limit-order/interaction.spec.d.ts +1 -0
  72. package/dist/limit-order/interaction.spec.js +8 -0
  73. package/dist/limit-order/limit-order-with-fee.d.ts +59 -0
  74. package/dist/limit-order/limit-order-with-fee.js +94 -0
  75. package/dist/limit-order/limit-order-with-fee.spec.d.ts +1 -0
  76. package/dist/limit-order/limit-order-with-fee.spec.js +31 -0
  77. package/dist/limit-order/limit-order.d.ts +63 -0
  78. package/dist/limit-order/limit-order.js +211 -0
  79. package/dist/limit-order/limit-order.spec.d.ts +1 -0
  80. package/dist/limit-order/limit-order.spec.js +103 -0
  81. package/dist/limit-order/maker-traits.d.ts +200 -0
  82. package/dist/limit-order/maker-traits.js +309 -0
  83. package/dist/limit-order/maker-traits.spec.d.ts +1 -0
  84. package/dist/limit-order/maker-traits.spec.js +102 -0
  85. package/dist/limit-order/source-track.d.ts +1 -0
  86. package/dist/limit-order/source-track.js +22 -0
  87. package/dist/limit-order/taker-traits.d.ts +141 -0
  88. package/dist/limit-order/taker-traits.js +207 -0
  89. package/dist/limit-order/types.d.ts +24 -0
  90. package/dist/limit-order/types.js +1 -0
  91. package/dist/limit-order/verification.d.ts +16 -0
  92. package/dist/limit-order/verification.js +108 -0
  93. package/dist/limit-order-contract/index.d.ts +4 -0
  94. package/dist/limit-order-contract/index.js +4 -0
  95. package/dist/limit-order-contract/limit-order-contract.d.ts +34 -0
  96. package/dist/limit-order-contract/limit-order-contract.js +79 -0
  97. package/dist/limit-order-contract/native-order-factory.d.ts +10 -0
  98. package/dist/limit-order-contract/native-order-factory.js +22 -0
  99. package/dist/limit-order-contract/native-order-impl.d.ts +10 -0
  100. package/dist/limit-order-contract/native-order-impl.js +24 -0
  101. package/dist/limit-order-contract/proxy-factory.d.ts +20 -0
  102. package/dist/limit-order-contract/proxy-factory.js +32 -0
  103. package/dist/limit-order-contract/proxy-factory.spec.d.ts +1 -0
  104. package/dist/limit-order-contract/proxy-factory.spec.js +16 -0
  105. package/dist/limit-order-contract/types.d.ts +6 -0
  106. package/dist/limit-order-contract/types.js +1 -0
  107. package/dist/ponder/client/index.d.ts +23 -0
  108. package/dist/ponder/client/index.js +44 -0
  109. package/dist/ponder/client/queries/markets.d.ts +30 -0
  110. package/dist/ponder/client/queries/markets.js +200 -0
  111. package/dist/ponder/client/queries/positions.d.ts +13 -0
  112. package/dist/ponder/client/queries/positions.js +406 -0
  113. package/dist/ponder/client/types/history.d.ts +94 -0
  114. package/dist/ponder/client/types/history.js +1 -0
  115. package/dist/ponder/client/types/index.d.ts +5 -0
  116. package/dist/ponder/client/types/index.js +5 -0
  117. package/dist/ponder/client/types/market.d.ts +45 -0
  118. package/dist/ponder/client/types/market.js +1 -0
  119. package/dist/ponder/client/types/position.d.ts +32 -0
  120. package/dist/ponder/client/types/position.js +1 -0
  121. package/dist/ponder/client/types/serializers.d.ts +57 -0
  122. package/dist/ponder/client/types/serializers.js +248 -0
  123. package/dist/ponder/client/types/user.d.ts +5 -0
  124. package/dist/ponder/client/types/user.js +1 -0
  125. package/dist/ponder/client/utils.d.ts +1 -0
  126. package/dist/ponder/client/utils.js +32 -0
  127. package/dist/ponder/generated/index.d.ts +18 -0
  128. package/dist/ponder/generated/index.js +20 -0
  129. package/dist/ponder/generated/runtime/batcher.d.ts +105 -0
  130. package/dist/ponder/generated/runtime/batcher.js +188 -0
  131. package/dist/ponder/generated/runtime/createClient.d.ts +17 -0
  132. package/dist/ponder/generated/runtime/createClient.js +24 -0
  133. package/dist/ponder/generated/runtime/error.d.ts +18 -0
  134. package/dist/ponder/generated/runtime/error.js +15 -0
  135. package/dist/ponder/generated/runtime/fetcher.d.ts +10 -0
  136. package/dist/ponder/generated/runtime/fetcher.js +67 -0
  137. package/dist/ponder/generated/runtime/generateGraphqlOperation.d.ts +30 -0
  138. package/dist/ponder/generated/runtime/generateGraphqlOperation.js +128 -0
  139. package/dist/ponder/generated/runtime/index.d.ts +11 -0
  140. package/dist/ponder/generated/runtime/index.js +10 -0
  141. package/dist/ponder/generated/runtime/linkTypeMap.d.ts +9 -0
  142. package/dist/ponder/generated/runtime/linkTypeMap.js +83 -0
  143. package/dist/ponder/generated/runtime/typeSelection.d.ts +28 -0
  144. package/dist/ponder/generated/runtime/typeSelection.js +3 -0
  145. package/dist/ponder/generated/runtime/types.d.ts +55 -0
  146. package/dist/ponder/generated/runtime/types.js +2 -0
  147. package/dist/ponder/generated/schema.d.ts +3026 -0
  148. package/dist/ponder/generated/schema.js +222 -0
  149. package/dist/ponder/generated/types.d.ts +2393 -0
  150. package/dist/ponder/generated/types.js +6915 -0
  151. package/dist/ponder/index.d.ts +2 -0
  152. package/dist/ponder/index.js +2 -0
  153. package/dist/ponder/types.d.ts +3 -0
  154. package/dist/ponder/types.js +1 -0
  155. package/dist/rfq-order/index.d.ts +1 -0
  156. package/dist/rfq-order/index.js +1 -0
  157. package/dist/rfq-order/rfq-order.d.ts +21 -0
  158. package/dist/rfq-order/rfq-order.js +22 -0
  159. package/dist/rfq-order/rfq-order.spec.d.ts +1 -0
  160. package/dist/rfq-order/rfq-order.spec.js +27 -0
  161. package/dist/shared/index.d.ts +2 -0
  162. package/dist/shared/index.js +2 -0
  163. package/dist/shared/types.d.ts +79 -0
  164. package/dist/shared/types.js +12 -0
  165. package/dist/shared/utils.d.ts +7 -0
  166. package/dist/shared/utils.js +19 -0
  167. package/dist/sync/clients/balance-client.d.ts +41 -0
  168. package/dist/sync/clients/balance-client.js +139 -0
  169. package/dist/sync/clients/base-client.d.ts +47 -0
  170. package/dist/sync/clients/base-client.js +154 -0
  171. package/dist/sync/clients/order-client.d.ts +18 -0
  172. package/dist/sync/clients/order-client.js +151 -0
  173. package/dist/sync/index.d.ts +5 -0
  174. package/dist/sync/index.js +3 -0
  175. package/dist/sync/redis-ws-client.d.ts +18 -0
  176. package/dist/sync/redis-ws-client.js +88 -0
  177. package/dist/sync/types.d.ts +20 -0
  178. package/dist/sync/types.js +1 -0
  179. package/dist/utils/mul-div.d.ts +5 -0
  180. package/dist/utils/mul-div.js +13 -0
  181. package/dist/utils/orderUtils.d.ts +19 -0
  182. package/dist/utils/orderUtils.js +51 -0
  183. package/dist/utils/rand-bigint.d.ts +1 -0
  184. package/dist/utils/rand-bigint.js +13 -0
  185. package/dist/utils/rand-bigint.spec.d.ts +1 -0
  186. package/dist/utils/rand-bigint.spec.js +11 -0
  187. package/dist/validations.d.ts +1 -0
  188. package/dist/validations.js +3 -0
  189. package/package.json +60 -0
@@ -0,0 +1,63 @@
1
+ [
2
+ {
3
+ "name": "fillOrderArgs",
4
+ "type": "function",
5
+ "stateMutability": "payable",
6
+ "inputs": [
7
+ {
8
+ "name": "order",
9
+ "type": "tuple",
10
+ "components": [
11
+ { "name": "salt", "type": "uint256" },
12
+ { "name": "maker", "type": "uint256" },
13
+ { "name": "receiver", "type": "uint256" },
14
+ { "name": "makerAsset", "type": "uint256" },
15
+ { "name": "takerAsset", "type": "uint256" },
16
+ { "name": "makingAmount", "type": "uint256" },
17
+ { "name": "takingAmount", "type": "uint256" },
18
+ { "name": "makerTraits", "type": "uint256" }
19
+ ]
20
+ },
21
+ { "name": "r", "type": "bytes32" },
22
+ { "name": "vs", "type": "bytes32" },
23
+ { "name": "amount", "type": "uint256" },
24
+ { "name": "takerTraits", "type": "uint256" },
25
+ { "name": "args", "type": "bytes" }
26
+ ],
27
+ "outputs": [
28
+ { "name": "makingAmount", "type": "uint256" },
29
+ { "name": "takingAmount", "type": "uint256" },
30
+ { "name": "orderHash", "type": "bytes32" }
31
+ ]
32
+ },
33
+ {
34
+ "name": "fillContractOrderArgs",
35
+ "type": "function",
36
+ "stateMutability": "nonpayable",
37
+ "inputs": [
38
+ {
39
+ "name": "order",
40
+ "type": "tuple",
41
+ "components": [
42
+ { "name": "salt", "type": "uint256" },
43
+ { "name": "maker", "type": "uint256" },
44
+ { "name": "receiver", "type": "uint256" },
45
+ { "name": "makerAsset", "type": "uint256" },
46
+ { "name": "takerAsset", "type": "uint256" },
47
+ { "name": "makingAmount", "type": "uint256" },
48
+ { "name": "takingAmount", "type": "uint256" },
49
+ { "name": "makerTraits", "type": "uint256" }
50
+ ]
51
+ },
52
+ { "name": "signature", "type": "bytes" },
53
+ { "name": "amount", "type": "uint256" },
54
+ { "name": "takerTraits", "type": "uint256" },
55
+ { "name": "args", "type": "bytes" }
56
+ ],
57
+ "outputs": [
58
+ { "name": "makingAmount", "type": "uint256" },
59
+ { "name": "takingAmount", "type": "uint256" },
60
+ { "name": "orderHash", "type": "bytes32" }
61
+ ]
62
+ }
63
+ ]
@@ -0,0 +1,13 @@
1
+ export declare class Address {
2
+ static NATIVE_CURRENCY: Address;
3
+ static ZERO_ADDRESS: Address;
4
+ private readonly val;
5
+ constructor(val: string);
6
+ static fromBigInt(val: bigint): Address;
7
+ static fromFirstBytes(bytes: string): Address;
8
+ toString(): string;
9
+ equal(other: Address): boolean;
10
+ isNative(): boolean;
11
+ isZero(): boolean;
12
+ lastHalf(): string;
13
+ }
@@ -0,0 +1,32 @@
1
+ import { isAddress } from 'ethers';
2
+ import { add0x } from '@1inch/byte-utils';
3
+ import assert from 'assert';
4
+ export class Address {
5
+ constructor(val) {
6
+ assert(isAddress(val), `Invalid address ${val}`);
7
+ this.val = val.toLowerCase();
8
+ }
9
+ static fromBigInt(val) {
10
+ return new Address(add0x(val.toString(16).padStart(40, '0')));
11
+ }
12
+ static fromFirstBytes(bytes) {
13
+ return new Address(bytes.slice(0, 42));
14
+ }
15
+ toString() {
16
+ return this.val;
17
+ }
18
+ equal(other) {
19
+ return this.val === other.val;
20
+ }
21
+ isNative() {
22
+ return this.equal(Address.NATIVE_CURRENCY);
23
+ }
24
+ isZero() {
25
+ return this.equal(Address.ZERO_ADDRESS);
26
+ }
27
+ lastHalf() {
28
+ return add0x(this.val.slice(-20));
29
+ }
30
+ }
31
+ Address.NATIVE_CURRENCY = new Address('0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee');
32
+ Address.ZERO_ADDRESS = new Address('0x0000000000000000000000000000000000000000');
@@ -0,0 +1,109 @@
1
+ import type { Address, Hex, WalletClient, PublicClient } from "viem";
2
+ import type { StoredOrder } from "../shared/types.js";
3
+ import LIMIT_ORDER_PROTOCOL_ABI from "../abi/limitOrderProtocol.json";
4
+ export interface FillOrderWriteContractParams {
5
+ address: Address;
6
+ abi: typeof LIMIT_ORDER_PROTOCOL_ABI;
7
+ functionName: "fillOrderArgs" | "fillContractOrderArgs";
8
+ args: readonly unknown[];
9
+ }
10
+ export declare class OrderFiller {
11
+ private config;
12
+ private publicClient;
13
+ private walletClient;
14
+ constructor(config: {
15
+ chainId: number;
16
+ }, publicClient: PublicClient, walletClient: WalletClient);
17
+ /**
18
+ * Build writeContract parameters for filling an order from EOA maker
19
+ * Tokens go to msg.sender
20
+ *
21
+ * @param storedOrder - The order fetched from the API
22
+ * @param fillAmount - Amount to fill (in makingAmount units)
23
+ * @returns Parameters to pass to writeContract
24
+ */
25
+ buildFillOrderParams(storedOrder: StoredOrder, fillAmount: bigint): FillOrderWriteContractParams;
26
+ /**
27
+ * Fill order from EOA maker - tokens go to msg.sender
28
+ *
29
+ * @param storedOrder - The order fetched from the API
30
+ * @param fillAmount - Amount to fill (in makingAmount units)
31
+ */
32
+ fillOrder(storedOrder: StoredOrder, fillAmount: bigint): Promise<{
33
+ txHash: Hex;
34
+ makingAmount: bigint;
35
+ takingAmount: bigint;
36
+ orderHash: Hex;
37
+ }>;
38
+ /**
39
+ * Build writeContract parameters for filling an order from EOA maker
40
+ * Tokens go to specified target address
41
+ *
42
+ * @param storedOrder - The order fetched from the API
43
+ * @param fillAmount - Amount to fill (in makingAmount units)
44
+ * @param targetAddress - Address to receive the maker's tokens
45
+ * @returns Parameters to pass to writeContract
46
+ */
47
+ buildFillOrderToParams(storedOrder: StoredOrder, fillAmount: bigint, targetAddress: Address): FillOrderWriteContractParams;
48
+ /**
49
+ * Fill order from EOA maker - tokens go to specified target address
50
+ *
51
+ * @param storedOrder - The order fetched from the API
52
+ * @param fillAmount - Amount to fill (in makingAmount units)
53
+ * @param targetAddress - Address to receive the maker's tokens
54
+ */
55
+ fillOrderTo(storedOrder: StoredOrder, fillAmount: bigint, targetAddress: Address): Promise<{
56
+ txHash: Hex;
57
+ makingAmount: bigint;
58
+ takingAmount: bigint;
59
+ orderHash: Hex;
60
+ }>;
61
+ /**
62
+ * Build writeContract parameters for filling an order from smart contract maker
63
+ * Tokens go to msg.sender
64
+ *
65
+ * @param storedOrder - The order fetched from the API
66
+ * @param fillAmount - Amount to fill (in makingAmount units)
67
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
68
+ * @returns Parameters to pass to writeContract
69
+ */
70
+ buildFillContractOrderParams(storedOrder: StoredOrder, fillAmount: bigint, ownerSignature: Hex): FillOrderWriteContractParams;
71
+ /**
72
+ * Fill order from smart contract maker - tokens go to msg.sender
73
+ *
74
+ * @param storedOrder - The order fetched from the API
75
+ * @param fillAmount - Amount to fill (in makingAmount units)
76
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
77
+ */
78
+ fillContractOrder(storedOrder: StoredOrder, fillAmount: bigint, ownerSignature: Hex): Promise<{
79
+ txHash: Hex;
80
+ makingAmount: bigint;
81
+ takingAmount: bigint;
82
+ orderHash: Hex;
83
+ }>;
84
+ /**
85
+ * Build writeContract parameters for filling an order from smart contract maker
86
+ * Tokens go to specified target address
87
+ *
88
+ * @param storedOrder - The order fetched from the API
89
+ * @param fillAmount - Amount to fill (in makingAmount units)
90
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
91
+ * @param targetAddress - Address to receive the maker's tokens
92
+ * @returns Parameters to pass to writeContract
93
+ */
94
+ buildFillContractOrderToParams(storedOrder: StoredOrder, fillAmount: bigint, ownerSignature: Hex, targetAddress: Address): FillOrderWriteContractParams;
95
+ /**
96
+ * Fill order from smart contract maker - tokens go to specified target address
97
+ *
98
+ * @param storedOrder - The order fetched from the API
99
+ * @param fillAmount - Amount to fill (in makingAmount units)
100
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
101
+ * @param targetAddress - Address to receive the maker's tokens
102
+ */
103
+ fillContractOrderTo(storedOrder: StoredOrder, fillAmount: bigint, ownerSignature: Hex, targetAddress: Address): Promise<{
104
+ txHash: Hex;
105
+ makingAmount: bigint;
106
+ takingAmount: bigint;
107
+ orderHash: Hex;
108
+ }>;
109
+ }
@@ -0,0 +1,289 @@
1
+ import { encodePacked } from "viem";
2
+ import { getLimitOrderContract } from "../constants";
3
+ import { LimitOrder, Extension } from "../limit-order";
4
+ import LIMIT_ORDER_PROTOCOL_ABI from "../abi/limitOrderProtocol.json";
5
+ export class OrderFiller {
6
+ constructor(config, publicClient, walletClient) {
7
+ this.config = config;
8
+ this.publicClient = publicClient;
9
+ this.walletClient = walletClient;
10
+ }
11
+ /**
12
+ * Build writeContract parameters for filling an order from EOA maker
13
+ * Tokens go to msg.sender
14
+ *
15
+ * @param storedOrder - The order fetched from the API
16
+ * @param fillAmount - Amount to fill (in makingAmount units)
17
+ * @returns Parameters to pass to writeContract
18
+ */
19
+ buildFillOrderParams(storedOrder, fillAmount) {
20
+ const limitOrderProtocolAddress = getLimitOrderContract(this.config.chainId);
21
+ const extension = Extension.decode(storedOrder.extensionEncoded);
22
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
23
+ const orderStruct = limitOrder.build();
24
+ const extensionBytes = storedOrder.extensionEncoded;
25
+ const extensionLength = (extensionBytes.length - 2) / 2;
26
+ // Build args: just extension (no target address when filling for yourself)
27
+ const args = extensionBytes;
28
+ // Build TakerTraits: bits 224-244 = extension length (no argsHasTarget flag)
29
+ const takerTraits = BigInt(extensionLength) << 224n;
30
+ return {
31
+ address: limitOrderProtocolAddress,
32
+ abi: LIMIT_ORDER_PROTOCOL_ABI,
33
+ functionName: "fillOrderArgs",
34
+ args: [
35
+ {
36
+ salt: BigInt(orderStruct.salt),
37
+ maker: BigInt(orderStruct.maker),
38
+ receiver: BigInt(orderStruct.receiver),
39
+ makerAsset: BigInt(orderStruct.makerAsset),
40
+ takerAsset: BigInt(orderStruct.takerAsset),
41
+ makingAmount: BigInt(orderStruct.makingAmount),
42
+ takingAmount: BigInt(orderStruct.takingAmount),
43
+ makerTraits: BigInt(orderStruct.makerTraits),
44
+ },
45
+ storedOrder.signature.r,
46
+ storedOrder.signature.vs,
47
+ fillAmount,
48
+ takerTraits,
49
+ args,
50
+ ],
51
+ };
52
+ }
53
+ /**
54
+ * Fill order from EOA maker - tokens go to msg.sender
55
+ *
56
+ * @param storedOrder - The order fetched from the API
57
+ * @param fillAmount - Amount to fill (in makingAmount units)
58
+ */
59
+ async fillOrder(storedOrder, fillAmount) {
60
+ const params = this.buildFillOrderParams(storedOrder, fillAmount);
61
+ const hash = await this.walletClient.writeContract({
62
+ chain: this.walletClient.chain,
63
+ account: this.walletClient.account,
64
+ ...params,
65
+ });
66
+ await this.publicClient.waitForTransactionReceipt({ hash });
67
+ // Calculate orderStruct for return value
68
+ const extension = Extension.decode(storedOrder.extensionEncoded);
69
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
70
+ const orderStruct = limitOrder.build();
71
+ return {
72
+ txHash: hash,
73
+ makingAmount: fillAmount,
74
+ takingAmount: (BigInt(orderStruct.takingAmount) * fillAmount) /
75
+ BigInt(orderStruct.makingAmount),
76
+ orderHash: storedOrder.orderHash,
77
+ };
78
+ }
79
+ /**
80
+ * Build writeContract parameters for filling an order from EOA maker
81
+ * Tokens go to specified target address
82
+ *
83
+ * @param storedOrder - The order fetched from the API
84
+ * @param fillAmount - Amount to fill (in makingAmount units)
85
+ * @param targetAddress - Address to receive the maker's tokens
86
+ * @returns Parameters to pass to writeContract
87
+ */
88
+ buildFillOrderToParams(storedOrder, fillAmount, targetAddress) {
89
+ const limitOrderProtocolAddress = getLimitOrderContract(this.config.chainId);
90
+ const extension = Extension.decode(storedOrder.extensionEncoded);
91
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
92
+ const orderStruct = limitOrder.build();
93
+ const extensionBytes = storedOrder.extensionEncoded;
94
+ const extensionLength = (extensionBytes.length - 2) / 2;
95
+ // Build args: target (20 bytes) + extension
96
+ const args = encodePacked(["address", "bytes"], [targetAddress, extensionBytes]);
97
+ // Build TakerTraits: bit 251 = argsHasTarget, bits 224-244 = extension length
98
+ const takerTraits = (1n << 251n) | (BigInt(extensionLength) << 224n);
99
+ return {
100
+ address: limitOrderProtocolAddress,
101
+ abi: LIMIT_ORDER_PROTOCOL_ABI,
102
+ functionName: "fillOrderArgs",
103
+ args: [
104
+ {
105
+ salt: BigInt(orderStruct.salt),
106
+ maker: BigInt(orderStruct.maker),
107
+ receiver: BigInt(orderStruct.receiver),
108
+ makerAsset: BigInt(orderStruct.makerAsset),
109
+ takerAsset: BigInt(orderStruct.takerAsset),
110
+ makingAmount: BigInt(orderStruct.makingAmount),
111
+ takingAmount: BigInt(orderStruct.takingAmount),
112
+ makerTraits: BigInt(orderStruct.makerTraits),
113
+ },
114
+ storedOrder.signature.r,
115
+ storedOrder.signature.vs,
116
+ fillAmount,
117
+ takerTraits,
118
+ args,
119
+ ],
120
+ };
121
+ }
122
+ /**
123
+ * Fill order from EOA maker - tokens go to specified target address
124
+ *
125
+ * @param storedOrder - The order fetched from the API
126
+ * @param fillAmount - Amount to fill (in makingAmount units)
127
+ * @param targetAddress - Address to receive the maker's tokens
128
+ */
129
+ async fillOrderTo(storedOrder, fillAmount, targetAddress) {
130
+ const params = this.buildFillOrderToParams(storedOrder, fillAmount, targetAddress);
131
+ const hash = await this.walletClient.writeContract({
132
+ chain: this.walletClient.chain,
133
+ account: this.walletClient.account,
134
+ ...params,
135
+ });
136
+ await this.publicClient.waitForTransactionReceipt({ hash });
137
+ // Calculate orderStruct for return value
138
+ const extension = Extension.decode(storedOrder.extensionEncoded);
139
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
140
+ const orderStruct = limitOrder.build();
141
+ return {
142
+ txHash: hash,
143
+ makingAmount: fillAmount,
144
+ takingAmount: (BigInt(orderStruct.takingAmount) * fillAmount) /
145
+ BigInt(orderStruct.makingAmount),
146
+ orderHash: storedOrder.orderHash,
147
+ };
148
+ }
149
+ /**
150
+ * Build writeContract parameters for filling an order from smart contract maker
151
+ * Tokens go to msg.sender
152
+ *
153
+ * @param storedOrder - The order fetched from the API
154
+ * @param fillAmount - Amount to fill (in makingAmount units)
155
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
156
+ * @returns Parameters to pass to writeContract
157
+ */
158
+ buildFillContractOrderParams(storedOrder, fillAmount, ownerSignature) {
159
+ const limitOrderProtocolAddress = getLimitOrderContract(this.config.chainId);
160
+ const extension = Extension.decode(storedOrder.extensionEncoded);
161
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
162
+ const orderStruct = limitOrder.build();
163
+ const extensionBytes = storedOrder.extensionEncoded;
164
+ const extensionLength = (extensionBytes.length - 2) / 2;
165
+ // Build args: just extension (no target address when filling for yourself)
166
+ const args = extensionBytes;
167
+ // Build TakerTraits: bits 224-244 = extension length (no argsHasTarget flag)
168
+ const takerTraits = BigInt(extensionLength) << 224n;
169
+ return {
170
+ address: limitOrderProtocolAddress,
171
+ abi: LIMIT_ORDER_PROTOCOL_ABI,
172
+ functionName: "fillContractOrderArgs",
173
+ args: [
174
+ {
175
+ salt: BigInt(orderStruct.salt),
176
+ maker: BigInt(orderStruct.maker),
177
+ receiver: BigInt(orderStruct.receiver),
178
+ makerAsset: BigInt(orderStruct.makerAsset),
179
+ takerAsset: BigInt(orderStruct.takerAsset),
180
+ makingAmount: BigInt(orderStruct.makingAmount),
181
+ takingAmount: BigInt(orderStruct.takingAmount),
182
+ makerTraits: BigInt(orderStruct.makerTraits),
183
+ },
184
+ ownerSignature,
185
+ fillAmount,
186
+ takerTraits,
187
+ args,
188
+ ],
189
+ };
190
+ }
191
+ /**
192
+ * Fill order from smart contract maker - tokens go to msg.sender
193
+ *
194
+ * @param storedOrder - The order fetched from the API
195
+ * @param fillAmount - Amount to fill (in makingAmount units)
196
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
197
+ */
198
+ async fillContractOrder(storedOrder, fillAmount, ownerSignature) {
199
+ const params = this.buildFillContractOrderParams(storedOrder, fillAmount, ownerSignature);
200
+ const hash = await this.walletClient.writeContract({
201
+ chain: this.walletClient.chain,
202
+ account: this.walletClient.account,
203
+ ...params,
204
+ });
205
+ await this.publicClient.waitForTransactionReceipt({ hash });
206
+ // Calculate orderStruct for return value
207
+ const extension = Extension.decode(storedOrder.extensionEncoded);
208
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
209
+ const orderStruct = limitOrder.build();
210
+ return {
211
+ txHash: hash,
212
+ makingAmount: fillAmount,
213
+ takingAmount: (BigInt(orderStruct.takingAmount) * fillAmount) /
214
+ BigInt(orderStruct.makingAmount),
215
+ orderHash: storedOrder.orderHash,
216
+ };
217
+ }
218
+ /**
219
+ * Build writeContract parameters for filling an order from smart contract maker
220
+ * Tokens go to specified target address
221
+ *
222
+ * @param storedOrder - The order fetched from the API
223
+ * @param fillAmount - Amount to fill (in makingAmount units)
224
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
225
+ * @param targetAddress - Address to receive the maker's tokens
226
+ * @returns Parameters to pass to writeContract
227
+ */
228
+ buildFillContractOrderToParams(storedOrder, fillAmount, ownerSignature, targetAddress) {
229
+ const limitOrderProtocolAddress = getLimitOrderContract(this.config.chainId);
230
+ const extension = Extension.decode(storedOrder.extensionEncoded);
231
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
232
+ const orderStruct = limitOrder.build();
233
+ const extensionBytes = storedOrder.extensionEncoded;
234
+ const extensionLength = (extensionBytes.length - 2) / 2;
235
+ // Build args: target (20 bytes) + extension
236
+ const args = encodePacked(["address", "bytes"], [targetAddress, extensionBytes]);
237
+ // Build TakerTraits: bit 251 = argsHasTarget, bits 224-244 = extension length
238
+ const takerTraits = (1n << 251n) | (BigInt(extensionLength) << 224n);
239
+ return {
240
+ address: limitOrderProtocolAddress,
241
+ abi: LIMIT_ORDER_PROTOCOL_ABI,
242
+ functionName: "fillContractOrderArgs",
243
+ args: [
244
+ {
245
+ salt: BigInt(orderStruct.salt),
246
+ maker: BigInt(orderStruct.maker),
247
+ receiver: BigInt(orderStruct.receiver),
248
+ makerAsset: BigInt(orderStruct.makerAsset),
249
+ takerAsset: BigInt(orderStruct.takerAsset),
250
+ makingAmount: BigInt(orderStruct.makingAmount),
251
+ takingAmount: BigInt(orderStruct.takingAmount),
252
+ makerTraits: BigInt(orderStruct.makerTraits),
253
+ },
254
+ ownerSignature,
255
+ fillAmount,
256
+ takerTraits,
257
+ args,
258
+ ],
259
+ };
260
+ }
261
+ /**
262
+ * Fill order from smart contract maker - tokens go to specified target address
263
+ *
264
+ * @param storedOrder - The order fetched from the API
265
+ * @param fillAmount - Amount to fill (in makingAmount units)
266
+ * @param ownerSignature - EIP-1271 signature from the smart account owner
267
+ * @param targetAddress - Address to receive the maker's tokens
268
+ */
269
+ async fillContractOrderTo(storedOrder, fillAmount, ownerSignature, targetAddress) {
270
+ const params = this.buildFillContractOrderToParams(storedOrder, fillAmount, ownerSignature, targetAddress);
271
+ const hash = await this.walletClient.writeContract({
272
+ chain: this.walletClient.chain,
273
+ account: this.walletClient.account,
274
+ ...params,
275
+ });
276
+ await this.publicClient.waitForTransactionReceipt({ hash });
277
+ // Calculate orderStruct for return value
278
+ const extension = Extension.decode(storedOrder.extensionEncoded);
279
+ const limitOrder = LimitOrder.fromDataAndExtension(storedOrder.order, extension);
280
+ const orderStruct = limitOrder.build();
281
+ return {
282
+ txHash: hash,
283
+ makingAmount: fillAmount,
284
+ takingAmount: (BigInt(orderStruct.takingAmount) * fillAmount) /
285
+ BigInt(orderStruct.makingAmount),
286
+ orderHash: storedOrder.orderHash,
287
+ };
288
+ }
289
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./orderbook-api.js";
2
+ export * from "./order-helper.js";
3
+ export * from "./filler.js";
@@ -0,0 +1,3 @@
1
+ export * from "./orderbook-api.js";
2
+ export * from "./order-helper.js";
3
+ export * from "./filler.js";
@@ -0,0 +1,59 @@
1
+ import { type Address, type Hex, type WalletClient } from "viem";
2
+ import { LimitOrder } from "../limit-order";
3
+ import type { Option } from "../shared/types.js";
4
+ export declare class OrderHelper {
5
+ private config;
6
+ constructor(config: {
7
+ chainId: number;
8
+ optionTokenFactoryAddress: Address;
9
+ });
10
+ /**
11
+ * Calculate option token ID from option parameters
12
+ * Delegates to shared utility function
13
+ */
14
+ calculateOptionTokenId(option: Option): Hex;
15
+ /**
16
+ * Build sell options order
17
+ */
18
+ buildSellOptionsOrder(params: {
19
+ maker: Address;
20
+ makerProxyAddress: Address;
21
+ stableToken: Address;
22
+ option: Option;
23
+ optionAmount: string;
24
+ stableAmount: string;
25
+ expiresAt?: bigint;
26
+ }): {
27
+ order: LimitOrder;
28
+ optionTokenId: Hex;
29
+ calldata: string;
30
+ extensionEncoded: string;
31
+ };
32
+ /**
33
+ * Build buy options order
34
+ * For buy orders:
35
+ * - Maker gives: USDC (ERC20) - no suffix needed
36
+ * - Maker receives: Options (ERC6909) - needs takerAssetSuffix
37
+ */
38
+ buildBuyOptionsOrder(params: {
39
+ maker: Address;
40
+ makerProxyAddress: Address;
41
+ stableToken: Address;
42
+ option: Option;
43
+ optionAmount: string;
44
+ stableAmount: string;
45
+ expiresAt?: bigint;
46
+ }): {
47
+ order: LimitOrder;
48
+ optionTokenId: Hex;
49
+ calldata: string;
50
+ extensionEncoded: string;
51
+ };
52
+ /**
53
+ * Sign an order with wallet client
54
+ */
55
+ signOrder(order: LimitOrder, walletClient: WalletClient): Promise<{
56
+ r: string;
57
+ vs: string;
58
+ }>;
59
+ }