@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.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/cjs/abis/Permit2.json +830 -0
- package/dist/cjs/src/allowanceTransfer.d.ts +36 -0
- package/dist/cjs/src/allowanceTransfer.js +72 -0
- package/dist/cjs/src/allowanceTransfer.js.map +1 -0
- package/dist/cjs/src/allowanceTransfer.test.d.ts +1 -0
- package/dist/cjs/src/allowanceTransfer.test.js +95 -0
- package/dist/cjs/src/allowanceTransfer.test.js.map +1 -0
- package/dist/cjs/src/constants.d.ts +13 -0
- package/dist/cjs/src/constants.js +29 -0
- package/dist/cjs/src/constants.js.map +1 -0
- package/dist/cjs/src/constants.test.d.ts +1 -0
- package/dist/cjs/src/constants.test.js +19 -0
- package/dist/cjs/src/constants.test.js.map +1 -0
- package/dist/cjs/src/domain.d.ts +7 -0
- package/dist/cjs/src/domain.js +13 -0
- package/dist/cjs/src/domain.js.map +1 -0
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.js +8 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/providers/AllowanceProvider.d.ts +17 -0
- package/dist/cjs/src/providers/AllowanceProvider.js +35 -0
- package/dist/cjs/src/providers/AllowanceProvider.js.map +1 -0
- package/dist/cjs/src/providers/SignatureProvider.d.ts +74 -0
- package/dist/cjs/src/providers/SignatureProvider.js +146 -0
- package/dist/cjs/src/providers/SignatureProvider.js.map +1 -0
- package/dist/cjs/src/providers/SignatureProvider.test.d.ts +1 -0
- package/dist/cjs/src/providers/SignatureProvider.test.js +247 -0
- package/dist/cjs/src/providers/SignatureProvider.test.js.map +1 -0
- package/dist/cjs/src/providers/index.d.ts +2 -0
- package/dist/cjs/src/providers/index.js +6 -0
- package/dist/cjs/src/providers/index.js.map +1 -0
- package/dist/cjs/src/signatureTransfer.d.ts +41 -0
- package/dist/cjs/src/signatureTransfer.js +93 -0
- package/dist/cjs/src/signatureTransfer.js.map +1 -0
- package/dist/cjs/src/signatureTransfer.test.d.ts +1 -0
- package/dist/cjs/src/signatureTransfer.test.js +109 -0
- package/dist/cjs/src/signatureTransfer.test.js.map +1 -0
- package/dist/esm/abis/Permit2.json +830 -0
- package/dist/esm/src/allowanceTransfer.d.ts +36 -0
- package/dist/esm/src/allowanceTransfer.js +67 -0
- package/dist/esm/src/allowanceTransfer.js.map +1 -0
- package/dist/esm/src/allowanceTransfer.test.d.ts +1 -0
- package/dist/esm/src/allowanceTransfer.test.js +93 -0
- package/dist/esm/src/allowanceTransfer.test.js.map +1 -0
- package/dist/esm/src/constants.d.ts +13 -0
- package/dist/esm/src/constants.js +25 -0
- package/dist/esm/src/constants.js.map +1 -0
- package/dist/esm/src/constants.test.d.ts +1 -0
- package/dist/esm/src/constants.test.js +17 -0
- package/dist/esm/src/constants.test.js.map +1 -0
- package/dist/esm/src/domain.d.ts +7 -0
- package/dist/esm/src/domain.js +9 -0
- package/dist/esm/src/domain.js.map +1 -0
- package/dist/esm/src/index.d.ts +4 -0
- package/dist/esm/src/index.js +5 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/providers/AllowanceProvider.d.ts +17 -0
- package/dist/esm/src/providers/AllowanceProvider.js +31 -0
- package/dist/esm/src/providers/AllowanceProvider.js.map +1 -0
- package/dist/esm/src/providers/SignatureProvider.d.ts +74 -0
- package/dist/esm/src/providers/SignatureProvider.js +142 -0
- package/dist/esm/src/providers/SignatureProvider.js.map +1 -0
- package/dist/esm/src/providers/SignatureProvider.test.d.ts +1 -0
- package/dist/esm/src/providers/SignatureProvider.test.js +245 -0
- package/dist/esm/src/providers/SignatureProvider.test.js.map +1 -0
- package/dist/esm/src/providers/index.d.ts +2 -0
- package/dist/esm/src/providers/index.js +3 -0
- package/dist/esm/src/providers/index.js.map +1 -0
- package/dist/esm/src/signatureTransfer.d.ts +41 -0
- package/dist/esm/src/signatureTransfer.js +88 -0
- package/dist/esm/src/signatureTransfer.js.map +1 -0
- package/dist/esm/src/signatureTransfer.test.d.ts +1 -0
- package/dist/esm/src/signatureTransfer.test.js +107 -0
- package/dist/esm/src/signatureTransfer.test.js.map +1 -0
- package/dist/types/src/allowanceTransfer.d.ts +36 -0
- package/dist/types/src/allowanceTransfer.test.d.ts +1 -0
- package/dist/types/src/constants.d.ts +13 -0
- package/dist/types/src/constants.test.d.ts +1 -0
- package/dist/types/src/domain.d.ts +7 -0
- package/dist/types/src/index.d.ts +4 -0
- package/dist/types/src/providers/AllowanceProvider.d.ts +17 -0
- package/dist/types/src/providers/SignatureProvider.d.ts +74 -0
- package/dist/types/src/providers/SignatureProvider.test.d.ts +1 -0
- package/dist/types/src/providers/index.d.ts +2 -0
- package/dist/types/src/signatureTransfer.d.ts +41 -0
- package/dist/types/src/signatureTransfer.test.d.ts +1 -0
- 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 @@
|
|
|
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,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
|
+
}
|