@1inch/fusion-sdk 2.4.7-rc.3 → 2.4.8-rc.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/README.md +25 -174
- package/dist/cjs/api/quoter/quote/quote.js +20 -6
- package/dist/cjs/api/quoter/quoter.api.spec.js +103 -6
- package/dist/cjs/api/quoter/quoter.request.js +1 -4
- package/dist/cjs/api/quoter/quoter.request.spec.js +2 -8
- package/dist/cjs/constants.js +1 -19
- package/dist/cjs/fusion-order/fusion-extension.js +10 -3
- package/dist/cjs/fusion-order/fusion-order.js +5 -120
- package/dist/cjs/fusion-order/fusion-order.spec.js +124 -93
- package/dist/cjs/fusion-order/index.js +0 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/sdk/README.md +18 -14
- package/dist/esm/api/quoter/quote/quote.js +20 -6
- package/dist/esm/api/quoter/quote/types.js +15 -3
- package/dist/esm/api/quoter/quoter.api.spec.js +103 -6
- package/dist/esm/api/quoter/quoter.request.js +1 -4
- package/dist/esm/api/quoter/quoter.request.spec.js +2 -8
- package/dist/esm/constants.js +1 -16
- package/dist/esm/fusion-order/fusion-extension.js +10 -3
- package/dist/esm/fusion-order/fusion-order.js +6 -121
- package/dist/esm/fusion-order/fusion-order.spec.js +125 -94
- package/dist/esm/fusion-order/index.js +0 -1
- package/dist/esm/fusion-order/types.js +5 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk/README.md +18 -14
- package/dist/types/src/api/quoter/quote/quote.d.ts +3 -2
- package/dist/types/src/api/quoter/quote/types.d.ts +6 -1
- package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
- package/dist/types/src/api/quoter/types.d.ts +2 -2
- package/dist/types/src/constants.d.ts +0 -1
- package/dist/types/src/fusion-order/fusion-extension.d.ts +2 -0
- package/dist/types/src/fusion-order/fusion-order.d.ts +0 -6
- package/dist/types/src/fusion-order/index.d.ts +0 -1
- package/dist/types/src/fusion-order/types.d.ts +1 -0
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/sdk/types.d.ts +3 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/cjs/fusion-order/permit/constants.js +0 -98
- package/dist/cjs/fusion-order/permit/index.js +0 -34
- package/dist/cjs/fusion-order/permit/permit-transfer-from.js +0 -115
- package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +0 -232
- package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +0 -61
- package/dist/cjs/fusion-order/permit/utils.js +0 -35
- package/dist/esm/fusion-order/permit/constants.js +0 -71
- package/dist/esm/fusion-order/permit/index.js +0 -3
- package/dist/esm/fusion-order/permit/permit-transfer-from.js +0 -105
- package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +0 -228
- package/dist/esm/fusion-order/permit/transfer-from-suffix.js +0 -38
- package/dist/esm/fusion-order/permit/utils.js +0 -12
- package/dist/types/src/fusion-order/permit/constants.d.ts +0 -7
- package/dist/types/src/fusion-order/permit/index.d.ts +0 -3
- package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +0 -11
- package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +0 -10
- package/dist/types/src/fusion-order/permit/utils.d.ts +0 -3
package/README.md
CHANGED
|
@@ -16,22 +16,16 @@ yarn add @1inch/fusion-sdk@2
|
|
|
16
16
|
|
|
17
17
|
## Modules docs
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
19
|
+
- [auction-details](src/fusion-order/auction-details/README.md)
|
|
20
|
+
- [fusion-order](src/fusion-order/README.md)
|
|
21
|
+
- [sdk](src/sdk/README.md)
|
|
22
|
+
- [ws-api](src/ws-api/README.md)
|
|
23
23
|
|
|
24
24
|
## How to swap with Fusion Mode
|
|
25
25
|
|
|
26
26
|
```typescript
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
NetworkEnum,
|
|
30
|
-
OrderStatus,
|
|
31
|
-
PrivateKeyProviderConnector,
|
|
32
|
-
Web3Like
|
|
33
|
-
} from '@1inch/fusion-sdk'
|
|
34
|
-
import {computeAddress, formatUnits, JsonRpcProvider} from 'ethers'
|
|
27
|
+
import {FusionSDK, NetworkEnum, OrderStatus, PrivateKeyProviderConnector, Web3Like,} from "@1inch/fusion-sdk";
|
|
28
|
+
import {computeAddress, formatUnits, JsonRpcProvider} from "ethers";
|
|
35
29
|
|
|
36
30
|
const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
|
|
37
31
|
const NODE_URL = 'YOUR_WEB3_NODE_URL'
|
|
@@ -54,7 +48,7 @@ const connector = new PrivateKeyProviderConnector(
|
|
|
54
48
|
)
|
|
55
49
|
|
|
56
50
|
const sdk = new FusionSDK({
|
|
57
|
-
url: 'https://api.1inch.
|
|
51
|
+
url: 'https://api.1inch.dev/fusion',
|
|
58
52
|
network: NetworkEnum.BINANCE,
|
|
59
53
|
blockchainProvider: connector,
|
|
60
54
|
authKey: DEV_PORTAL_API_TOKEN
|
|
@@ -63,7 +57,7 @@ const sdk = new FusionSDK({
|
|
|
63
57
|
async function main() {
|
|
64
58
|
const params = {
|
|
65
59
|
fromTokenAddress: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', // USDC
|
|
66
|
-
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
60
|
+
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // BNB
|
|
67
61
|
amount: '10000000000000000000', // 10 USDC
|
|
68
62
|
walletAddress: computeAddress(PRIVATE_KEY),
|
|
69
63
|
source: 'sdk-test'
|
|
@@ -72,25 +66,12 @@ async function main() {
|
|
|
72
66
|
const quote = await sdk.getQuote(params)
|
|
73
67
|
|
|
74
68
|
const dstTokenDecimals = 18
|
|
75
|
-
console.log(
|
|
76
|
-
|
|
77
|
-
formatUnits(
|
|
78
|
-
quote.presets[quote.recommendedPreset].auctionStartAmount,
|
|
79
|
-
dstTokenDecimals
|
|
80
|
-
)
|
|
81
|
-
)
|
|
82
|
-
console.log(
|
|
83
|
-
'Auction end amount',
|
|
84
|
-
formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount),
|
|
85
|
-
dstTokenDecimals
|
|
86
|
-
)
|
|
69
|
+
console.log('Auction start amount', formatUnits(quote.presets[quote.recommendedPreset].auctionStartAmount, dstTokenDecimals))
|
|
70
|
+
console.log('Auction end amount', formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount), dstTokenDecimals)
|
|
87
71
|
|
|
88
72
|
const preparedOrder = await sdk.createOrder(params)
|
|
89
73
|
|
|
90
|
-
const info = await sdk.submitOrder(
|
|
91
|
-
preparedOrder.order,
|
|
92
|
-
preparedOrder.quoteId
|
|
93
|
-
)
|
|
74
|
+
const info = await sdk.submitOrder(preparedOrder.order, preparedOrder.quoteId)
|
|
94
75
|
|
|
95
76
|
console.log('OrderHash', info.orderHash)
|
|
96
77
|
|
|
@@ -109,7 +90,7 @@ async function main() {
|
|
|
109
90
|
console.log('Order Expired')
|
|
110
91
|
break
|
|
111
92
|
}
|
|
112
|
-
|
|
93
|
+
|
|
113
94
|
if (data.status === OrderStatus.Cancelled) {
|
|
114
95
|
console.log('Order Cancelled')
|
|
115
96
|
break
|
|
@@ -117,6 +98,7 @@ async function main() {
|
|
|
117
98
|
} catch (e) {
|
|
118
99
|
console.log(e)
|
|
119
100
|
}
|
|
101
|
+
|
|
120
102
|
}
|
|
121
103
|
|
|
122
104
|
console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
|
|
@@ -126,18 +108,9 @@ main()
|
|
|
126
108
|
```
|
|
127
109
|
|
|
128
110
|
## How to swap with Fusion mode from Native asset
|
|
129
|
-
|
|
130
111
|
```typescript
|
|
131
|
-
import {
|
|
132
|
-
|
|
133
|
-
NetworkEnum,
|
|
134
|
-
OrderStatus,
|
|
135
|
-
PrivateKeyProviderConnector,
|
|
136
|
-
Web3Like,
|
|
137
|
-
Address,
|
|
138
|
-
NativeOrdersFactory
|
|
139
|
-
} from '@1inch/fusion-sdk'
|
|
140
|
-
import {computeAddress, formatUnits, JsonRpcProvider, Wallet} from 'ethers'
|
|
112
|
+
import {FusionSDK, NetworkEnum, OrderStatus, PrivateKeyProviderConnector, Web3Like, Address, NativeOrdersFactory} from "@1inch/fusion-sdk";
|
|
113
|
+
import {computeAddress, formatUnits, JsonRpcProvider, Wallet} from "ethers";
|
|
141
114
|
|
|
142
115
|
const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
|
|
143
116
|
const NODE_URL = 'YOUR_WEB3_NODE_URL'
|
|
@@ -160,7 +133,7 @@ const connector = new PrivateKeyProviderConnector(
|
|
|
160
133
|
)
|
|
161
134
|
|
|
162
135
|
const sdk = new FusionSDK({
|
|
163
|
-
url: 'https://api.1inch.
|
|
136
|
+
url: 'https://api.1inch.dev/fusion',
|
|
164
137
|
network: NetworkEnum.BINANCE,
|
|
165
138
|
blockchainProvider: connector,
|
|
166
139
|
authKey: DEV_PORTAL_API_TOKEN
|
|
@@ -171,43 +144,26 @@ const wallet = new Wallet(PRIVATE_KEY, ethersRpcProvider)
|
|
|
171
144
|
async function main() {
|
|
172
145
|
const params = {
|
|
173
146
|
fromTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
|
|
174
|
-
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
|
147
|
+
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
175
148
|
amount: '2000000000000000', // 0.002 ETH
|
|
176
149
|
walletAddress: computeAddress(PRIVATE_KEY),
|
|
177
150
|
source: 'sdk-test'
|
|
178
151
|
}
|
|
179
|
-
|
|
152
|
+
|
|
180
153
|
const quote = await sdk.getQuote(params)
|
|
181
154
|
|
|
182
155
|
const dstTokenDecimals = 6
|
|
183
|
-
console.log(
|
|
184
|
-
|
|
185
|
-
formatUnits(
|
|
186
|
-
quote.presets[quote.recommendedPreset].auctionStartAmount,
|
|
187
|
-
dstTokenDecimals
|
|
188
|
-
)
|
|
189
|
-
)
|
|
190
|
-
console.log(
|
|
191
|
-
'Auction end amount',
|
|
192
|
-
formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount),
|
|
193
|
-
dstTokenDecimals
|
|
194
|
-
)
|
|
156
|
+
console.log('Auction start amount', formatUnits(quote.presets[quote.recommendedPreset].auctionStartAmount, dstTokenDecimals))
|
|
157
|
+
console.log('Auction end amount', formatUnits(quote.presets[quote.recommendedPreset].auctionEndAmount), dstTokenDecimals)
|
|
195
158
|
|
|
196
159
|
const preparedOrder = await sdk.createOrder(params)
|
|
197
160
|
|
|
198
|
-
const info = await sdk.submitNativeOrder(
|
|
199
|
-
preparedOrder.order,
|
|
200
|
-
new Address(params.walletAddress),
|
|
201
|
-
preparedOrder.quoteId
|
|
202
|
-
)
|
|
161
|
+
const info = await sdk.submitNativeOrder(preparedOrder.order, new Address(params.walletAddress), preparedOrder.quoteId)
|
|
203
162
|
|
|
204
163
|
console.log('OrderHash', info.orderHash)
|
|
205
164
|
|
|
206
165
|
const factory = NativeOrdersFactory.default(NetworkEnum.BINANCE)
|
|
207
|
-
const call = factory.create(
|
|
208
|
-
new Address(wallet.address),
|
|
209
|
-
preparedOrder.order.build()
|
|
210
|
-
)
|
|
166
|
+
const call = factory.create(new Address(wallet.address), preparedOrder.order.build())
|
|
211
167
|
|
|
212
168
|
const txRes = await wallet.sendTransaction({
|
|
213
169
|
to: call.to.toString(),
|
|
@@ -219,6 +175,7 @@ async function main() {
|
|
|
219
175
|
|
|
220
176
|
await wallet.provider.waitForTransaction(txRes.hash)
|
|
221
177
|
|
|
178
|
+
|
|
222
179
|
const start = Date.now()
|
|
223
180
|
|
|
224
181
|
while (true) {
|
|
@@ -234,7 +191,7 @@ async function main() {
|
|
|
234
191
|
console.log('Order Expired')
|
|
235
192
|
break
|
|
236
193
|
}
|
|
237
|
-
|
|
194
|
+
|
|
238
195
|
if (data.status === OrderStatus.Cancelled) {
|
|
239
196
|
console.log('Order Cancelled')
|
|
240
197
|
break
|
|
@@ -242,121 +199,15 @@ async function main() {
|
|
|
242
199
|
} catch (e) {
|
|
243
200
|
console.log(e)
|
|
244
201
|
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
main()
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
## How to swap with Fusion Mode using TransferPermit
|
|
254
|
-
|
|
255
|
-
Instead of granting a token approval to the 1inch Limit Order Protocol, you can use a `TransferPermit` for signature-based transfers via a Permit2Proxy contract.
|
|
256
|
-
|
|
257
|
-
The maker only needs to approve tokens to the Permit2 contract once. Each order then carries a single-use `PermitTransferFrom` signature instead of an on-chain allowance to the protocol.
|
|
258
|
-
|
|
259
|
-
```typescript
|
|
260
|
-
import {
|
|
261
|
-
FusionSDK,
|
|
262
|
-
NetworkEnum,
|
|
263
|
-
OrderStatus,
|
|
264
|
-
PrivateKeyProviderConnector,
|
|
265
|
-
Web3Like,
|
|
266
|
-
getPermit2Address
|
|
267
|
-
} from '@1inch/fusion-sdk'
|
|
268
|
-
import {computeAddress, JsonRpcProvider, Wallet} from 'ethers'
|
|
269
|
-
|
|
270
|
-
const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
|
|
271
|
-
const NODE_URL = 'YOUR_WEB3_NODE_URL'
|
|
272
|
-
const DEV_PORTAL_API_TOKEN = 'YOUR_DEV_PORTAL_API_TOKEN'
|
|
273
|
-
|
|
274
|
-
const ethersRpcProvider = new JsonRpcProvider(NODE_URL)
|
|
275
|
-
|
|
276
|
-
const ethersProviderConnector: Web3Like = {
|
|
277
|
-
eth: {
|
|
278
|
-
call(transactionConfig): Promise<string> {
|
|
279
|
-
return ethersRpcProvider.call(transactionConfig)
|
|
280
|
-
}
|
|
281
|
-
},
|
|
282
|
-
extend(): void {}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const connector = new PrivateKeyProviderConnector(
|
|
286
|
-
PRIVATE_KEY,
|
|
287
|
-
ethersProviderConnector
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
const sdk = new FusionSDK({
|
|
291
|
-
url: 'https://api.1inch.com/fusion',
|
|
292
|
-
network: NetworkEnum.ETHEREUM,
|
|
293
|
-
blockchainProvider: connector,
|
|
294
|
-
authKey: DEV_PORTAL_API_TOKEN
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
const wallet = new Wallet(PRIVATE_KEY, ethersRpcProvider)
|
|
298
|
-
|
|
299
|
-
async function main() {
|
|
300
|
-
// Step 1: Approve token to the Permit2 contract (one-time, can be unlimited)
|
|
301
|
-
// This replaces the usual approval to the 1inch Limit Order Protocol
|
|
302
|
-
const permit2Address = getPermit2Address(NetworkEnum.ETHEREUM)
|
|
303
|
-
// await approveToken(fromTokenAddress, permit2Address, MAX_UINT256)
|
|
304
202
|
|
|
305
|
-
// Step 2: Get quote and create order
|
|
306
|
-
const params = {
|
|
307
|
-
fromTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH
|
|
308
|
-
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
309
|
-
amount: '50000000000000000', // 0.05 WETH
|
|
310
|
-
walletAddress: computeAddress(PRIVATE_KEY)
|
|
311
203
|
}
|
|
312
204
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
// Step 3: Create a transfer permit for the order
|
|
316
|
-
const permit = order.createTransferPermit(NetworkEnum.ETHEREUM)
|
|
317
|
-
|
|
318
|
-
// Step 4: Sign the transfer permit
|
|
319
|
-
const permitTypedData = permit.getTypedData(NetworkEnum.ETHEREUM)
|
|
320
|
-
const permitSignature = await connector.signTypedData(
|
|
321
|
-
params.walletAddress,
|
|
322
|
-
permitTypedData
|
|
323
|
-
)
|
|
324
|
-
|
|
325
|
-
// Step 5: Attach the signed permit to the order
|
|
326
|
-
const orderWithPermit = order.withTransferPermit(permit, permitSignature)
|
|
327
|
-
|
|
328
|
-
// Step 6: Submit the order (the SDK signs the order and sends it to the relayer)
|
|
329
|
-
const info = await sdk.submitOrder(orderWithPermit, quoteId)
|
|
330
|
-
|
|
331
|
-
console.log('OrderHash', info.orderHash)
|
|
332
|
-
|
|
333
|
-
while (true) {
|
|
334
|
-
const data = await sdk.getOrderStatus(info.orderHash)
|
|
335
|
-
|
|
336
|
-
if (data.status === OrderStatus.Filled) {
|
|
337
|
-
console.log('fills', data.fills)
|
|
338
|
-
break
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
if (
|
|
342
|
-
data.status === OrderStatus.Expired ||
|
|
343
|
-
data.status === OrderStatus.Cancelled
|
|
344
|
-
) {
|
|
345
|
-
console.log('Order', data.status)
|
|
346
|
-
break
|
|
347
|
-
}
|
|
348
|
-
}
|
|
205
|
+
console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
|
|
349
206
|
}
|
|
350
207
|
|
|
351
208
|
main()
|
|
352
209
|
```
|
|
353
210
|
|
|
354
|
-
**Key differences from a standard swap:**
|
|
355
|
-
|
|
356
|
-
- Token approval goes to `Permit2` instead of the 1inch protocol
|
|
357
|
-
- Create and sign a `PermitTransferFrom` using the Permit2Proxy address as spender
|
|
358
|
-
- Call `withTransferPermit` before submitting — this modifies the order to route through the Permit2Proxy
|
|
359
|
-
|
|
360
211
|
## Resolvers
|
|
361
212
|
|
|
362
213
|
`settleOrders` function usage and Resolver contract examples you can find [here](https://github.com/1inch/fusion-resolver-example)
|
|
@@ -102,11 +102,7 @@ var Quote = /*#__PURE__*/ function() {
|
|
|
102
102
|
bps: new _limitordersdk.Bps(BigInt(response.fee.bps))
|
|
103
103
|
};
|
|
104
104
|
this.surplusFee = response.surplusFee;
|
|
105
|
-
this.integratorFeeParams =
|
|
106
|
-
receiver: new _limitordersdk.Address(response.integratorFeeReceiver),
|
|
107
|
-
value: new _limitordersdk.Bps(BigInt(response.integratorFee)),
|
|
108
|
-
share: _limitordersdk.Bps.fromPercent(response.integratorFeeShare || 0)
|
|
109
|
-
} : undefined;
|
|
105
|
+
this.integratorFeeParams = this.parseIntegratorFee(response);
|
|
110
106
|
}
|
|
111
107
|
_create_class(Quote, [
|
|
112
108
|
{
|
|
@@ -153,7 +149,7 @@ var Quote = /*#__PURE__*/ function() {
|
|
|
153
149
|
orderExpirationDelay: paramsData === null || paramsData === void 0 ? void 0 : paramsData.orderExpirationDelay,
|
|
154
150
|
source: this.params.source,
|
|
155
151
|
enablePermit2: params.isPermit2,
|
|
156
|
-
fees: buildFees(this.resolverFeePreset, this.
|
|
152
|
+
fees: buildFees(this.resolverFeePreset, this.integratorFeeParams, this.surplusFee)
|
|
157
153
|
};
|
|
158
154
|
return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
|
|
159
155
|
}
|
|
@@ -194,6 +190,24 @@ var Quote = /*#__PURE__*/ function() {
|
|
|
194
190
|
}
|
|
195
191
|
return _index.FusionOrder.new(settlementExtension, orderInfo, details, extra);
|
|
196
192
|
}
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
key: "parseIntegratorFee",
|
|
196
|
+
value: function parseIntegratorFee(response) {
|
|
197
|
+
var _this_params_integratorFee_receiver, _this_params_integratorFee;
|
|
198
|
+
if (!response.integratorFee) {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
var receiver = response.integratorFeeReceiver || ((_this_params_integratorFee = this.params.integratorFee) === null || _this_params_integratorFee === void 0 ? void 0 : (_this_params_integratorFee_receiver = _this_params_integratorFee.receiver) === null || _this_params_integratorFee_receiver === void 0 ? void 0 : _this_params_integratorFee_receiver.toString());
|
|
202
|
+
if (!receiver) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
receiver: new _limitordersdk.Address(receiver),
|
|
207
|
+
value: new _limitordersdk.Bps(BigInt(response.integratorFee)),
|
|
208
|
+
share: _limitordersdk.Bps.fromPercent(response.integratorFeeShare || 0)
|
|
209
|
+
};
|
|
210
|
+
}
|
|
197
211
|
}
|
|
198
212
|
]);
|
|
199
213
|
return Quote;
|
|
@@ -8,6 +8,7 @@ var _quoterrequest = require("./quoter.request.js");
|
|
|
8
8
|
var _index = require("./quote/index.js");
|
|
9
9
|
var _types = require("./types.js");
|
|
10
10
|
var _quotercustompresetrequest = require("./quoter-custom-preset.request.js");
|
|
11
|
+
var _constants = require("../../constants.js");
|
|
11
12
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
12
13
|
try {
|
|
13
14
|
var info = gen[key](arg);
|
|
@@ -37,6 +38,58 @@ function _async_to_generator(fn) {
|
|
|
37
38
|
});
|
|
38
39
|
};
|
|
39
40
|
}
|
|
41
|
+
function _define_property(obj, key, value) {
|
|
42
|
+
if (key in obj) {
|
|
43
|
+
Object.defineProperty(obj, key, {
|
|
44
|
+
value: value,
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true
|
|
48
|
+
});
|
|
49
|
+
} else {
|
|
50
|
+
obj[key] = value;
|
|
51
|
+
}
|
|
52
|
+
return obj;
|
|
53
|
+
}
|
|
54
|
+
function _object_spread(target) {
|
|
55
|
+
for(var i = 1; i < arguments.length; i++){
|
|
56
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
57
|
+
var ownKeys = Object.keys(source);
|
|
58
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
59
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
60
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
ownKeys.forEach(function(key) {
|
|
64
|
+
_define_property(target, key, source[key]);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return target;
|
|
68
|
+
}
|
|
69
|
+
function ownKeys(object, enumerableOnly) {
|
|
70
|
+
var keys = Object.keys(object);
|
|
71
|
+
if (Object.getOwnPropertySymbols) {
|
|
72
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
73
|
+
if (enumerableOnly) {
|
|
74
|
+
symbols = symbols.filter(function(sym) {
|
|
75
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
keys.push.apply(keys, symbols);
|
|
79
|
+
}
|
|
80
|
+
return keys;
|
|
81
|
+
}
|
|
82
|
+
function _object_spread_props(target, source) {
|
|
83
|
+
source = source != null ? source : {};
|
|
84
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
85
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
86
|
+
} else {
|
|
87
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
88
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return target;
|
|
92
|
+
}
|
|
40
93
|
function _ts_generator(thisArg, body) {
|
|
41
94
|
var f, y, t, g, _ = {
|
|
42
95
|
label: 0,
|
|
@@ -243,7 +296,7 @@ describe('Quoter API', function() {
|
|
|
243
296
|
],
|
|
244
297
|
fee: {
|
|
245
298
|
whitelistDiscountPercent: 1,
|
|
246
|
-
receiver:
|
|
299
|
+
receiver: _constants.ONE_INCH_LIMIT_ORDER_V4,
|
|
247
300
|
bps: 10
|
|
248
301
|
},
|
|
249
302
|
marketAmount: '626772029219852913'
|
|
@@ -265,7 +318,7 @@ describe('Quoter API', function() {
|
|
|
265
318
|
case 1:
|
|
266
319
|
res = _state.sent();
|
|
267
320
|
expect(res).toStrictEqual(QuoterResponseMock);
|
|
268
|
-
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&
|
|
321
|
+
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&surplus=true');
|
|
269
322
|
return [
|
|
270
323
|
2
|
|
271
324
|
];
|
|
@@ -287,7 +340,6 @@ describe('Quoter API', function() {
|
|
|
287
340
|
amount: '1000000000000000000000',
|
|
288
341
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
289
342
|
integratorFee: {
|
|
290
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
291
343
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
292
344
|
value: new _limitordersdk.Bps(1n)
|
|
293
345
|
},
|
|
@@ -323,7 +375,6 @@ describe('Quoter API', function() {
|
|
|
323
375
|
amount: '1000000000000000000000',
|
|
324
376
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
325
377
|
integratorFee: {
|
|
326
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
327
378
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
328
379
|
value: new _limitordersdk.Bps(1n)
|
|
329
380
|
},
|
|
@@ -360,7 +411,6 @@ describe('Quoter API', function() {
|
|
|
360
411
|
amount: '1000000000000000000000',
|
|
361
412
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
362
413
|
integratorFee: {
|
|
363
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
364
414
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
365
415
|
value: new _limitordersdk.Bps(1n)
|
|
366
416
|
},
|
|
@@ -413,7 +463,6 @@ describe('Quoter API', function() {
|
|
|
413
463
|
amount: '1000000000000000000000',
|
|
414
464
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
415
465
|
integratorFee: {
|
|
416
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
417
466
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
418
467
|
value: new _limitordersdk.Bps(1n)
|
|
419
468
|
},
|
|
@@ -452,4 +501,52 @@ describe('Quoter API', function() {
|
|
|
452
501
|
}
|
|
453
502
|
});
|
|
454
503
|
}));
|
|
504
|
+
describe('parseIntegratorFee', function() {
|
|
505
|
+
it('should use response receiver when provided', function() {
|
|
506
|
+
var _quote_integratorFeeParams, _quote_integratorFeeParams1, _quote_integratorFeeParams2;
|
|
507
|
+
var responseWithFee = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
508
|
+
integratorFee: 100,
|
|
509
|
+
integratorFeeReceiver: '0x1234567890123456789012345678901234567890',
|
|
510
|
+
integratorFeeShare: 50
|
|
511
|
+
});
|
|
512
|
+
var quote = new _index.Quote(params, responseWithFee);
|
|
513
|
+
expect(quote.integratorFeeParams).toBeDefined();
|
|
514
|
+
expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0x1234567890123456789012345678901234567890');
|
|
515
|
+
expect(Number((_quote_integratorFeeParams1 = quote.integratorFeeParams) === null || _quote_integratorFeeParams1 === void 0 ? void 0 : _quote_integratorFeeParams1.value.value)).toBe(100);
|
|
516
|
+
expect(Number((_quote_integratorFeeParams2 = quote.integratorFeeParams) === null || _quote_integratorFeeParams2 === void 0 ? void 0 : _quote_integratorFeeParams2.share.value)).toBe(5000);
|
|
517
|
+
});
|
|
518
|
+
it('should fallback to request receiver when response receiver is missing', function() {
|
|
519
|
+
var _quote_integratorFeeParams;
|
|
520
|
+
var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
521
|
+
integratorFee: 100,
|
|
522
|
+
integratorFeeShare: 50
|
|
523
|
+
});
|
|
524
|
+
var paramsWithFee = _quoterrequest.QuoterRequest.new({
|
|
525
|
+
fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
526
|
+
toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
527
|
+
amount: '1000000000000000000000',
|
|
528
|
+
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
529
|
+
integratorFee: {
|
|
530
|
+
receiver: new _limitordersdk.Address('0xabcdef0123456789abcdef0123456789abcdef01'),
|
|
531
|
+
value: new _limitordersdk.Bps(100n)
|
|
532
|
+
},
|
|
533
|
+
source: 'test-source'
|
|
534
|
+
});
|
|
535
|
+
var quote = new _index.Quote(paramsWithFee, responseWithFeeNoReceiver);
|
|
536
|
+
expect(quote.integratorFeeParams).toBeDefined();
|
|
537
|
+
expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0xabcdef0123456789abcdef0123456789abcdef01');
|
|
538
|
+
});
|
|
539
|
+
it('should return undefined when no receiver available', function() {
|
|
540
|
+
var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
541
|
+
integratorFee: 100,
|
|
542
|
+
integratorFeeShare: 50
|
|
543
|
+
});
|
|
544
|
+
var quote = new _index.Quote(params, responseWithFeeNoReceiver);
|
|
545
|
+
expect(quote.integratorFeeParams).toBeUndefined();
|
|
546
|
+
});
|
|
547
|
+
it('should return undefined when no integratorFee in response', function() {
|
|
548
|
+
var quote = new _index.Quote(params, ResponseMock);
|
|
549
|
+
expect(quote.integratorFeeParams).toBeUndefined();
|
|
550
|
+
});
|
|
551
|
+
});
|
|
455
552
|
});
|
|
@@ -63,7 +63,7 @@ var QuoterRequest = /*#__PURE__*/ function() {
|
|
|
63
63
|
this.enableEstimate = params.enableEstimate || false;
|
|
64
64
|
this.permit = params.permit;
|
|
65
65
|
this.integratorFee = params.integratorFee;
|
|
66
|
-
this.source = params.source
|
|
66
|
+
this.source = params.source;
|
|
67
67
|
var _params_isPermit2;
|
|
68
68
|
this.isPermit2 = (_params_isPermit2 = params.isPermit2) !== null && _params_isPermit2 !== void 0 ? _params_isPermit2 : false;
|
|
69
69
|
this.slippage = params.slippage;
|
|
@@ -76,9 +76,6 @@ var QuoterRequest = /*#__PURE__*/ function() {
|
|
|
76
76
|
if (!(0, _validations.isValidAmount)(this.amount)) {
|
|
77
77
|
throw new Error("".concat(this.amount, " is invalid amount"));
|
|
78
78
|
}
|
|
79
|
-
if (this.integratorFee && this.source === 'sdk') {
|
|
80
|
-
throw new Error('cannot use fee without source');
|
|
81
|
-
}
|
|
82
79
|
}
|
|
83
80
|
_create_class(QuoterRequest, [
|
|
84
81
|
{
|
|
@@ -13,7 +13,6 @@ describe(__filename, function() {
|
|
|
13
13
|
amount: '1000000000000000000000',
|
|
14
14
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
15
15
|
integratorFee: {
|
|
16
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
17
16
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
18
17
|
value: new _limitordersdk.Bps(1n)
|
|
19
18
|
}
|
|
@@ -26,7 +25,6 @@ describe(__filename, function() {
|
|
|
26
25
|
amount: '1000000000000000000000',
|
|
27
26
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
28
27
|
integratorFee: {
|
|
29
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
30
28
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
31
29
|
value: new _limitordersdk.Bps(1n)
|
|
32
30
|
}
|
|
@@ -41,7 +39,6 @@ describe(__filename, function() {
|
|
|
41
39
|
amount: '1000000000000000000000',
|
|
42
40
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
43
41
|
integratorFee: {
|
|
44
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
45
42
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
46
43
|
value: new _limitordersdk.Bps(1n)
|
|
47
44
|
}
|
|
@@ -56,7 +53,6 @@ describe(__filename, function() {
|
|
|
56
53
|
amount: '1000000000000000000000',
|
|
57
54
|
walletAddress: '0x0000000019ab540356cbb839be05303d7705fa1',
|
|
58
55
|
integratorFee: {
|
|
59
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
60
56
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
61
57
|
value: new _limitordersdk.Bps(1n)
|
|
62
58
|
}
|
|
@@ -71,14 +67,13 @@ describe(__filename, function() {
|
|
|
71
67
|
amount: 'dasdad',
|
|
72
68
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
73
69
|
integratorFee: {
|
|
74
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
75
70
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
76
71
|
value: new _limitordersdk.Bps(1n)
|
|
77
72
|
}
|
|
78
73
|
});
|
|
79
74
|
}).toThrow(/is invalid amount/);
|
|
80
75
|
});
|
|
81
|
-
it('
|
|
76
|
+
it('allows fee without source', function() {
|
|
82
77
|
expect(function() {
|
|
83
78
|
return _quoterrequest.QuoterRequest.new({
|
|
84
79
|
fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
@@ -86,11 +81,10 @@ describe(__filename, function() {
|
|
|
86
81
|
amount: '1000000',
|
|
87
82
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
88
83
|
integratorFee: {
|
|
89
|
-
share: _limitordersdk.Bps.fromPercent(50),
|
|
90
84
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
91
85
|
value: new _limitordersdk.Bps(1n)
|
|
92
86
|
}
|
|
93
87
|
});
|
|
94
|
-
}).toThrow(
|
|
88
|
+
}).not.toThrow();
|
|
95
89
|
});
|
|
96
90
|
});
|
package/dist/cjs/constants.js
CHANGED
|
@@ -15,9 +15,6 @@ _export(exports, {
|
|
|
15
15
|
ONE_INCH_LIMIT_ORDER_V4: function() {
|
|
16
16
|
return ONE_INCH_LIMIT_ORDER_V4;
|
|
17
17
|
},
|
|
18
|
-
ONE_INCH_LIMIT_ORDER_V4_ADDRESSES: function() {
|
|
19
|
-
return ONE_INCH_LIMIT_ORDER_V4_ADDRESSES;
|
|
20
|
-
},
|
|
21
18
|
UINT_160_MAX: function() {
|
|
22
19
|
return UINT_160_MAX;
|
|
23
20
|
},
|
|
@@ -43,19 +40,6 @@ _export(exports, {
|
|
|
43
40
|
return ZX;
|
|
44
41
|
}
|
|
45
42
|
});
|
|
46
|
-
function _define_property(obj, key, value) {
|
|
47
|
-
if (key in obj) {
|
|
48
|
-
Object.defineProperty(obj, key, {
|
|
49
|
-
value: value,
|
|
50
|
-
enumerable: true,
|
|
51
|
-
configurable: true,
|
|
52
|
-
writable: true
|
|
53
|
-
});
|
|
54
|
-
} else {
|
|
55
|
-
obj[key] = value;
|
|
56
|
-
}
|
|
57
|
-
return obj;
|
|
58
|
-
}
|
|
59
43
|
var ZX = '0x';
|
|
60
44
|
var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
|
|
61
45
|
NetworkEnum[NetworkEnum["ETHEREUM"] = 1] = "ETHEREUM";
|
|
@@ -73,9 +57,7 @@ var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
|
|
|
73
57
|
NetworkEnum[NetworkEnum["UNICHAIN"] = 130] = "UNICHAIN";
|
|
74
58
|
return NetworkEnum;
|
|
75
59
|
}({});
|
|
76
|
-
|
|
77
|
-
var _obj;
|
|
78
|
-
var ONE_INCH_LIMIT_ORDER_V4_ADDRESSES = (_obj = {}, _define_property(_obj, 324, '0x6fd4383cb451173d5f9304f041c7bcbf27d561ff'), _define_property(_obj, 1, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 137, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 56, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 42161, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 43114, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 10, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 250, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 100, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 8453, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 59144, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 146, '0x111111125421ca6dc452d289314280a0f8842a65'), _define_property(_obj, 130, '0x111111125421ca6dc452d289314280a0f8842a65'), _obj);
|
|
60
|
+
var ONE_INCH_LIMIT_ORDER_V4 = '0x111111125421ca6dc452d289314280a0f8842a65';
|
|
79
61
|
var UINT_160_MAX = (1n << 160n) - 1n;
|
|
80
62
|
var UINT_16_MAX = (1n << 16n) - 1n;
|
|
81
63
|
var UINT_80_MAX = (1n << 80n) - 1n;
|