@1inch/fusion-sdk 2.4.6 → 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.
Files changed (34) hide show
  1. package/README.md +174 -25
  2. package/dist/cjs/api/quoter/quoter.api.spec.js +1 -2
  3. package/dist/cjs/constants.js +17 -3
  4. package/dist/cjs/fusion-order/fusion-order.js +94 -0
  5. package/dist/cjs/fusion-order/fusion-order.spec.js +87 -0
  6. package/dist/cjs/fusion-order/index.js +1 -0
  7. package/dist/cjs/fusion-order/permit/constants.js +98 -0
  8. package/dist/cjs/fusion-order/permit/index.js +34 -0
  9. package/dist/cjs/fusion-order/permit/permit-transfer-from.js +115 -0
  10. package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +232 -0
  11. package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +76 -0
  12. package/dist/cjs/fusion-order/permit/utils.js +35 -0
  13. package/dist/esm/api/quoter/quoter.api.spec.js +1 -2
  14. package/dist/esm/constants.js +15 -1
  15. package/dist/esm/fusion-order/fusion-order.js +95 -1
  16. package/dist/esm/fusion-order/fusion-order.spec.js +87 -0
  17. package/dist/esm/fusion-order/index.js +1 -0
  18. package/dist/esm/fusion-order/permit/constants.js +71 -0
  19. package/dist/esm/fusion-order/permit/index.js +3 -0
  20. package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
  21. package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
  22. package/dist/esm/fusion-order/permit/transfer-from-suffix.js +53 -0
  23. package/dist/esm/fusion-order/permit/utils.js +12 -0
  24. package/dist/esm/package.json +1 -1
  25. package/dist/types/src/constants.d.ts +1 -1
  26. package/dist/types/src/fusion-order/fusion-order.d.ts +5 -0
  27. package/dist/types/src/fusion-order/index.d.ts +1 -0
  28. package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
  29. package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
  30. package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
  31. package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
  32. package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
  33. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ import { Address } from '@1inch/limit-order-sdk';
2
+ import { AbiCoder } from 'ethers';
3
+ import { trim0x } from '@1inch/byte-utils';
4
+ import assert from 'assert';
5
+ var FUNC_N_ZH_TCH_ABI = [
6
+ 'address',
7
+ 'address',
8
+ 'uint256',
9
+ 'tuple(tuple(address token, uint256 amount) permitted, uint256 nonce, uint256 deadline)',
10
+ 'bytes'
11
+ ];
12
+ var ZERO_SLOT = '0'.repeat(64);
13
+ var STRIPPED_SLOTS = 3;
14
+ /**
15
+ * ABI-encodes the Permit2 suffix appended to `transferFrom(from,to,amount)` calldata.
16
+ *
17
+ * The limit order protocol calls `_callTransferFromWithSuffix` on the Permit2Proxy,
18
+ * which has `func_nZHTch(address,address,uint256,((address,uint256),uint256,uint256),bytes)`
19
+ * with selector 0x23b872dd (same as transferFrom). The suffix is everything after (from,to,amount).
20
+ */ export function encodeTransferFromSuffix(token, amount, nonce, deadline, signature) {
21
+ var abiCoder = AbiCoder.defaultAbiCoder();
22
+ var encoded = abiCoder.encode(FUNC_N_ZH_TCH_ABI, [
23
+ Address.ZERO_ADDRESS.toString(),
24
+ Address.ZERO_ADDRESS.toString(),
25
+ 0n,
26
+ {
27
+ permitted: {
28
+ token: token.toString(),
29
+ amount: amount
30
+ },
31
+ nonce: nonce,
32
+ deadline: deadline
33
+ },
34
+ signature
35
+ ]);
36
+ var strippedHexChars = STRIPPED_SLOTS * 32 * 2;
37
+ return '0x' + trim0x(encoded).slice(strippedHexChars);
38
+ }
39
+ export function decodeTransferFromSuffix(suffix) {
40
+ var restored = '0x' + ZERO_SLOT.repeat(STRIPPED_SLOTS) + suffix.slice(2);
41
+ var abiCoder = AbiCoder.defaultAbiCoder();
42
+ var decoded = abiCoder.decode(FUNC_N_ZH_TCH_ABI, restored);
43
+ var permit = decoded[3];
44
+ var sig = decoded[4];
45
+ assert(sig.length > 0, 'empty permit signature');
46
+ return {
47
+ token: new Address(permit.permitted.token),
48
+ amount: BigInt(permit.permitted.amount),
49
+ nonce: BigInt(permit.nonce),
50
+ deadline: BigInt(permit.deadline),
51
+ signature: sig
52
+ };
53
+ }
@@ -0,0 +1,12 @@
1
+ import { Address } from '@1inch/limit-order-sdk';
2
+ import assert from 'assert';
3
+ import { PERMIT2_ADDRESSES, PERMIT2_PROXY_ADDRESSES } from './constants.js';
4
+ import { NetworkEnum } from '../../constants.js';
5
+ export function getPermit2Address(chainId) {
6
+ assert(NetworkEnum[chainId], 'unsupported chainId');
7
+ return PERMIT2_ADDRESSES[chainId];
8
+ }
9
+ export function getPermit2ProxyAddress(chainId) {
10
+ assert(NetworkEnum[chainId], 'unsupported chainId');
11
+ return new Address(PERMIT2_PROXY_ADDRESSES[chainId]);
12
+ }
@@ -1 +1 @@
1
- {"name":"@1inch/fusion-sdk","version":"2.4.6","type":"module"}
1
+ {"name":"@1inch/fusion-sdk","version":"2.4.7-rc.0","type":"module"}
@@ -14,7 +14,7 @@ export declare enum NetworkEnum {
14
14
  SONIC = 146,
15
15
  UNICHAIN = 130
16
16
  }
