@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.
- package/dist/abi/AggregationRouterV6.abi.json +1186 -0
- package/dist/abi/NativeOrderFactory.abi.json +291 -0
- package/dist/abi/NativeOrderImpl.abi.json +381 -0
- package/dist/abi/limitOrderProtocol.json +63 -0
- package/dist/address.d.ts +13 -0
- package/dist/address.js +32 -0
- package/dist/api/filler.d.ts +109 -0
- package/dist/api/filler.js +289 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.js +3 -0
- package/dist/api/order-helper.d.ts +59 -0
- package/dist/api/order-helper.js +112 -0
- package/dist/api/orderbook-api.d.ts +36 -0
- package/dist/api/orderbook-api.js +69 -0
- package/dist/bps.d.ts +35 -0
- package/dist/bps.js +52 -0
- package/dist/config/chains.d.ts +50 -0
- package/dist/config/chains.js +21 -0
- package/dist/config/index.d.ts +25 -0
- package/dist/config/index.js +103 -0
- package/dist/config/markets.d.ts +53 -0
- package/dist/config/markets.js +125 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +30 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +21 -0
- package/dist/limit-order/amounts.d.ts +14 -0
- package/dist/limit-order/amounts.js +19 -0
- package/dist/limit-order/eip712/domain.d.ts +10 -0
- package/dist/limit-order/eip712/domain.js +18 -0
- package/dist/limit-order/eip712/eip712.types.d.ts +23 -0
- package/dist/limit-order/eip712/eip712.types.js +1 -0
- package/dist/limit-order/eip712/index.d.ts +3 -0
- package/dist/limit-order/eip712/index.js +3 -0
- package/dist/limit-order/eip712/order-typed-data-builder.d.ts +6 -0
- package/dist/limit-order/eip712/order-typed-data-builder.js +25 -0
- package/dist/limit-order/extensions/extension-builder.d.ts +35 -0
- package/dist/limit-order/extensions/extension-builder.js +83 -0
- package/dist/limit-order/extensions/extension.d.ts +45 -0
- package/dist/limit-order/extensions/extension.js +108 -0
- package/dist/limit-order/extensions/extension.spec.d.ts +1 -0
- package/dist/limit-order/extensions/extension.spec.js +17 -0
- package/dist/limit-order/extensions/fee-taker/errors.d.ts +2 -0
- package/dist/limit-order/extensions/fee-taker/errors.js +2 -0
- package/dist/limit-order/extensions/fee-taker/fee-calculator.d.ts +40 -0
- package/dist/limit-order/extensions/fee-taker/fee-calculator.js +83 -0
- package/dist/limit-order/extensions/fee-taker/fee-calculator.spec.d.ts +1 -0
- package/dist/limit-order/extensions/fee-taker/fee-calculator.spec.js +14 -0
- package/dist/limit-order/extensions/fee-taker/fee-taker.extension.d.ts +130 -0
- package/dist/limit-order/extensions/fee-taker/fee-taker.extension.js +249 -0
- package/dist/limit-order/extensions/fee-taker/fee-taker.extension.spec.d.ts +1 -0
- package/dist/limit-order/extensions/fee-taker/fee-taker.extension.spec.js +72 -0
- package/dist/limit-order/extensions/fee-taker/fees.d.ts +19 -0
- package/dist/limit-order/extensions/fee-taker/fees.js +36 -0
- package/dist/limit-order/extensions/fee-taker/index.d.ts +7 -0
- package/dist/limit-order/extensions/fee-taker/index.js +7 -0
- package/dist/limit-order/extensions/fee-taker/integrator-fee.d.ts +13 -0
- package/dist/limit-order/extensions/fee-taker/integrator-fee.js +28 -0
- package/dist/limit-order/extensions/fee-taker/resolver-fee.d.ts +19 -0
- package/dist/limit-order/extensions/fee-taker/resolver-fee.js +28 -0
- package/dist/limit-order/extensions/fee-taker/types.d.ts +4 -0
- package/dist/limit-order/extensions/fee-taker/types.js +1 -0
- package/dist/limit-order/extensions/fee-taker/whitelist-half-address.d.ts +18 -0
- package/dist/limit-order/extensions/fee-taker/whitelist-half-address.js +26 -0
- package/dist/limit-order/extensions/index.d.ts +3 -0
- package/dist/limit-order/extensions/index.js +3 -0
- package/dist/limit-order/index.d.ts +10 -0
- package/dist/limit-order/index.js +10 -0
- package/dist/limit-order/interaction.d.ts +16 -0
- package/dist/limit-order/interaction.js +25 -0
- package/dist/limit-order/interaction.spec.d.ts +1 -0
- package/dist/limit-order/interaction.spec.js +8 -0
- package/dist/limit-order/limit-order-with-fee.d.ts +59 -0
- package/dist/limit-order/limit-order-with-fee.js +94 -0
- package/dist/limit-order/limit-order-with-fee.spec.d.ts +1 -0
- package/dist/limit-order/limit-order-with-fee.spec.js +31 -0
- package/dist/limit-order/limit-order.d.ts +63 -0
- package/dist/limit-order/limit-order.js +211 -0
- package/dist/limit-order/limit-order.spec.d.ts +1 -0
- package/dist/limit-order/limit-order.spec.js +103 -0
- package/dist/limit-order/maker-traits.d.ts +200 -0
- package/dist/limit-order/maker-traits.js +309 -0
- package/dist/limit-order/maker-traits.spec.d.ts +1 -0
- package/dist/limit-order/maker-traits.spec.js +102 -0
- package/dist/limit-order/source-track.d.ts +1 -0
- package/dist/limit-order/source-track.js +22 -0
- package/dist/limit-order/taker-traits.d.ts +141 -0
- package/dist/limit-order/taker-traits.js +207 -0
- package/dist/limit-order/types.d.ts +24 -0
- package/dist/limit-order/types.js +1 -0
- package/dist/limit-order/verification.d.ts +16 -0
- package/dist/limit-order/verification.js +108 -0
- package/dist/limit-order-contract/index.d.ts +4 -0
- package/dist/limit-order-contract/index.js +4 -0
- package/dist/limit-order-contract/limit-order-contract.d.ts +34 -0
- package/dist/limit-order-contract/limit-order-contract.js +79 -0
- package/dist/limit-order-contract/native-order-factory.d.ts +10 -0
- package/dist/limit-order-contract/native-order-factory.js +22 -0
- package/dist/limit-order-contract/native-order-impl.d.ts +10 -0
- package/dist/limit-order-contract/native-order-impl.js +24 -0
- package/dist/limit-order-contract/proxy-factory.d.ts +20 -0
- package/dist/limit-order-contract/proxy-factory.js +32 -0
- package/dist/limit-order-contract/proxy-factory.spec.d.ts +1 -0
- package/dist/limit-order-contract/proxy-factory.spec.js +16 -0
- package/dist/limit-order-contract/types.d.ts +6 -0
- package/dist/limit-order-contract/types.js +1 -0
- package/dist/ponder/client/index.d.ts +23 -0
- package/dist/ponder/client/index.js +44 -0
- package/dist/ponder/client/queries/markets.d.ts +30 -0
- package/dist/ponder/client/queries/markets.js +200 -0
- package/dist/ponder/client/queries/positions.d.ts +13 -0
- package/dist/ponder/client/queries/positions.js +406 -0
- package/dist/ponder/client/types/history.d.ts +94 -0
- package/dist/ponder/client/types/history.js +1 -0
- package/dist/ponder/client/types/index.d.ts +5 -0
- package/dist/ponder/client/types/index.js +5 -0
- package/dist/ponder/client/types/market.d.ts +45 -0
- package/dist/ponder/client/types/market.js +1 -0
- package/dist/ponder/client/types/position.d.ts +32 -0
- package/dist/ponder/client/types/position.js +1 -0
- package/dist/ponder/client/types/serializers.d.ts +57 -0
- package/dist/ponder/client/types/serializers.js +248 -0
- package/dist/ponder/client/types/user.d.ts +5 -0
- package/dist/ponder/client/types/user.js +1 -0
- package/dist/ponder/client/utils.d.ts +1 -0
- package/dist/ponder/client/utils.js +32 -0
- package/dist/ponder/generated/index.d.ts +18 -0
- package/dist/ponder/generated/index.js +20 -0
- package/dist/ponder/generated/runtime/batcher.d.ts +105 -0
- package/dist/ponder/generated/runtime/batcher.js +188 -0
- package/dist/ponder/generated/runtime/createClient.d.ts +17 -0
- package/dist/ponder/generated/runtime/createClient.js +24 -0
- package/dist/ponder/generated/runtime/error.d.ts +18 -0
- package/dist/ponder/generated/runtime/error.js +15 -0
- package/dist/ponder/generated/runtime/fetcher.d.ts +10 -0
- package/dist/ponder/generated/runtime/fetcher.js +67 -0
- package/dist/ponder/generated/runtime/generateGraphqlOperation.d.ts +30 -0
- package/dist/ponder/generated/runtime/generateGraphqlOperation.js +128 -0
- package/dist/ponder/generated/runtime/index.d.ts +11 -0
- package/dist/ponder/generated/runtime/index.js +10 -0
- package/dist/ponder/generated/runtime/linkTypeMap.d.ts +9 -0
- package/dist/ponder/generated/runtime/linkTypeMap.js +83 -0
- package/dist/ponder/generated/runtime/typeSelection.d.ts +28 -0
- package/dist/ponder/generated/runtime/typeSelection.js +3 -0
- package/dist/ponder/generated/runtime/types.d.ts +55 -0
- package/dist/ponder/generated/runtime/types.js +2 -0
- package/dist/ponder/generated/schema.d.ts +3026 -0
- package/dist/ponder/generated/schema.js +222 -0
- package/dist/ponder/generated/types.d.ts +2393 -0
- package/dist/ponder/generated/types.js +6915 -0
- package/dist/ponder/index.d.ts +2 -0
- package/dist/ponder/index.js +2 -0
- package/dist/ponder/types.d.ts +3 -0
- package/dist/ponder/types.js +1 -0
- package/dist/rfq-order/index.d.ts +1 -0
- package/dist/rfq-order/index.js +1 -0
- package/dist/rfq-order/rfq-order.d.ts +21 -0
- package/dist/rfq-order/rfq-order.js +22 -0
- package/dist/rfq-order/rfq-order.spec.d.ts +1 -0
- package/dist/rfq-order/rfq-order.spec.js +27 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/types.d.ts +79 -0
- package/dist/shared/types.js +12 -0
- package/dist/shared/utils.d.ts +7 -0
- package/dist/shared/utils.js +19 -0
- package/dist/sync/clients/balance-client.d.ts +41 -0
- package/dist/sync/clients/balance-client.js +139 -0
- package/dist/sync/clients/base-client.d.ts +47 -0
- package/dist/sync/clients/base-client.js +154 -0
- package/dist/sync/clients/order-client.d.ts +18 -0
- package/dist/sync/clients/order-client.js +151 -0
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +3 -0
- package/dist/sync/redis-ws-client.d.ts +18 -0
- package/dist/sync/redis-ws-client.js +88 -0
- package/dist/sync/types.d.ts +20 -0
- package/dist/sync/types.js +1 -0
- package/dist/utils/mul-div.d.ts +5 -0
- package/dist/utils/mul-div.js +13 -0
- package/dist/utils/orderUtils.d.ts +19 -0
- package/dist/utils/orderUtils.js +51 -0
- package/dist/utils/rand-bigint.d.ts +1 -0
- package/dist/utils/rand-bigint.js +13 -0
- package/dist/utils/rand-bigint.spec.d.ts +1 -0
- package/dist/utils/rand-bigint.spec.js +11 -0
- package/dist/validations.d.ts +1 -0
- package/dist/validations.js +3 -0
- 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
|
+
}
|
package/dist/address.js
ADDED
|
@@ -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,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
|
+
}
|