@ring-protocol/permit2-sdk 0.1.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 (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/cjs/abis/Permit2.json +830 -0
  4. package/dist/cjs/src/allowanceTransfer.d.ts +36 -0
  5. package/dist/cjs/src/allowanceTransfer.js +72 -0
  6. package/dist/cjs/src/allowanceTransfer.js.map +1 -0
  7. package/dist/cjs/src/allowanceTransfer.test.d.ts +1 -0
  8. package/dist/cjs/src/allowanceTransfer.test.js +95 -0
  9. package/dist/cjs/src/allowanceTransfer.test.js.map +1 -0
  10. package/dist/cjs/src/constants.d.ts +13 -0
  11. package/dist/cjs/src/constants.js +29 -0
  12. package/dist/cjs/src/constants.js.map +1 -0
  13. package/dist/cjs/src/constants.test.d.ts +1 -0
  14. package/dist/cjs/src/constants.test.js +19 -0
  15. package/dist/cjs/src/constants.test.js.map +1 -0
  16. package/dist/cjs/src/domain.d.ts +7 -0
  17. package/dist/cjs/src/domain.js +13 -0
  18. package/dist/cjs/src/domain.js.map +1 -0
  19. package/dist/cjs/src/index.d.ts +4 -0
  20. package/dist/cjs/src/index.js +8 -0
  21. package/dist/cjs/src/index.js.map +1 -0
  22. package/dist/cjs/src/providers/AllowanceProvider.d.ts +17 -0
  23. package/dist/cjs/src/providers/AllowanceProvider.js +35 -0
  24. package/dist/cjs/src/providers/AllowanceProvider.js.map +1 -0
  25. package/dist/cjs/src/providers/SignatureProvider.d.ts +74 -0
  26. package/dist/cjs/src/providers/SignatureProvider.js +146 -0
  27. package/dist/cjs/src/providers/SignatureProvider.js.map +1 -0
  28. package/dist/cjs/src/providers/SignatureProvider.test.d.ts +1 -0
  29. package/dist/cjs/src/providers/SignatureProvider.test.js +247 -0
  30. package/dist/cjs/src/providers/SignatureProvider.test.js.map +1 -0
  31. package/dist/cjs/src/providers/index.d.ts +2 -0
  32. package/dist/cjs/src/providers/index.js +6 -0
  33. package/dist/cjs/src/providers/index.js.map +1 -0
  34. package/dist/cjs/src/signatureTransfer.d.ts +41 -0
  35. package/dist/cjs/src/signatureTransfer.js +93 -0
  36. package/dist/cjs/src/signatureTransfer.js.map +1 -0
  37. package/dist/cjs/src/signatureTransfer.test.d.ts +1 -0
  38. package/dist/cjs/src/signatureTransfer.test.js +109 -0
  39. package/dist/cjs/src/signatureTransfer.test.js.map +1 -0
  40. package/dist/esm/abis/Permit2.json +830 -0
  41. package/dist/esm/src/allowanceTransfer.d.ts +36 -0
  42. package/dist/esm/src/allowanceTransfer.js +67 -0
  43. package/dist/esm/src/allowanceTransfer.js.map +1 -0
  44. package/dist/esm/src/allowanceTransfer.test.d.ts +1 -0
  45. package/dist/esm/src/allowanceTransfer.test.js +93 -0
  46. package/dist/esm/src/allowanceTransfer.test.js.map +1 -0
  47. package/dist/esm/src/constants.d.ts +13 -0
  48. package/dist/esm/src/constants.js +25 -0
  49. package/dist/esm/src/constants.js.map +1 -0
  50. package/dist/esm/src/constants.test.d.ts +1 -0
  51. package/dist/esm/src/constants.test.js +17 -0
  52. package/dist/esm/src/constants.test.js.map +1 -0
  53. package/dist/esm/src/domain.d.ts +7 -0
  54. package/dist/esm/src/domain.js +9 -0
  55. package/dist/esm/src/domain.js.map +1 -0
  56. package/dist/esm/src/index.d.ts +4 -0
  57. package/dist/esm/src/index.js +5 -0
  58. package/dist/esm/src/index.js.map +1 -0
  59. package/dist/esm/src/providers/AllowanceProvider.d.ts +17 -0
  60. package/dist/esm/src/providers/AllowanceProvider.js +31 -0
  61. package/dist/esm/src/providers/AllowanceProvider.js.map +1 -0
  62. package/dist/esm/src/providers/SignatureProvider.d.ts +74 -0
  63. package/dist/esm/src/providers/SignatureProvider.js +142 -0
  64. package/dist/esm/src/providers/SignatureProvider.js.map +1 -0
  65. package/dist/esm/src/providers/SignatureProvider.test.d.ts +1 -0
  66. package/dist/esm/src/providers/SignatureProvider.test.js +245 -0
  67. package/dist/esm/src/providers/SignatureProvider.test.js.map +1 -0
  68. package/dist/esm/src/providers/index.d.ts +2 -0
  69. package/dist/esm/src/providers/index.js +3 -0
  70. package/dist/esm/src/providers/index.js.map +1 -0
  71. package/dist/esm/src/signatureTransfer.d.ts +41 -0
  72. package/dist/esm/src/signatureTransfer.js +88 -0
  73. package/dist/esm/src/signatureTransfer.js.map +1 -0
  74. package/dist/esm/src/signatureTransfer.test.d.ts +1 -0
  75. package/dist/esm/src/signatureTransfer.test.js +107 -0
  76. package/dist/esm/src/signatureTransfer.test.js.map +1 -0
  77. package/dist/types/src/allowanceTransfer.d.ts +36 -0
  78. package/dist/types/src/allowanceTransfer.test.d.ts +1 -0
  79. package/dist/types/src/constants.d.ts +13 -0
  80. package/dist/types/src/constants.test.d.ts +1 -0
  81. package/dist/types/src/domain.d.ts +7 -0
  82. package/dist/types/src/index.d.ts +4 -0
  83. package/dist/types/src/providers/AllowanceProvider.d.ts +17 -0
  84. package/dist/types/src/providers/SignatureProvider.d.ts +74 -0
  85. package/dist/types/src/providers/SignatureProvider.test.d.ts +1 -0
  86. package/dist/types/src/providers/index.d.ts +2 -0
  87. package/dist/types/src/signatureTransfer.d.ts +41 -0
  88. package/dist/types/src/signatureTransfer.test.d.ts +1 -0
  89. package/package.json +92 -0
@@ -0,0 +1,245 @@
1
+ import { __awaiter } from "tslib";
2
+ import { SignatureProvider } from './SignatureProvider';
3
+ import { BigNumber } from '@ethersproject/bignumber';
4
+ import { ethers } from 'ethers';
5
+ describe('SignatureProvider', () => {
6
+ let provider;
7
+ let permit2Address;
8
+ let owner;
9
+ let spender;
10
+ let token;
11
+ let signatureProvider;
12
+ beforeEach(() => {
13
+ // Setup test environment
14
+ const forkUrl = process.env.FORK_URL || 'http://localhost:8545';
15
+ provider = new ethers.providers.JsonRpcProvider(forkUrl);
16
+ permit2Address = '0x000000000022D473030F116dDEE9F6B43aC78BA3'; // Mainnet Permit2 address
17
+ owner = '0x1234567890123456789012345678901234567890';
18
+ spender = '0x0987654321098765432109876543210987654321';
19
+ token = '0xA0b86a33E6441b8C4C8C8C8C8C8C8C8C8C8C8C8C';
20
+ signatureProvider = new SignatureProvider(provider, permit2Address);
21
+ });
22
+ describe('isNonceUsed', () => {
23
+ it('should check if a nonce has been used', () => __awaiter(void 0, void 0, void 0, function* () {
24
+ const nonce = BigNumber.from(123);
25
+ const isUsed = yield signatureProvider.isNonceUsed(owner, nonce);
26
+ expect(typeof isUsed).toBe('boolean');
27
+ }));
28
+ it('should handle different nonce values', () => __awaiter(void 0, void 0, void 0, function* () {
29
+ const nonces = [0, 255, 256, 1000, 10000];
30
+ for (const nonce of nonces) {
31
+ const isUsed = yield signatureProvider.isNonceUsed(owner, nonce);
32
+ expect(typeof isUsed).toBe('boolean');
33
+ }
34
+ }));
35
+ it('should check specific used nonce for known swapper', () => __awaiter(void 0, void 0, void 0, function* () {
36
+ const usedNonce = BigNumber.from('1993349591429988950323706171037443285812821323100932422320925456272859199745');
37
+ const swapper = '0xa7152Fad7467857dC2D4060FEcaAdf9f6B8227d3';
38
+ const isUsed = yield signatureProvider.isNonceUsed(swapper, usedNonce);
39
+ expect(isUsed).toBe(true); // Nonce should be used
40
+ }));
41
+ it('should check specific unused nonce for known swapper', () => __awaiter(void 0, void 0, void 0, function* () {
42
+ const unusedNonce = BigNumber.from('1234567890');
43
+ const swapper = '0x54539967a06Fc0E3C3ED0ee320Eb67362D13C5fF';
44
+ const isUsed = yield signatureProvider.isNonceUsed(swapper, unusedNonce);
45
+ expect(isUsed).toBe(false); // Nonce should be unused
46
+ }));
47
+ });
48
+ describe('isExpired', () => {
49
+ it('should check if a deadline has expired', () => __awaiter(void 0, void 0, void 0, function* () {
50
+ const futureDeadline = BigNumber.from(Math.floor(Date.now() / 1000) + 3600); // 1 hour from now
51
+ const pastDeadline = BigNumber.from(Math.floor(Date.now() / 1000) - 3600); // 1 hour ago
52
+ const futureExpired = yield signatureProvider.isExpired(futureDeadline);
53
+ const pastExpired = yield signatureProvider.isExpired(pastDeadline);
54
+ expect(typeof futureExpired).toBe('boolean');
55
+ expect(typeof pastExpired).toBe('boolean');
56
+ expect(futureExpired).toBe(false);
57
+ expect(pastExpired).toBe(true);
58
+ }));
59
+ });
60
+ describe('isPermitValid', () => {
61
+ it('should validate a single permit', () => __awaiter(void 0, void 0, void 0, function* () {
62
+ const permit = {
63
+ permitted: {
64
+ token,
65
+ amount: BigNumber.from(1000000),
66
+ },
67
+ spender,
68
+ nonce: BigNumber.from(123),
69
+ deadline: BigNumber.from(Math.floor(Date.now() / 1000) + 3600), // 1 hour from now
70
+ };
71
+ const isValid = yield signatureProvider.isPermitValid(permit);
72
+ expect(typeof isValid).toBe('boolean');
73
+ }));
74
+ it('should validate a batch permit', () => __awaiter(void 0, void 0, void 0, function* () {
75
+ const permit = {
76
+ permitted: [
77
+ {
78
+ token,
79
+ amount: BigNumber.from(1000000),
80
+ },
81
+ {
82
+ token: '0xB0b86a33E6441b8C4C8C8C8C8C8C8C8C8C8C8C8C',
83
+ amount: BigNumber.from(2000000),
84
+ },
85
+ ],
86
+ spender,
87
+ nonce: BigNumber.from(456),
88
+ deadline: BigNumber.from(Math.floor(Date.now() / 1000) + 3600), // 1 hour from now
89
+ };
90
+ const isValid = yield signatureProvider.isPermitValid(permit);
91
+ expect(typeof isValid).toBe('boolean');
92
+ }));
93
+ it('should return false for expired permits', () => __awaiter(void 0, void 0, void 0, function* () {
94
+ const permit = {
95
+ permitted: {
96
+ token,
97
+ amount: BigNumber.from(1000000),
98
+ },
99
+ spender,
100
+ nonce: BigNumber.from(123),
101
+ deadline: BigNumber.from(Math.floor(Date.now() / 1000) - 3600), // 1 hour ago
102
+ };
103
+ const isValid = yield signatureProvider.isPermitValid(permit);
104
+ expect(isValid).toBe(false);
105
+ }));
106
+ });
107
+ describe('validatePermit', () => {
108
+ it('should return detailed validation results', () => __awaiter(void 0, void 0, void 0, function* () {
109
+ const permit = {
110
+ permitted: {
111
+ token,
112
+ amount: BigNumber.from(1000000),
113
+ },
114
+ spender,
115
+ nonce: BigNumber.from(123),
116
+ deadline: BigNumber.from(Math.floor(Date.now() / 1000) + 3600), // 1 hour from now
117
+ };
118
+ const result = yield signatureProvider.validatePermit(permit);
119
+ expect(result).toHaveProperty('isUsed');
120
+ expect(result).toHaveProperty('isExpired');
121
+ expect(result).toHaveProperty('isValid');
122
+ expect(typeof result.isUsed).toBe('boolean');
123
+ expect(typeof result.isExpired).toBe('boolean');
124
+ expect(typeof result.isValid).toBe('boolean');
125
+ }));
126
+ });
127
+ describe('getNonceBitmap', () => {
128
+ it('should get the nonce bitmap for an owner', () => __awaiter(void 0, void 0, void 0, function* () {
129
+ const wordPos = BigNumber.from(0);
130
+ const bitmap = yield signatureProvider.getNonceBitmap(owner, wordPos);
131
+ expect(bitmap).toBeInstanceOf(BigNumber);
132
+ }));
133
+ });
134
+ describe('isBitSet', () => {
135
+ it('should check if a specific bit is set in a bitmap', () => {
136
+ const bitmap = BigNumber.from('0x0000000000000000000000000000000000000000000000000000000000000001');
137
+ const bit0Set = SignatureProvider.isBitSet(bitmap, 0);
138
+ const bit1Set = SignatureProvider.isBitSet(bitmap, 1);
139
+ expect(bit0Set).toBe(true);
140
+ expect(bit1Set).toBe(false);
141
+ });
142
+ it('should handle different bit positions', () => {
143
+ const bitmap = BigNumber.from('0x00000000000000000000000000000000000000000000000000000000000000FF');
144
+ for (let i = 0; i < 8; i++) {
145
+ const isSet = SignatureProvider.isBitSet(bitmap, i);
146
+ expect(isSet).toBe(true);
147
+ }
148
+ for (let i = 8; i < 16; i++) {
149
+ const isSet = SignatureProvider.isBitSet(bitmap, i);
150
+ expect(isSet).toBe(false);
151
+ }
152
+ });
153
+ it('should throw error for invalid bit positions', () => {
154
+ const bitmap = BigNumber.from(0);
155
+ expect(() => SignatureProvider.isBitSet(bitmap, -1)).toThrow('BIT_POSITION_OUT_OF_RANGE');
156
+ expect(() => SignatureProvider.isBitSet(bitmap, 256)).toThrow('BIT_POSITION_OUT_OF_RANGE');
157
+ });
158
+ });
159
+ describe('getNoncePositions', () => {
160
+ it('should calculate correct word and bit positions', () => {
161
+ const nonce = BigNumber.from(123);
162
+ const positions = SignatureProvider.getNoncePositions(nonce);
163
+ expect(positions.wordPos.eq(BigNumber.from(0))).toBe(true); // 123 >> 8 = 0
164
+ expect(positions.bitPos).toBe(123); // 123 & 255 = 123
165
+ });
166
+ it('should handle nonces that span multiple words', () => {
167
+ const nonce = BigNumber.from(300);
168
+ const positions = SignatureProvider.getNoncePositions(nonce);
169
+ expect(positions.wordPos.eq(BigNumber.from(1))).toBe(true); // 300 >> 8 = 1
170
+ expect(positions.bitPos).toBe(44); // 300 & 255 = 44
171
+ });
172
+ });
173
+ describe('batchCheckNonces', () => {
174
+ it('should check multiple nonces efficiently', () => __awaiter(void 0, void 0, void 0, function* () {
175
+ const nonces = [BigNumber.from(1), BigNumber.from(2), BigNumber.from(256), BigNumber.from(257)];
176
+ const results = yield signatureProvider.batchCheckNonces(owner, nonces);
177
+ expect(results).toHaveLength(nonces.length);
178
+ results.forEach((result) => {
179
+ expect(typeof result).toBe('boolean');
180
+ });
181
+ }));
182
+ it('should check specific nonces for known swapper', () => __awaiter(void 0, void 0, void 0, function* () {
183
+ const swapper = '0xa7152Fad7467857dC2D4060FEcaAdf9f6B8227d3';
184
+ const usedNonce = BigNumber.from('1993349591429988950323706171037443285812821323100932422320925456272859199745');
185
+ // Test with the specific nonce and some additional nonces
186
+ const nonces = [
187
+ usedNonce,
188
+ BigNumber.from(1234567890),
189
+ BigNumber.from(9876543210), // Another different nonce
190
+ ];
191
+ const results = yield signatureProvider.batchCheckNonces(swapper, nonces);
192
+ expect(results).toHaveLength(nonces.length);
193
+ results.forEach((result) => {
194
+ expect(typeof result).toBe('boolean');
195
+ });
196
+ // The first nonce should be used (true), others likely unused (false)
197
+ expect(results[0]).toBe(true); // The specific nonce should be used
198
+ }));
199
+ });
200
+ describe('getCurrentTimestamp', () => {
201
+ it('should get the current block timestamp', () => __awaiter(void 0, void 0, void 0, function* () {
202
+ const currentTime = Math.floor(Date.now() / 1000);
203
+ const timestamp = yield signatureProvider.getCurrentTimestamp();
204
+ expect(typeof timestamp).toBe('number');
205
+ expect(timestamp).toBeGreaterThan(0);
206
+ // Check that the timestamp is close to current time (±30 seconds to account for network latency)
207
+ const timeDifference = Math.abs(timestamp - currentTime);
208
+ expect(timeDifference).toBeLessThanOrEqual(30);
209
+ }));
210
+ });
211
+ describe('Integration Tests', () => {
212
+ it('should work together to validate a complete permit flow', () => __awaiter(void 0, void 0, void 0, function* () {
213
+ const nonce = BigNumber.from(789);
214
+ const deadline = BigNumber.from(Math.floor(Date.now() / 1000) + 7200); // 2 hours from now
215
+ // Create permit
216
+ const permit = {
217
+ permitted: {
218
+ token,
219
+ amount: BigNumber.from(1000000),
220
+ },
221
+ spender,
222
+ nonce,
223
+ deadline,
224
+ };
225
+ // Check if nonce is used
226
+ const isNonceUsed = yield signatureProvider.isNonceUsed(owner, nonce);
227
+ // Check if deadline is expired
228
+ const isExpired = yield signatureProvider.isExpired(deadline);
229
+ // Validate permit
230
+ const isValid = yield signatureProvider.isPermitValid(permit);
231
+ // All checks should be consistent
232
+ expect(isValid).toBe(!isNonceUsed && !isExpired);
233
+ }));
234
+ it('should provide consistent results between individual and batch validation', () => __awaiter(void 0, void 0, void 0, function* () {
235
+ const nonces = [BigNumber.from(1), BigNumber.from(2), BigNumber.from(256)];
236
+ // Check individual nonces
237
+ const individualResults = yield Promise.all(nonces.map((nonce) => signatureProvider.isNonceUsed(owner, nonce)));
238
+ // Check batch nonces
239
+ const batchResults = yield signatureProvider.batchCheckNonces(owner, nonces);
240
+ // Results should be consistent
241
+ expect(batchResults).toEqual(individualResults);
242
+ }));
243
+ });
244
+ });
245
+ //# sourceMappingURL=SignatureProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/SignatureProvider.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './AllowanceProvider';
2
+ export * from './SignatureProvider';
@@ -0,0 +1,3 @@
1
+ export * from './AllowanceProvider';
2
+ export * from './SignatureProvider';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
2
+ import { BigNumberish } from '@ethersproject/bignumber';
3
+ export interface Witness {
4
+ witness: any;
5
+ witnessTypeName: string;
6
+ witnessType: Record<string, TypedDataField[]>;
7
+ }
8
+ export interface TokenPermissions {
9
+ token: string;
10
+ amount: BigNumberish;
11
+ }
12
+ export interface PermitTransferFrom {
13
+ permitted: TokenPermissions;
14
+ spender: string;
15
+ nonce: BigNumberish;
16
+ deadline: BigNumberish;
17
+ }
18
+ export interface PermitBatchTransferFrom {
19
+ permitted: TokenPermissions[];
20
+ spender: string;
21
+ nonce: BigNumberish;
22
+ deadline: BigNumberish;
23
+ }
24
+ export type PermitTransferFromData = {
25
+ domain: TypedDataDomain;
26
+ types: Record<string, TypedDataField[]>;
27
+ values: PermitTransferFrom;
28
+ };
29
+ export type PermitBatchTransferFromData = {
30
+ domain: TypedDataDomain;
31
+ types: Record<string, TypedDataField[]>;
32
+ values: PermitBatchTransferFrom;
33
+ };
34
+ export declare abstract class SignatureTransfer {
35
+ /**
36
+ * Cannot be constructed.
37
+ */
38
+ private constructor();
39
+ static getPermitData(permit: PermitTransferFrom | PermitBatchTransferFrom, permit2Address: string, chainId: number, witness?: Witness): PermitTransferFromData | PermitBatchTransferFromData;
40
+ static hash(permit: PermitTransferFrom | PermitBatchTransferFrom, permit2Address: string, chainId: number, witness?: Witness): string;
41
+ }
@@ -0,0 +1,88 @@
1
+ import invariant from 'tiny-invariant';
2
+ import { _TypedDataEncoder } from '@ethersproject/hash';
3
+ import { permit2Domain } from './domain';
4
+ import { MaxSigDeadline, MaxUnorderedNonce, MaxSignatureTransferAmount } from './constants';
5
+ const TOKEN_PERMISSIONS = [
6
+ { name: 'token', type: 'address' },
7
+ { name: 'amount', type: 'uint256' },
8
+ ];
9
+ const PERMIT_TRANSFER_FROM_TYPES = {
10
+ PermitTransferFrom: [
11
+ { name: 'permitted', type: 'TokenPermissions' },
12
+ { name: 'spender', type: 'address' },
13
+ { name: 'nonce', type: 'uint256' },
14
+ { name: 'deadline', type: 'uint256' },
15
+ ],
16
+ TokenPermissions: TOKEN_PERMISSIONS,
17
+ };
18
+ const PERMIT_BATCH_TRANSFER_FROM_TYPES = {
19
+ PermitBatchTransferFrom: [
20
+ { name: 'permitted', type: 'TokenPermissions[]' },
21
+ { name: 'spender', type: 'address' },
22
+ { name: 'nonce', type: 'uint256' },
23
+ { name: 'deadline', type: 'uint256' },
24
+ ],
25
+ TokenPermissions: TOKEN_PERMISSIONS,
26
+ };
27
+ function permitTransferFromWithWitnessType(witness) {
28
+ return Object.assign({ PermitWitnessTransferFrom: [
29
+ { name: 'permitted', type: 'TokenPermissions' },
30
+ { name: 'spender', type: 'address' },
31
+ { name: 'nonce', type: 'uint256' },
32
+ { name: 'deadline', type: 'uint256' },
33
+ { name: 'witness', type: witness.witnessTypeName },
34
+ ], TokenPermissions: TOKEN_PERMISSIONS }, witness.witnessType);
35
+ }
36
+ function permitBatchTransferFromWithWitnessType(witness) {
37
+ return Object.assign({ PermitBatchWitnessTransferFrom: [
38
+ { name: 'permitted', type: 'TokenPermissions[]' },
39
+ { name: 'spender', type: 'address' },
40
+ { name: 'nonce', type: 'uint256' },
41
+ { name: 'deadline', type: 'uint256' },
42
+ { name: 'witness', type: witness.witnessTypeName },
43
+ ], TokenPermissions: TOKEN_PERMISSIONS }, witness.witnessType);
44
+ }
45
+ function isPermitTransferFrom(permit) {
46
+ return !Array.isArray(permit.permitted);
47
+ }
48
+ export class SignatureTransfer {
49
+ /**
50
+ * Cannot be constructed.
51
+ */
52
+ constructor() { }
53
+ // return the data to be sent in a eth_signTypedData RPC call
54
+ // for signing the given permit data
55
+ static getPermitData(permit, permit2Address, chainId, witness) {
56
+ invariant(MaxSigDeadline.gte(permit.deadline), 'SIG_DEADLINE_OUT_OF_RANGE');
57
+ invariant(MaxUnorderedNonce.gte(permit.nonce), 'NONCE_OUT_OF_RANGE');
58
+ const domain = permit2Domain(permit2Address, chainId);
59
+ if (isPermitTransferFrom(permit)) {
60
+ validateTokenPermissions(permit.permitted);
61
+ const types = witness ? permitTransferFromWithWitnessType(witness) : PERMIT_TRANSFER_FROM_TYPES;
62
+ const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit;
63
+ return {
64
+ domain,
65
+ types,
66
+ values,
67
+ };
68
+ }
69
+ else {
70
+ permit.permitted.forEach(validateTokenPermissions);
71
+ const types = witness ? permitBatchTransferFromWithWitnessType(witness) : PERMIT_BATCH_TRANSFER_FROM_TYPES;
72
+ const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit;
73
+ return {
74
+ domain,
75
+ types,
76
+ values,
77
+ };
78
+ }
79
+ }
80
+ static hash(permit, permit2Address, chainId, witness) {
81
+ const { domain, types, values } = SignatureTransfer.getPermitData(permit, permit2Address, chainId, witness);
82
+ return _TypedDataEncoder.hash(domain, types, values);
83
+ }
84
+ }
85
+ function validateTokenPermissions(permissions) {
86
+ invariant(MaxSignatureTransferAmount.gte(permissions.amount), 'AMOUNT_OUT_OF_RANGE');
87
+ }
88
+ //# sourceMappingURL=signatureTransfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatureTransfer.js","sourceRoot":"","sources":["../../../src/signatureTransfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,107 @@
1
+ import { SignatureTransfer } from './signatureTransfer';
2
+ import { MaxUnorderedNonce, MaxSignatureTransferAmount, MaxSigDeadline } from './constants';
3
+ describe('SignatureTransfer', () => {
4
+ describe('Max values', () => {
5
+ it('max values', () => {
6
+ expect(() => SignatureTransfer.hash({
7
+ permitted: {
8
+ token: '0x0000000000000000000000000000000000000000',
9
+ amount: MaxSignatureTransferAmount.toString(),
10
+ },
11
+ spender: '0x0000000000000000000000000000000000000000',
12
+ nonce: MaxUnorderedNonce.toString(),
13
+ deadline: MaxSigDeadline.toString(),
14
+ }, '0x0000000000000000000000000000000000000000', 1)).not.toThrow();
15
+ });
16
+ it('nonce out of range', () => {
17
+ expect(() => SignatureTransfer.hash({
18
+ permitted: {
19
+ token: '0x0000000000000000000000000000000000000000',
20
+ amount: '0',
21
+ },
22
+ spender: '0x0000000000000000000000000000000000000000',
23
+ nonce: MaxUnorderedNonce.add(1).toString(),
24
+ deadline: '0',
25
+ }, '0x0000000000000000000000000000000000000000', 1)).toThrow('NONCE_OUT_OF_RANGE');
26
+ });
27
+ it('amount out of range', () => {
28
+ expect(() => SignatureTransfer.hash({
29
+ permitted: {
30
+ token: '0x0000000000000000000000000000000000000000',
31
+ amount: MaxSignatureTransferAmount.add(1).toString(),
32
+ },
33
+ spender: '0x0000000000000000000000000000000000000000',
34
+ nonce: '0',
35
+ deadline: '0',
36
+ }, '0x0000000000000000000000000000000000000000', 1)).toThrow('AMOUNT_OUT_OF_RANGE');
37
+ });
38
+ it('deadline out of range', () => {
39
+ expect(() => SignatureTransfer.hash({
40
+ permitted: {
41
+ token: '0x0000000000000000000000000000000000000000',
42
+ amount: '0',
43
+ },
44
+ spender: '0x0000000000000000000000000000000000000000',
45
+ nonce: '0',
46
+ deadline: MaxSigDeadline.add(1).toString(),
47
+ }, '0x0000000000000000000000000000000000000000', 1)).toThrow('SIG_DEADLINE_OUT_OF_RANGE');
48
+ });
49
+ });
50
+ it('non-batch, no witness', () => {
51
+ expect(SignatureTransfer.hash({
52
+ permitted: {
53
+ token: '0x0000000000000000000000000000000000000000',
54
+ amount: '0',
55
+ },
56
+ spender: '0x0000000000000000000000000000000000000000',
57
+ nonce: '0',
58
+ deadline: '0',
59
+ }, '0x0000000000000000000000000000000000000000', 1)).toBe('0xb9bf9813799d7f0de28d2142b0bc80ec289d4a6a5b9f41834149df4188804dc5');
60
+ });
61
+ it('non-batch, witness', () => {
62
+ expect(SignatureTransfer.hash({
63
+ permitted: {
64
+ token: '0x0000000000000000000000000000000000000000',
65
+ amount: '0',
66
+ },
67
+ spender: '0x0000000000000000000000000000000000000000',
68
+ nonce: '0',
69
+ deadline: '0',
70
+ }, '0x0000000000000000000000000000000000000000', 1, {
71
+ witnessTypeName: 'MockWitness',
72
+ witnessType: { MockWitness: [{ name: 'mock', type: 'uint256' }] },
73
+ witness: { mock: '0x0000000000000000000000000000000000000000000000000000000000000000' },
74
+ })).toBe('0x4236a4a7b3e8e65dbb4cc758ef10dc4887e2959853fb615140d0f5e0ae7be7c9');
75
+ });
76
+ it('batch, no witness', () => {
77
+ expect(SignatureTransfer.hash({
78
+ permitted: [
79
+ {
80
+ token: '0x0000000000000000000000000000000000000000',
81
+ amount: '0',
82
+ },
83
+ ],
84
+ spender: '0x0000000000000000000000000000000000000000',
85
+ nonce: '0',
86
+ deadline: '0',
87
+ }, '0x0000000000000000000000000000000000000000', 1)).toBe('0x5ba40c5ba725fec181e4a862c717adf91682b012ad01ea99a978189106d66923');
88
+ });
89
+ it('batch, witness', () => {
90
+ expect(SignatureTransfer.hash({
91
+ permitted: [
92
+ {
93
+ token: '0x0000000000000000000000000000000000000000',
94
+ amount: '0',
95
+ },
96
+ ],
97
+ spender: '0x0000000000000000000000000000000000000000',
98
+ nonce: '0',
99
+ deadline: '0',
100
+ }, '0x0000000000000000000000000000000000000000', 1, {
101
+ witnessTypeName: 'MockWitness',
102
+ witnessType: { MockWitness: [{ name: 'mock', type: 'uint256' }] },
103
+ witness: { mock: '0x0000000000000000000000000000000000000000000000000000000000000000' },
104
+ })).toBe('0xb45d605b0a4d4f16930a4f48294d94c78f34411278fd3133626cc190273e3ccf');
105
+ });
106
+ });
107
+ //# sourceMappingURL=signatureTransfer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatureTransfer.test.js","sourceRoot":"","sources":["../../../src/signatureTransfer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
2
+ import { BigNumberish } from '@ethersproject/bignumber';
3
+ export interface PermitDetails {
4
+ token: string;
5
+ amount: BigNumberish;
6
+ expiration: BigNumberish;
7
+ nonce: BigNumberish;
8
+ }
9
+ export interface PermitSingle {
10
+ details: PermitDetails;
11
+ spender: string;
12
+ sigDeadline: BigNumberish;
13
+ }
14
+ export interface PermitBatch {
15
+ details: PermitDetails[];
16
+ spender: string;
17
+ sigDeadline: BigNumberish;
18
+ }
19
+ export type PermitSingleData = {
20
+ domain: TypedDataDomain;
21
+ types: Record<string, TypedDataField[]>;
22
+ values: PermitSingle;
23
+ };
24
+ export type PermitBatchData = {
25
+ domain: TypedDataDomain;
26
+ types: Record<string, TypedDataField[]>;
27
+ values: PermitBatch;
28
+ };
29
+ export declare abstract class AllowanceTransfer {
30
+ /**
31
+ * Cannot be constructed.
32
+ */
33
+ private constructor();
34
+ static getPermitData(permit: PermitSingle | PermitBatch, permit2Address: string, chainId: number): PermitSingleData | PermitBatchData;
35
+ static hash(permit: PermitSingle | PermitBatch, permit2Address: string, chainId: number): string;
36
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ export declare const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
3
+ export declare function permit2Address(chainId?: number): string;
4
+ export declare const MaxUint48: BigNumber;
5
+ export declare const MaxUint160: BigNumber;
6
+ export declare const MaxUint256: BigNumber;
7
+ export declare const MaxAllowanceTransferAmount: BigNumber;
8
+ export declare const MaxAllowanceExpiration: BigNumber;
9
+ export declare const MaxOrderedNonce: BigNumber;
10
+ export declare const MaxSignatureTransferAmount: BigNumber;
11
+ export declare const MaxUnorderedNonce: BigNumber;
12
+ export declare const MaxSigDeadline: BigNumber;
13
+ export declare const InstantExpiration: BigNumber;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
2
+ export declare function permit2Domain(permit2Address: string, chainId: number): TypedDataDomain;
3
+ export type PermitData = {
4
+ domain: TypedDataDomain;
5
+ types: Record<string, TypedDataField[]>;
6
+ values: any;
7
+ };
@@ -0,0 +1,4 @@
1
+ export * from './allowanceTransfer';
2
+ export * from './signatureTransfer';
3
+ export * from './providers';
4
+ export * from './constants';
@@ -0,0 +1,17 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ import { Provider } from '@ethersproject/providers';
3
+ export interface AllowanceData {
4
+ amount: BigNumber;
5
+ nonce: number;
6
+ expiration: number;
7
+ }
8
+ export declare class AllowanceProvider {
9
+ private provider;
10
+ private permit2Address;
11
+ private permit2;
12
+ constructor(provider: Provider, permit2Address: string);
13
+ getAllowanceData(token: string, owner: string, spender: string): Promise<AllowanceData>;
14
+ getAllowance(token: string, owner: string, spender: string): Promise<BigNumber>;
15
+ getNonce(token: string, owner: string, spender: string): Promise<number>;
16
+ getExpiration(token: string, owner: string, spender: string): Promise<number>;
17
+ }