17
- export declare const ONE_INCH_LIMIT_ORDER_V4 = "0x111111125421ca6dc452d289314280a0f8842a65";
17
+ export declare const ONE_INCH_LIMIT_ORDER_V4_ADDRESSES: Record<NetworkEnum, string>;
18
18
  export declare const UINT_160_MAX: bigint;
19
19
  export declare const UINT_16_MAX: bigint;
20
20
  export declare const UINT_80_MAX: bigint;
@@ -4,6 +4,7 @@ import { AuctionDetails } from './auction-details/index.js';
4
4
  import { Whitelist } from './whitelist/whitelist.js';
5
5
  import { SurplusParams } from './surplus-params.js';
6
6
  import type { Details, Extra } from './types.js';
7
+ import { PermitTransferFrom } from './permit/permit-transfer-from.js';
7
8
  import { AuctionCalculator } from '../amount-calculator/auction-calculator/index.js';
8
9
  import { NetworkEnum } from '../constants.js';
9
10
  import { AmountCalculator } from '../amount-calculator/amount-calculator.js';
@@ -33,6 +34,8 @@ export declare class FusionOrder {
33
34
  static isNativeOrder(chainId: number, ethOrderFactory: ProxyFactory, order: LimitOrderV4Struct, signature: string): boolean;
34
35
  static fromNative(chainId: NetworkEnum, ethOrdersFactory: ProxyFactory, settlementExtension: Address, orderInfo: Omit<OrderInfoData, 'makerAsset'>, details: Details, extra?: Extra): FusionOrder;
35
36
  static fromDataAndExtension(order: LimitOrderV4Struct, extension: Extension): FusionOrder;
37
+ isTransferPermit(): boolean;
38
+ withTransferPermit(permit: PermitTransferFrom, signature: string): this;
36
39
  build(): LimitOrderV4Struct;
37
40
  getOrderHash(chainId: number): string;
38
41
  getTypedData(chainId: number): EIP712TypedData;
@@ -51,4 +54,6 @@ export declare class FusionOrder {
51
54
  getAmountCalculator(): AmountCalculator;
52
55
  isNative(chainId: number, ethOrderFactory: ProxyFactory, signature: string): boolean;
53
56
  nativeSignature(maker: Address): string;
57
+ createTransferPermit(chainIdOrPermit2Proxy: number | Address, permit2Proxy?: Address): PermitTransferFrom;
58
+ private decodeTransferPermitSuffix;
54
59
  }
@@ -6,3 +6,4 @@ export * from './fees/index.js';
6
6
  export { CHAIN_TO_WRAPPER } from './constants.js';
7
7
  export * from './surplus-params.js';
8
8
  export * from './cancellation-auction.js';
9
+ export * from './permit/index.js';
@@ -0,0 +1,7 @@
1
+ import { EIP712Types } from '@1inch/limit-order-sdk';
2
+ import { NetworkEnum } from '../../constants.js';
3
+ export declare const PERMIT2_ADDRESSES: Record<NetworkEnum, string>;
4
+ export declare const PERMIT2_PROXY_ADDRESSES: Record<NetworkEnum, string>;
5
+ export declare const PERMIT2_DOMAIN_NAME = "Permit2";
6
+ export declare const TOKEN_PERMISSIONS: EIP712Types;
7
+ export declare const PERMIT_TRANSFER_FROM_TYPES: EIP712Types;
@@ -0,0 +1,3 @@
1
+ export * from './permit-transfer-from.js';
2
+ export * from './transfer-from-suffix.js';
3
+ export { getPermit2Address, getPermit2ProxyAddress } from './utils.js';
@@ -0,0 +1,11 @@
1
+ import { Address, EIP712TypedData } from '@1inch/limit-order-sdk';
2
+ export declare class PermitTransferFrom {
3
+ readonly token: Address;
4
+ readonly maxSpendAmount: bigint;
5
+ readonly spender: Address;
6
+ readonly nonce: bigint;
7
+ readonly deadline: bigint;
8
+ constructor(token: Address, maxSpendAmount: bigint, spender: Address, nonce: bigint, deadline: bigint);
9
+ getTypedData(chainId: number, permit2Address?: string): EIP712TypedData;
10
+ getTransferFromSuffix(signature: string): string;
11
+ }
@@ -0,0 +1,10 @@
1
+ import { Address } from '@1inch/limit-order-sdk';
2
+ export type DecodedTransferPermitSuffix = {
3
+ token: Address;
4
+ amount: bigint;
5
+ nonce: bigint;
6
+ deadline: bigint;
7
+ signature: string;
8
+ };
9
+ export declare function encodeTransferFromSuffix(token: Address, amount: bigint, nonce: bigint, deadline: bigint, signature: string): string;
10
+ export declare function decodeTransferFromSuffix(suffix: string): DecodedTransferPermitSuffix;
@@ -0,0 +1,3 @@
1
+ import { Address } from '@1inch/limit-order-sdk';
2
+ export declare function getPermit2Address(chainId: number): string;
3
+ export declare function getPermit2ProxyAddress(chainId: number): Address;