@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,247 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const SignatureProvider_1 = require("./SignatureProvider");
5
+ const bignumber_1 = require("@ethersproject/bignumber");
6
+ const ethers_1 = require("ethers");
7
+ describe('SignatureProvider', () => {
8
+ let provider;
9
+ let permit2Address;
10
+ let owner;
11
+ let spender;
12
+ let token;
13
+ let signatureProvider;
14
+ beforeEach(() => {
15
+ // Setup test environment
16
+ const forkUrl = process.env.FORK_URL || 'http://localhost:8545';
17
+ provider = new ethers_1.ethers.providers.JsonRpcProvider(forkUrl);
18
+ permit2Address = '0x000000000022D473030F116dDEE9F6B43aC78BA3'; // Mainnet Permit2 address
19
+ owner = '0x1234567890123456789012345678901234567890';
20
+ spender = '0x0987654321098765432109876543210987654321';
21
+ token = '0xA0b86a33E6441b8C4C8C8C8C8C8C8C8C8C8C8C8C';
22
+ signatureProvider = new SignatureProvider_1.SignatureProvider(provider, permit2Address);
23
+ });
24
+ describe('isNonceUsed', () => {
25
+ it('should check if a nonce has been used', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
26
+ const nonce = bignumber_1.BigNumber.from(123);
27
+ const isUsed = yield signatureProvider.isNonceUsed(owner, nonce);
28
+ expect(typeof isUsed).toBe('boolean');
29
+ }));
30
+ it('should handle different nonce values', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
31
+ const nonces = [0, 255, 256, 1000, 10000];
32
+ for (const nonce of nonces) {
33
+ const isUsed = yield signatureProvider.isNonceUsed(owner, nonce);
34
+ expect(typeof isUsed).toBe('boolean');
35
+ }
36
+ }));
37
+ it('should check specific used nonce for known swapper', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
38
+ const usedNonce = bignumber_1.BigNumber.from('1993349591429988950323706171037443285812821323100932422320925456272859199745');
39
+ const swapper = '0xa7152Fad7467857dC2D4060FEcaAdf9f6B8227d3';
40
+ const isUsed = yield signatureProvider.isNonceUsed(swapper, usedNonce);
41
+ expect(isUsed).toBe(true); // Nonce should be used
42
+ }));
43
+ it('should check specific unused nonce for known swapper', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
44
+ const unusedNonce = bignumber_1.BigNumber.from('1234567890');
45
+ const swapper = '0x54539967a06Fc0E3C3ED0ee320Eb67362D13C5fF';
46
+ const isUsed = yield signatureProvider.isNonceUsed(swapper, unusedNonce);
47
+ expect(isUsed).toBe(false); // Nonce should be unused
48
+ }));
49
+ });
50
+ describe('isExpired', () => {
51
+ it('should check if a deadline has expired', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
52
+ const futureDeadline = bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) + 3600); // 1 hour from now
53
+ const pastDeadline = bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) - 3600); // 1 hour ago
54
+ const futureExpired = yield signatureProvider.isExpired(futureDeadline);
55
+ const pastExpired = yield signatureProvider.isExpired(pastDeadline);
56
+ expect(typeof futureExpired).toBe('boolean');
57
+ expect(typeof pastExpired).toBe('boolean');
58
+ expect(futureExpired).toBe(false);
59
+ expect(pastExpired).toBe(true);
60
+ }));
61
+ });
62
+ describe('isPermitValid', () => {
63
+ it('should validate a single permit', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
64
+ const permit = {
65
+ permitted: {
66
+ token,
67
+ amount: bignumber_1.BigNumber.from(1000000),
68
+ },
69
+ spender,
70
+ nonce: bignumber_1.BigNumber.from(123),
71
+ deadline: bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) + 3600), // 1 hour from now
72
+ };
73
+ const isValid = yield signatureProvider.isPermitValid(permit);
74
+ expect(typeof isValid).toBe('boolean');
75
+ }));
76
+ it('should validate a batch permit', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
77
+ const permit = {
78
+ permitted: [
79
+ {
80
+ token,
81
+ amount: bignumber_1.BigNumber.from(1000000),
82
+ },
83
+ {
84
+ token: '0xB0b86a33E6441b8C4C8C8C8C8C8C8C8C8C8C8C8C',
85
+ amount: bignumber_1.BigNumber.from(2000000),
86
+ },
87
+ ],
88
+ spender,
89
+ nonce: bignumber_1.BigNumber.from(456),
90
+ deadline: bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) + 3600), // 1 hour from now
91
+ };
92
+ const isValid = yield signatureProvider.isPermitValid(permit);
93
+ expect(typeof isValid).toBe('boolean');
94
+ }));
95
+ it('should return false for expired permits', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
96
+ const permit = {
97
+ permitted: {
98
+ token,
99
+ amount: bignumber_1.BigNumber.from(1000000),
100
+ },
101
+ spender,
102
+ nonce: bignumber_1.BigNumber.from(123),
103
+ deadline: bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) - 3600), // 1 hour ago
104
+ };
105
+ const isValid = yield signatureProvider.isPermitValid(permit);
106
+ expect(isValid).toBe(false);
107
+ }));
108
+ });
109
+ describe('validatePermit', () => {
110
+ it('should return detailed validation results', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
111
+ const permit = {
112
+ permitted: {
113
+ token,
114
+ amount: bignumber_1.BigNumber.from(1000000),
115
+ },
116
+ spender,
117
+ nonce: bignumber_1.BigNumber.from(123),
118
+ deadline: bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) + 3600), // 1 hour from now
119
+ };
120
+ const result = yield signatureProvider.validatePermit(permit);
121
+ expect(result).toHaveProperty('isUsed');
122
+ expect(result).toHaveProperty('isExpired');
123
+ expect(result).toHaveProperty('isValid');
124
+ expect(typeof result.isUsed).toBe('boolean');
125
+ expect(typeof result.isExpired).toBe('boolean');
126
+ expect(typeof result.isValid).toBe('boolean');
127
+ }));
128
+ });
129
+ describe('getNonceBitmap', () => {
130
+ it('should get the nonce bitmap for an owner', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
131
+ const wordPos = bignumber_1.BigNumber.from(0);
132
+ const bitmap = yield signatureProvider.getNonceBitmap(owner, wordPos);
133
+ expect(bitmap).toBeInstanceOf(bignumber_1.BigNumber);
134
+ }));
135
+ });
136
+ describe('isBitSet', () => {
137
+ it('should check if a specific bit is set in a bitmap', () => {
138
+ const bitmap = bignumber_1.BigNumber.from('0x0000000000000000000000000000000000000000000000000000000000000001');
139
+ const bit0Set = SignatureProvider_1.SignatureProvider.isBitSet(bitmap, 0);
140
+ const bit1Set = SignatureProvider_1.SignatureProvider.isBitSet(bitmap, 1);
141
+ expect(bit0Set).toBe(true);
142
+ expect(bit1Set).toBe(false);
143
+ });
144
+ it('should handle different bit positions', () => {
145
+ const bitmap = bignumber_1.BigNumber.from('0x00000000000000000000000000000000000000000000000000000000000000FF');
146
+ for (let i = 0; i < 8; i++) {
147
+ const isSet = SignatureProvider_1.SignatureProvider.isBitSet(bitmap, i);
148
+ expect(isSet).toBe(true);
149
+ }
150
+ for (let i = 8; i < 16; i++) {
151
+ const isSet = SignatureProvider_1.SignatureProvider.isBitSet(bitmap, i);
152
+ expect(isSet).toBe(false);
153
+ }
154
+ });
155
+ it('should throw error for invalid bit positions', () => {
156
+ const bitmap = bignumber_1.BigNumber.from(0);
157
+ expect(() => SignatureProvider_1.SignatureProvider.isBitSet(bitmap, -1)).toThrow('BIT_POSITION_OUT_OF_RANGE');
158
+ expect(() => SignatureProvider_1.SignatureProvider.isBitSet(bitmap, 256)).toThrow('BIT_POSITION_OUT_OF_RANGE');
159
+ });
160
+ });
161
+ describe('getNoncePositions', () => {
162
+ it('should calculate correct word and bit positions', () => {
163
+ const nonce = bignumber_1.BigNumber.from(123);
164
+ const positions = SignatureProvider_1.SignatureProvider.getNoncePositions(nonce);
165
+ expect(positions.wordPos.eq(bignumber_1.BigNumber.from(0))).toBe(true); // 123 >> 8 = 0
166
+ expect(positions.bitPos).toBe(123); // 123 & 255 = 123
167
+ });
168
+ it('should handle nonces that span multiple words', () => {
169
+ const nonce = bignumber_1.BigNumber.from(300);
170
+ const positions = SignatureProvider_1.SignatureProvider.getNoncePositions(nonce);
171
+ expect(positions.wordPos.eq(bignumber_1.BigNumber.from(1))).toBe(true); // 300 >> 8 = 1
172
+ expect(positions.bitPos).toBe(44); // 300 & 255 = 44
173
+ });
174
+ });
175
+ describe('batchCheckNonces', () => {
176
+ it('should check multiple nonces efficiently', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
177
+ const nonces = [bignumber_1.BigNumber.from(1), bignumber_1.BigNumber.from(2), bignumber_1.BigNumber.from(256), bignumber_1.BigNumber.from(257)];
178
+ const results = yield signatureProvider.batchCheckNonces(owner, nonces);
179
+ expect(results).toHaveLength(nonces.length);
180
+ results.forEach((result) => {
181
+ expect(typeof result).toBe('boolean');
182
+ });
183
+ }));
184
+ it('should check specific nonces for known swapper', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
185
+ const swapper = '0xa7152Fad7467857dC2D4060FEcaAdf9f6B8227d3';
186
+ const usedNonce = bignumber_1.BigNumber.from('1993349591429988950323706171037443285812821323100932422320925456272859199745');
187
+ // Test with the specific nonce and some additional nonces
188
+ const nonces = [
189
+ usedNonce,
190
+ bignumber_1.BigNumber.from(1234567890),
191
+ bignumber_1.BigNumber.from(9876543210), // Another different nonce
192
+ ];
193
+ const results = yield signatureProvider.batchCheckNonces(swapper, nonces);
194
+ expect(results).toHaveLength(nonces.length);
195
+ results.forEach((result) => {
196
+ expect(typeof result).toBe('boolean');
197
+ });
198
+ // The first nonce should be used (true), others likely unused (false)
199
+ expect(results[0]).toBe(true); // The specific nonce should be used
200
+ }));
201
+ });
202
+ describe('getCurrentTimestamp', () => {
203
+ it('should get the current block timestamp', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
204
+ const currentTime = Math.floor(Date.now() / 1000);
205
+ const timestamp = yield signatureProvider.getCurrentTimestamp();
206
+ expect(typeof timestamp).toBe('number');
207
+ expect(timestamp).toBeGreaterThan(0);
208
+ // Check that the timestamp is close to current time (±30 seconds to account for network latency)
209
+ const timeDifference = Math.abs(timestamp - currentTime);
210
+ expect(timeDifference).toBeLessThanOrEqual(30);
211
+ }));
212
+ });
213
+ describe('Integration Tests', () => {
214
+ it('should work together to validate a complete permit flow', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
215
+ const nonce = bignumber_1.BigNumber.from(789);
216
+ const deadline = bignumber_1.BigNumber.from(Math.floor(Date.now() / 1000) + 7200); // 2 hours from now
217
+ // Create permit
218
+ const permit = {
219
+ permitted: {
220
+ token,
221
+ amount: bignumber_1.BigNumber.from(1000000),
222
+ },
223
+ spender,
224
+ nonce,
225
+ deadline,
226
+ };
227
+ // Check if nonce is used
228
+ const isNonceUsed = yield signatureProvider.isNonceUsed(owner, nonce);
229
+ // Check if deadline is expired
230
+ const isExpired = yield signatureProvider.isExpired(deadline);
231
+ // Validate permit
232
+ const isValid = yield signatureProvider.isPermitValid(permit);
233
+ // All checks should be consistent
234
+ expect(isValid).toBe(!isNonceUsed && !isExpired);
235
+ }));
236
+ it('should provide consistent results between individual and batch validation', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
237
+ const nonces = [bignumber_1.BigNumber.from(1), bignumber_1.BigNumber.from(2), bignumber_1.BigNumber.from(256)];
238
+ // Check individual nonces
239
+ const individualResults = yield Promise.all(nonces.map((nonce) => signatureProvider.isNonceUsed(owner, nonce)));
240
+ // Check batch nonces
241
+ const batchResults = yield signatureProvider.batchCheckNonces(owner, nonces);
242
+ // Results should be consistent
243
+ expect(batchResults).toEqual(individualResults);
244
+ }));
245
+ });
246
+ });
247
+ //# sourceMappingURL=SignatureProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/SignatureProvider.test.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AAEvD,wDAAoD;AACpD,mCAA+B;AAE/B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,QAA0C,CAAA;IAC9C,IAAI,cAAsB,CAAA;IAC1B,IAAI,KAAa,CAAA;IACjB,IAAI,OAAe,CAAA;IACnB,IAAI,KAAa,CAAA;IACjB,IAAI,iBAAoC,CAAA;IAExC,UAAU,CAAC,GAAG,EAAE;QACd,yBAAyB;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAA;QAC/D,QAAQ,GAAG,IAAI,eAAM,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QACxD,cAAc,GAAG,4CAA4C,CAAA,CAAC,0BAA0B;QACxF,KAAK,GAAG,4CAA4C,CAAA;QACpD,OAAO,GAAG,4CAA4C,CAAA;QACtD,KAAK,GAAG,4CAA4C,CAAA;QACpD,iBAAiB,GAAG,IAAI,qCAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,uCAAuC,EAAE,GAAS,EAAE;YACrD,MAAM,KAAK,GAAG,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEjC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAChE,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvC,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,GAAS,EAAE;YACpD,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAEzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBAChE,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aACtC;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAS,EAAE;YAClE,MAAM,SAAS,GAAG,qBAAS,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAA;YAChH,MAAM,OAAO,GAAG,4CAA4C,CAAA;YAE5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,uBAAuB;QACnD,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,GAAS,EAAE;YACpE,MAAM,WAAW,GAAG,qBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAChD,MAAM,OAAO,GAAG,4CAA4C,CAAA;YAE5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YACxE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC,yBAAyB;QACtD,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,wCAAwC,EAAE,GAAS,EAAE;YACtD,MAAM,cAAc,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA,CAAC,kBAAkB;YAC9F,MAAM,YAAY,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA,CAAC,aAAa;YAEvF,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;YACvE,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;YAEnE,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC5C,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1C,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACjC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,iCAAiC,EAAE,GAAS,EAAE;YAC/C,MAAM,MAAM,GAAuB;gBACjC,SAAS,EAAE;oBACT,KAAK;oBACL,MAAM,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChC;gBACD,OAAO;gBACP,KAAK,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,QAAQ,EAAE,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,kBAAkB;aACnF,CAAA;YAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAC7D,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,GAAS,EAAE;YAC9C,MAAM,MAAM,GAA4B;gBACtC,SAAS,EAAE;oBACT;wBACE,KAAK;wBACL,MAAM,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC;qBAChC;oBACD;wBACE,KAAK,EAAE,4CAA4C;wBACnD,MAAM,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC;qBAChC;iBACF;gBACD,OAAO;gBACP,KAAK,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,QAAQ,EAAE,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,kBAAkB;aACnF,CAAA;YAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAC7D,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,GAAS,EAAE;YACvD,MAAM,MAAM,GAAuB;gBACjC,SAAS,EAAE;oBACT,KAAK;oBACL,MAAM,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChC;gBACD,OAAO;gBACP,KAAK,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,QAAQ,EAAE,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,aAAa;aAC9E,CAAA;YAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,2CAA2C,EAAE,GAAS,EAAE;YACzD,MAAM,MAAM,GAAuB;gBACjC,SAAS,EAAE;oBACT,KAAK;oBACL,MAAM,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChC;gBACD,OAAO;gBACP,KAAK,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,QAAQ,EAAE,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,kBAAkB;aACnF,CAAA;YAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAE7D,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YACxC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC5C,MAAM,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/C,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,0CAA0C,EAAE,GAAS,EAAE;YACxD,MAAM,OAAO,GAAG,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEjC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACrE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,qBAAS,CAAC,CAAA;QAC1C,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,qBAAS,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;YAEnG,MAAM,OAAO,GAAG,qCAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACrD,MAAM,OAAO,GAAG,qCAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAErD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,qBAAS,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;YAEnG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,KAAK,GAAG,qCAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBACnD,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACzB;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,KAAK,GAAG,qCAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBACnD,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAC1B;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAG,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEhC,MAAM,CAAC,GAAG,EAAE,CAAC,qCAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;YACzF,MAAM,CAAC,GAAG,EAAE,CAAC,qCAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;QAC5F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,KAAK,GAAG,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,SAAS,GAAG,qCAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAE5D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,eAAe;YAC1E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC,kBAAkB;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,KAAK,GAAG,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,SAAS,GAAG,qCAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAE5D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,eAAe;YAC1E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,iBAAiB;QACrD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,0CAA0C,EAAE,GAAS,EAAE;YACxD,MAAM,MAAM,GAAG,CAAC,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YAE/F,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAEvE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC3C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzB,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAS,EAAE;YAC9D,MAAM,OAAO,GAAG,4CAA4C,CAAA;YAC5D,MAAM,SAAS,GAAG,qBAAS,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAA;YAEhH,0DAA0D;YAC1D,MAAM,MAAM,GAAG;gBACb,SAAS;gBACT,qBAAS,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC1B,qBAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,0BAA0B;aACvD,CAAA;YAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAEzE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC3C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzB,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvC,CAAC,CAAC,CAAA;YAEF,sEAAsE;YACtE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,oCAAoC;QACpE,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,wCAAwC,EAAE,GAAS,EAAE;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;YACjD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,CAAA;YAE/D,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAEpC,iGAAiG;YACjG,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAA;YACxD,MAAM,CAAC,cAAc,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAChD,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,yDAAyD,EAAE,GAAS,EAAE;YACvE,MAAM,KAAK,GAAG,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,QAAQ,GAAG,qBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA,CAAC,mBAAmB;YAEzF,gBAAgB;YAChB,MAAM,MAAM,GAAuB;gBACjC,SAAS,EAAE;oBACT,KAAK;oBACL,MAAM,EAAE,qBAAS,CAAC,IAAI,CAAC,OAAO,CAAC;iBAChC;gBACD,OAAO;gBACP,KAAK;gBACL,QAAQ;aACT,CAAA;YAED,yBAAyB;YACzB,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAErE,+BAA+B;YAC/B,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAE7D,kBAAkB;YAClB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAE7D,kCAAkC;YAClC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,CAAA;QAClD,CAAC,CAAA,CAAC,CAAA;QAEF,EAAE,CAAC,2EAA2E,EAAE,GAAS,EAAE;YACzF,MAAM,MAAM,GAAG,CAAC,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YAE1E,0BAA0B;YAC1B,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;YAE/G,qBAAqB;YACrB,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAE5E,+BAA+B;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACjD,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './AllowanceProvider';
2
+ export * from './SignatureProvider';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./AllowanceProvider"), exports);
5
+ tslib_1.__exportStar(require("./SignatureProvider"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/index.ts"],"names":[],"mappings":";;;AAAA,8DAAmC;AACnC,8DAAmC"}
@@ -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,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignatureTransfer = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant"));
6
+ const hash_1 = require("@ethersproject/hash");
7
+ const domain_1 = require("./domain");
8
+ const constants_1 = require("./constants");
9
+ const TOKEN_PERMISSIONS = [
10
+ { name: 'token', type: 'address' },
11
+ { name: 'amount', type: 'uint256' },
12
+ ];
13
+ const PERMIT_TRANSFER_FROM_TYPES = {
14
+ PermitTransferFrom: [
15
+ { name: 'permitted', type: 'TokenPermissions' },
16
+ { name: 'spender', type: 'address' },
17
+ { name: 'nonce', type: 'uint256' },
18
+ { name: 'deadline', type: 'uint256' },
19
+ ],
20
+ TokenPermissions: TOKEN_PERMISSIONS,
21
+ };
22
+ const PERMIT_BATCH_TRANSFER_FROM_TYPES = {
23
+ PermitBatchTransferFrom: [
24
+ { name: 'permitted', type: 'TokenPermissions[]' },
25
+ { name: 'spender', type: 'address' },
26
+ { name: 'nonce', type: 'uint256' },
27
+ { name: 'deadline', type: 'uint256' },
28
+ ],
29
+ TokenPermissions: TOKEN_PERMISSIONS,
30
+ };
31
+ function permitTransferFromWithWitnessType(witness) {
32
+ return Object.assign({ PermitWitnessTransferFrom: [
33
+ { name: 'permitted', type: 'TokenPermissions' },
34
+ { name: 'spender', type: 'address' },
35
+ { name: 'nonce', type: 'uint256' },
36
+ { name: 'deadline', type: 'uint256' },
37
+ { name: 'witness', type: witness.witnessTypeName },
38
+ ], TokenPermissions: TOKEN_PERMISSIONS }, witness.witnessType);
39
+ }
40
+ function permitBatchTransferFromWithWitnessType(witness) {
41
+ return Object.assign({ PermitBatchWitnessTransferFrom: [
42
+ { name: 'permitted', type: 'TokenPermissions[]' },
43
+ { name: 'spender', type: 'address' },
44
+ { name: 'nonce', type: 'uint256' },
45
+ { name: 'deadline', type: 'uint256' },
46
+ { name: 'witness', type: witness.witnessTypeName },
47
+ ], TokenPermissions: TOKEN_PERMISSIONS }, witness.witnessType);
48
+ }
49
+ function isPermitTransferFrom(permit) {
50
+ return !Array.isArray(permit.permitted);
51
+ }
52
+ class SignatureTransfer {
53
+ /**
54
+ * Cannot be constructed.
55
+ */
56
+ constructor() { }
57
+ // return the data to be sent in a eth_signTypedData RPC call
58
+ // for signing the given permit data
59
+ static getPermitData(permit, permit2Address, chainId, witness) {
60
+ (0, tiny_invariant_1.default)(constants_1.MaxSigDeadline.gte(permit.deadline), 'SIG_DEADLINE_OUT_OF_RANGE');
61
+ (0, tiny_invariant_1.default)(constants_1.MaxUnorderedNonce.gte(permit.nonce), 'NONCE_OUT_OF_RANGE');
62
+ const domain = (0, domain_1.permit2Domain)(permit2Address, chainId);
63
+ if (isPermitTransferFrom(permit)) {
64
+ validateTokenPermissions(permit.permitted);
65
+ const types = witness ? permitTransferFromWithWitnessType(witness) : PERMIT_TRANSFER_FROM_TYPES;
66
+ const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit;
67
+ return {
68
+ domain,
69
+ types,
70
+ values,
71
+ };
72
+ }
73
+ else {
74
+ permit.permitted.forEach(validateTokenPermissions);
75
+ const types = witness ? permitBatchTransferFromWithWitnessType(witness) : PERMIT_BATCH_TRANSFER_FROM_TYPES;
76
+ const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit;
77
+ return {
78
+ domain,
79
+ types,
80
+ values,
81
+ };
82
+ }
83
+ }
84
+ static hash(permit, permit2Address, chainId, witness) {
85
+ const { domain, types, values } = SignatureTransfer.getPermitData(permit, permit2Address, chainId, witness);
86
+ return hash_1._TypedDataEncoder.hash(domain, types, values);
87
+ }
88
+ }
89
+ exports.SignatureTransfer = SignatureTransfer;
90
+ function validateTokenPermissions(permissions) {
91
+ (0, tiny_invariant_1.default)(constants_1.MaxSignatureTransferAmount.gte(permissions.amount), 'AMOUNT_OUT_OF_RANGE');
92
+ }
93
+ //# 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,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const signatureTransfer_1 = require("./signatureTransfer");
4
+ const constants_1 = require("./constants");
5
+ describe('SignatureTransfer', () => {
6
+ describe('Max values', () => {
7
+ it('max values', () => {
8
+ expect(() => signatureTransfer_1.SignatureTransfer.hash({
9
+ permitted: {
10
+ token: '0x0000000000000000000000000000000000000000',
11
+ amount: constants_1.MaxSignatureTransferAmount.toString(),
12
+ },
13
+ spender: '0x0000000000000000000000000000000000000000',
14
+ nonce: constants_1.MaxUnorderedNonce.toString(),
15
+ deadline: constants_1.MaxSigDeadline.toString(),
16
+ }, '0x0000000000000000000000000000000000000000', 1)).not.toThrow();
17
+ });
18
+ it('nonce out of range', () => {
19
+ expect(() => signatureTransfer_1.SignatureTransfer.hash({
20
+ permitted: {
21
+ token: '0x0000000000000000000000000000000000000000',
22
+ amount: '0',
23
+ },
24
+ spender: '0x0000000000000000000000000000000000000000',
25
+ nonce: constants_1.MaxUnorderedNonce.add(1).toString(),
26
+ deadline: '0',
27
+ }, '0x0000000000000000000000000000000000000000', 1)).toThrow('NONCE_OUT_OF_RANGE');
28
+ });
29
+ it('amount out of range', () => {
30
+ expect(() => signatureTransfer_1.SignatureTransfer.hash({
31
+ permitted: {
32
+ token: '0x0000000000000000000000000000000000000000',
33
+ amount: constants_1.MaxSignatureTransferAmount.add(1).toString(),
34
+ },
35
+ spender: '0x0000000000000000000000000000000000000000',
36
+ nonce: '0',
37
+ deadline: '0',
38
+ }, '0x0000000000000000000000000000000000000000', 1)).toThrow('AMOUNT_OUT_OF_RANGE');
39
+ });
40
+ it('deadline out of range', () => {
41
+ expect(() => signatureTransfer_1.SignatureTransfer.hash({
42
+ permitted: {
43
+ token: '0x0000000000000000000000000000000000000000',
44
+ amount: '0',
45
+ },
46
+ spender: '0x0000000000000000000000000000000000000000',
47
+ nonce: '0',
48
+ deadline: constants_1.MaxSigDeadline.add(1).toString(),
49
+ }, '0x0000000000000000000000000000000000000000', 1)).toThrow('SIG_DEADLINE_OUT_OF_RANGE');
50
+ });
51
+ });
52
+ it('non-batch, no witness', () => {
53
+ expect(signatureTransfer_1.SignatureTransfer.hash({
54
+ permitted: {
55
+ token: '0x0000000000000000000000000000000000000000',
56
+ amount: '0',
57
+ },
58
+ spender: '0x0000000000000000000000000000000000000000',
59
+ nonce: '0',
60
+ deadline: '0',
61
+ }, '0x0000000000000000000000000000000000000000', 1)).toBe('0xb9bf9813799d7f0de28d2142b0bc80ec289d4a6a5b9f41834149df4188804dc5');
62
+ });
63
+ it('non-batch, witness', () => {
64
+ expect(signatureTransfer_1.SignatureTransfer.hash({
65
+ permitted: {
66
+ token: '0x0000000000000000000000000000000000000000',
67
+ amount: '0',
68
+ },
69
+ spender: '0x0000000000000000000000000000000000000000',
70
+ nonce: '0',
71
+ deadline: '0',
72
+ }, '0x0000000000000000000000000000000000000000', 1, {
73
+ witnessTypeName: 'MockWitness',
74
+ witnessType: { MockWitness: [{ name: 'mock', type: 'uint256' }] },
75
+ witness: { mock: '0x0000000000000000000000000000000000000000000000000000000000000000' },
76
+ })).toBe('0x4236a4a7b3e8e65dbb4cc758ef10dc4887e2959853fb615140d0f5e0ae7be7c9');
77
+ });
78
+ it('batch, no witness', () => {
79
+ expect(signatureTransfer_1.SignatureTransfer.hash({
80
+ permitted: [
81
+ {
82
+ token: '0x0000000000000000000000000000000000000000',
83
+ amount: '0',
84
+ },
85
+ ],
86
+ spender: '0x0000000000000000000000000000000000000000',
87
+ nonce: '0',
88
+ deadline: '0',
89
+ }, '0x0000000000000000000000000000000000000000', 1)).toBe('0x5ba40c5ba725fec181e4a862c717adf91682b012ad01ea99a978189106d66923');
90
+ });
91
+ it('batch, witness', () => {
92
+ expect(signatureTransfer_1.SignatureTransfer.hash({
93
+ permitted: [
94
+ {
95
+ token: '0x0000000000000000000000000000000000000000',
96
+ amount: '0',
97
+ },
98
+ ],
99
+ spender: '0x0000000000000000000000000000000000000000',
100
+ nonce: '0',
101
+ deadline: '0',
102
+ }, '0x0000000000000000000000000000000000000000', 1, {
103
+ witnessTypeName: 'MockWitness',
104
+ witnessType: { MockWitness: [{ name: 'mock', type: 'uint256' }] },
105
+ witness: { mock: '0x0000000000000000000000000000000000000000000000000000000000000000' },
106
+ })).toBe('0xb45d605b0a4d4f16930a4f48294d94c78f34411278fd3133626cc190273e3ccf');
107
+ });
108
+ });
109
+ //# 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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"}