@1inch/fusion-sdk 2.4.6-rc.0 → 2.4.7-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 +174 -25
- package/dist/cjs/api/quoter/quote/quote.js +6 -20
- package/dist/cjs/api/quoter/quoter.api.spec.js +6 -103
- package/dist/cjs/api/quoter/quoter.request.js +4 -1
- package/dist/cjs/api/quoter/quoter.request.spec.js +8 -2
- package/dist/cjs/constants.js +17 -3
- package/dist/cjs/fusion-order/fusion-order.js +94 -0
- package/dist/cjs/fusion-order/fusion-order.spec.js +87 -0
- package/dist/cjs/fusion-order/index.js +1 -0
- package/dist/cjs/fusion-order/permit/constants.js +98 -0
- package/dist/cjs/fusion-order/permit/index.js +34 -0
- package/dist/cjs/fusion-order/permit/permit-transfer-from.js +115 -0
- package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +232 -0
- package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +76 -0
- package/dist/cjs/fusion-order/permit/utils.js +35 -0
- package/dist/esm/api/quoter/quote/quote.js +6 -20
- package/dist/esm/api/quoter/quote/types.js +3 -15
- package/dist/esm/api/quoter/quoter.api.spec.js +6 -103
- package/dist/esm/api/quoter/quoter.request.js +4 -1
- package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
- package/dist/esm/constants.js +15 -1
- package/dist/esm/fusion-order/fusion-order.js +95 -1
- package/dist/esm/fusion-order/fusion-order.spec.js +87 -0
- package/dist/esm/fusion-order/index.js +1 -0
- package/dist/esm/fusion-order/permit/constants.js +71 -0
- package/dist/esm/fusion-order/permit/index.js +3 -0
- package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
- package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
- package/dist/esm/fusion-order/permit/transfer-from-suffix.js +53 -0
- package/dist/esm/fusion-order/permit/utils.js +12 -0
- package/dist/esm/package.json +1 -1
- package/dist/types/src/api/quoter/quote/quote.d.ts +2 -3
- package/dist/types/src/api/quoter/quote/types.d.ts +1 -6
- 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 +1 -1
- package/dist/types/src/fusion-order/fusion-order.d.ts +5 -0
- package/dist/types/src/fusion-order/index.d.ts +1 -0
- package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
- package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
- package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
- package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
- package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/sdk/types.d.ts +3 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -16,16 +16,22 @@ 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
|
-
|
|
27
|
+
import {
|
|
28
|
+
FusionSDK,
|
|
29
|
+
NetworkEnum,
|
|
30
|
+
OrderStatus,
|
|
31
|
+
PrivateKeyProviderConnector,
|
|
32
|
+
Web3Like
|
|
33
|
+
} from '@1inch/fusion-sdk'
|
|
34
|
+
import {computeAddress, formatUnits, JsonRpcProvider} from 'ethers'
|
|
29
35
|
|
|
30
36
|
const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
|
|
31
37
|
const NODE_URL = 'YOUR_WEB3_NODE_URL'
|
|
@@ -48,7 +54,7 @@ const connector = new PrivateKeyProviderConnector(
|
|
|
48
54
|
)
|
|
49
55
|
|
|
50
56
|
const sdk = new FusionSDK({
|
|
51
|
-
url: 'https://api.1inch.
|
|
57
|
+
url: 'https://api.1inch.com/fusion',
|
|
52
58
|
network: NetworkEnum.BINANCE,
|
|
53
59
|
blockchainProvider: connector,
|
|
54
60
|
authKey: DEV_PORTAL_API_TOKEN
|
|
@@ -57,7 +63,7 @@ const sdk = new FusionSDK({
|
|
|
57
63
|
async function main() {
|
|
58
64
|
const params = {
|
|
59
65
|
fromTokenAddress: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', // USDC
|
|
60
|
-
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
66
|
+
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // BNB
|
|
61
67
|
amount: '10000000000000000000', // 10 USDC
|
|
62
68
|
walletAddress: computeAddress(PRIVATE_KEY),
|
|
63
69
|
source: 'sdk-test'
|
|
@@ -66,12 +72,25 @@ async function main() {
|
|
|
66
72
|
const quote = await sdk.getQuote(params)
|
|
67
73
|
|
|
68
74
|
const dstTokenDecimals = 18
|
|
69
|
-
console.log(
|
|
70
|
-
|
|
75
|
+
console.log(
|
|
76
|
+
'Auction start amount',
|
|
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
|
+
)
|
|
71
87
|
|
|
72
88
|
const preparedOrder = await sdk.createOrder(params)
|
|
73
89
|
|
|
74
|
-
const info = await sdk.submitOrder(
|
|
90
|
+
const info = await sdk.submitOrder(
|
|
91
|
+
preparedOrder.order,
|
|
92
|
+
preparedOrder.quoteId
|
|
93
|
+
)
|
|
75
94
|
|
|
76
95
|
console.log('OrderHash', info.orderHash)
|
|
77
96
|
|
|
@@ -90,7 +109,7 @@ async function main() {
|
|
|
90
109
|
console.log('Order Expired')
|
|
91
110
|
break
|
|
92
111
|
}
|
|
93
|
-
|
|
112
|
+
|
|
94
113
|
if (data.status === OrderStatus.Cancelled) {
|
|
95
114
|
console.log('Order Cancelled')
|
|
96
115
|
break
|
|
@@ -98,7 +117,6 @@ async function main() {
|
|
|
98
117
|
} catch (e) {
|
|
99
118
|
console.log(e)
|
|
100
119
|
}
|
|
101
|
-
|
|
102
120
|
}
|
|
103
121
|
|
|
104
122
|
console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
|
|
@@ -108,9 +126,18 @@ main()
|
|
|
108
126
|
```
|
|
109
127
|
|
|
110
128
|
## How to swap with Fusion mode from Native asset
|
|
129
|
+
|
|
111
130
|
```typescript
|
|
112
|
-
import {
|
|
113
|
-
|
|
131
|
+
import {
|
|
132
|
+
FusionSDK,
|
|
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'
|
|
114
141
|
|
|
115
142
|
const PRIVATE_KEY = 'YOUR_PRIVATE_KEY'
|
|
116
143
|
const NODE_URL = 'YOUR_WEB3_NODE_URL'
|
|
@@ -133,7 +160,7 @@ const connector = new PrivateKeyProviderConnector(
|
|
|
133
160
|
)
|
|
134
161
|
|
|
135
162
|
const sdk = new FusionSDK({
|
|
136
|
-
url: 'https://api.1inch.
|
|
163
|
+
url: 'https://api.1inch.com/fusion',
|
|
137
164
|
network: NetworkEnum.BINANCE,
|
|
138
165
|
blockchainProvider: connector,
|
|
139
166
|
authKey: DEV_PORTAL_API_TOKEN
|
|
@@ -144,26 +171,43 @@ const wallet = new Wallet(PRIVATE_KEY, ethersRpcProvider)
|
|
|
144
171
|
async function main() {
|
|
145
172
|
const params = {
|
|
146
173
|
fromTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
|
|
147
|
-
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
|
174
|
+
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
148
175
|
amount: '2000000000000000', // 0.002 ETH
|
|
149
176
|
walletAddress: computeAddress(PRIVATE_KEY),
|
|
150
177
|
source: 'sdk-test'
|
|
151
178
|
}
|
|
152
|
-
|
|
179
|
+
|
|
153
180
|
const quote = await sdk.getQuote(params)
|
|
154
181
|
|
|
155
182
|
const dstTokenDecimals = 6
|
|
156
|
-
console.log(
|
|
157
|
-
|
|
183
|
+
console.log(
|
|
184
|
+
'Auction start amount',
|
|
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
|
+
)
|
|
158
195
|
|
|
159
196
|
const preparedOrder = await sdk.createOrder(params)
|
|
160
197
|
|
|
161
|
-
const info = await sdk.submitNativeOrder(
|
|
198
|
+
const info = await sdk.submitNativeOrder(
|
|
199
|
+
preparedOrder.order,
|
|
200
|
+
new Address(params.walletAddress),
|
|
201
|
+
preparedOrder.quoteId
|
|
202
|
+
)
|
|
162
203
|
|
|
163
204
|
console.log('OrderHash', info.orderHash)
|
|
164
205
|
|
|
165
206
|
const factory = NativeOrdersFactory.default(NetworkEnum.BINANCE)
|
|
166
|
-
const call = factory.create(
|
|
207
|
+
const call = factory.create(
|
|
208
|
+
new Address(wallet.address),
|
|
209
|
+
preparedOrder.order.build()
|
|
210
|
+
)
|
|
167
211
|
|
|
168
212
|
const txRes = await wallet.sendTransaction({
|
|
169
213
|
to: call.to.toString(),
|
|
@@ -175,7 +219,6 @@ async function main() {
|
|
|
175
219
|
|
|
176
220
|
await wallet.provider.waitForTransaction(txRes.hash)
|
|
177
221
|
|
|
178
|
-
|
|
179
222
|
const start = Date.now()
|
|
180
223
|
|
|
181
224
|
while (true) {
|
|
@@ -191,7 +234,7 @@ async function main() {
|
|
|
191
234
|
console.log('Order Expired')
|
|
192
235
|
break
|
|
193
236
|
}
|
|
194
|
-
|
|
237
|
+
|
|
195
238
|
if (data.status === OrderStatus.Cancelled) {
|
|
196
239
|
console.log('Order Cancelled')
|
|
197
240
|
break
|
|
@@ -199,7 +242,6 @@ async function main() {
|
|
|
199
242
|
} catch (e) {
|
|
200
243
|
console.log(e)
|
|
201
244
|
}
|
|
202
|
-
|
|
203
245
|
}
|
|
204
246
|
|
|
205
247
|
console.log('Order executed for', (Date.now() - start) / 1000, 'sec')
|
|
@@ -208,6 +250,113 @@ async function main() {
|
|
|
208
250
|
main()
|
|
209
251
|
```
|
|
210
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
|
+
|
|
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
|
+
}
|
|
312
|
+
|
|
313
|
+
const {order, quoteId} = await sdk.createOrder(params)
|
|
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
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
main()
|
|
352
|
+
```
|
|
353
|
+
|
|
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
|
+
|
|
211
360
|
## Resolvers
|
|
212
361
|
|
|
213
362
|
`settleOrders` function usage and Resolver contract examples you can find [here](https://github.com/1inch/fusion-resolver-example)
|
|
@@ -102,7 +102,11 @@ 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 =
|
|
105
|
+
this.integratorFeeParams = response.integratorFee && response.integratorFeeReceiver ? {
|
|
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;
|
|
106
110
|
}
|
|
107
111
|
_create_class(Quote, [
|
|
108
112
|
{
|
|
@@ -149,7 +153,7 @@ var Quote = /*#__PURE__*/ function() {
|
|
|
149
153
|
orderExpirationDelay: paramsData === null || paramsData === void 0 ? void 0 : paramsData.orderExpirationDelay,
|
|
150
154
|
source: this.params.source,
|
|
151
155
|
enablePermit2: params.isPermit2,
|
|
152
|
-
fees: buildFees(this.resolverFeePreset, this.integratorFeeParams, this.surplusFee)
|
|
156
|
+
fees: buildFees(this.resolverFeePreset, this.params.integratorFee || this.integratorFeeParams, this.surplusFee)
|
|
153
157
|
};
|
|
154
158
|
return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
|
|
155
159
|
}
|
|
@@ -190,24 +194,6 @@ var Quote = /*#__PURE__*/ function() {
|
|
|
190
194
|
}
|
|
191
195
|
return _index.FusionOrder.new(settlementExtension, orderInfo, details, extra);
|
|
192
196
|
}
|
|
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
|
-
}
|
|
211
197
|
}
|
|
212
198
|
]);
|
|
213
199
|
return Quote;
|
|
@@ -8,7 +8,6 @@ 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");
|
|
12
11
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
13
12
|
try {
|
|
14
13
|
var info = gen[key](arg);
|
|
@@ -38,58 +37,6 @@ function _async_to_generator(fn) {
|
|
|
38
37
|
});
|
|
39
38
|
};
|
|
40
39
|
}
|
|
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
|
-
}
|
|
93
40
|
function _ts_generator(thisArg, body) {
|
|
94
41
|
var f, y, t, g, _ = {
|
|
95
42
|
label: 0,
|
|
@@ -296,7 +243,7 @@ describe('Quoter API', function() {
|
|
|
296
243
|
],
|
|
297
244
|
fee: {
|
|
298
245
|
whitelistDiscountPercent: 1,
|
|
299
|
-
receiver:
|
|
246
|
+
receiver: '0x02f92800F57BCD74066F5709F1Daa1A4302Df875',
|
|
300
247
|
bps: 10
|
|
301
248
|
},
|
|
302
249
|
marketAmount: '626772029219852913'
|
|
@@ -318,7 +265,7 @@ describe('Quoter API', function() {
|
|
|
318
265
|
case 1:
|
|
319
266
|
res = _state.sent();
|
|
320
267
|
expect(res).toStrictEqual(QuoterResponseMock);
|
|
321
|
-
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&surplus=true');
|
|
268
|
+
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&source=sdk&surplus=true');
|
|
322
269
|
return [
|
|
323
270
|
2
|
|
324
271
|
];
|
|
@@ -340,6 +287,7 @@ describe('Quoter API', function() {
|
|
|
340
287
|
amount: '1000000000000000000000',
|
|
341
288
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
342
289
|
integratorFee: {
|
|
290
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
343
291
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
344
292
|
value: new _limitordersdk.Bps(1n)
|
|
345
293
|
},
|
|
@@ -375,6 +323,7 @@ describe('Quoter API', function() {
|
|
|
375
323
|
amount: '1000000000000000000000',
|
|
376
324
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
377
325
|
integratorFee: {
|
|
326
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
378
327
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
379
328
|
value: new _limitordersdk.Bps(1n)
|
|
380
329
|
},
|
|
@@ -411,6 +360,7 @@ describe('Quoter API', function() {
|
|
|
411
360
|
amount: '1000000000000000000000',
|
|
412
361
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
413
362
|
integratorFee: {
|
|
363
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
414
364
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
415
365
|
value: new _limitordersdk.Bps(1n)
|
|
416
366
|
},
|
|
@@ -463,6 +413,7 @@ describe('Quoter API', function() {
|
|
|
463
413
|
amount: '1000000000000000000000',
|
|
464
414
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
465
415
|
integratorFee: {
|
|
416
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
466
417
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
467
418
|
value: new _limitordersdk.Bps(1n)
|
|
468
419
|
},
|
|
@@ -501,52 +452,4 @@ describe('Quoter API', function() {
|
|
|
501
452
|
}
|
|
502
453
|
});
|
|
503
454
|
}));
|
|
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
|
-
});
|
|
552
455
|
});
|
|
@@ -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 || 'sdk';
|
|
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,6 +76,9 @@ 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
|
+
}
|
|
79
82
|
}
|
|
80
83
|
_create_class(QuoterRequest, [
|
|
81
84
|
{
|
|
@@ -13,6 +13,7 @@ describe(__filename, function() {
|
|
|
13
13
|
amount: '1000000000000000000000',
|
|
14
14
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
15
15
|
integratorFee: {
|
|
16
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
16
17
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
17
18
|
value: new _limitordersdk.Bps(1n)
|
|
18
19
|
}
|
|
@@ -25,6 +26,7 @@ describe(__filename, function() {
|
|
|
25
26
|
amount: '1000000000000000000000',
|
|
26
27
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
27
28
|
integratorFee: {
|
|
29
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
28
30
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
29
31
|
value: new _limitordersdk.Bps(1n)
|
|
30
32
|
}
|
|
@@ -39,6 +41,7 @@ describe(__filename, function() {
|
|
|
39
41
|
amount: '1000000000000000000000',
|
|
40
42
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
41
43
|
integratorFee: {
|
|
44
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
42
45
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
43
46
|
value: new _limitordersdk.Bps(1n)
|
|
44
47
|
}
|
|
@@ -53,6 +56,7 @@ describe(__filename, function() {
|
|
|
53
56
|
amount: '1000000000000000000000',
|
|
54
57
|
walletAddress: '0x0000000019ab540356cbb839be05303d7705fa1',
|
|
55
58
|
integratorFee: {
|
|
59
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
56
60
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
57
61
|
value: new _limitordersdk.Bps(1n)
|
|
58
62
|
}
|
|
@@ -67,13 +71,14 @@ describe(__filename, function() {
|
|
|
67
71
|
amount: 'dasdad',
|
|
68
72
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
69
73
|
integratorFee: {
|
|
74
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
70
75
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
71
76
|
value: new _limitordersdk.Bps(1n)
|
|
72
77
|
}
|
|
73
78
|
});
|
|
74
79
|
}).toThrow(/is invalid amount/);
|
|
75
80
|
});
|
|
76
|
-
it('
|
|
81
|
+
it('returns error if fee is provided and source not', function() {
|
|
77
82
|
expect(function() {
|
|
78
83
|
return _quoterrequest.QuoterRequest.new({
|
|
79
84
|
fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
@@ -81,10 +86,11 @@ describe(__filename, function() {
|
|
|
81
86
|
amount: '1000000',
|
|
82
87
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
83
88
|
integratorFee: {
|
|
89
|
+
share: _limitordersdk.Bps.fromPercent(50),
|
|
84
90
|
receiver: _limitordersdk.Address.fromBigInt(10n),
|
|
85
91
|
value: new _limitordersdk.Bps(1n)
|
|
86
92
|
}
|
|
87
93
|
});
|
|
88
|
-
}).
|
|
94
|
+
}).toThrow(/cannot use fee without source/);
|
|
89
95
|
});
|
|
90
96
|
});
|
package/dist/cjs/constants.js
CHANGED
|
@@ -12,8 +12,8 @@ _export(exports, {
|
|
|
12
12
|
NetworkEnum: function() {
|
|
13
13
|
return NetworkEnum;
|
|
14
14
|
},
|
|
15
|
-
|
|
16
|
-
return
|
|
15
|
+
ONE_INCH_LIMIT_ORDER_V4_ADDRESSES: function() {
|
|
16
|
+
return ONE_INCH_LIMIT_ORDER_V4_ADDRESSES;
|
|
17
17
|
},
|
|
18
18
|
UINT_160_MAX: function() {
|
|
19
19
|
return UINT_160_MAX;
|
|
@@ -40,6 +40,19 @@ _export(exports, {
|
|
|
40
40
|
return ZX;
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
|
+
function _define_property(obj, key, value) {
|
|
44
|
+
if (key in obj) {
|
|
45
|
+
Object.defineProperty(obj, key, {
|
|
46
|
+
value: value,
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true
|
|
50
|
+
});
|
|
51
|
+
} else {
|
|
52
|
+
obj[key] = value;
|
|
53
|
+
}
|
|
54
|
+
return obj;
|
|
55
|
+
}
|
|
43
56
|
var ZX = '0x';
|
|
44
57
|
var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
|
|
45
58
|
NetworkEnum[NetworkEnum["ETHEREUM"] = 1] = "ETHEREUM";
|
|
@@ -57,7 +70,8 @@ var NetworkEnum = /*#__PURE__*/ function(NetworkEnum) {
|
|
|
57
70
|
NetworkEnum[NetworkEnum["UNICHAIN"] = 130] = "UNICHAIN";
|
|
58
71
|
return NetworkEnum;
|
|
59
72
|
}({});
|
|
60
|
-
var
|
|
73
|
+
var _obj;
|
|
74
|
+
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);
|
|
61
75
|
var UINT_160_MAX = (1n << 160n) - 1n;
|
|
62
76
|
var UINT_16_MAX = (1n << 16n) - 1n;
|
|
63
77
|
var UINT_80_MAX = (1n << 80n) - 1n;
|