@agoric/orchestration 0.1.1-dev-d57b08e.0.d57b08e → 0.1.1-dev-2ae3f1f.0.2ae3f1f
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/package.json +16 -16
- package/src/stubs/{viem-abi.d.ts → viem-typedData.ts} +9 -4
- package/src/utils/abitype.d.ts +6 -0
- package/src/utils/abitype.d.ts.map +1 -0
- package/src/utils/abitype.ts +13 -0
- package/src/utils/permit2/signatureTransfer.d.ts +208 -0
- package/src/utils/permit2/signatureTransfer.d.ts.map +1 -0
- package/src/utils/permit2/signatureTransfer.ts +240 -0
- package/src/utils/permit2/signatureTransferHelpers.d.ts +21 -0
- package/src/utils/permit2/signatureTransferHelpers.d.ts.map +1 -0
- package/src/utils/permit2/signatureTransferHelpers.ts +139 -0
- package/src/utils/permit2.d.ts +11 -0
- package/src/utils/permit2.d.ts.map +1 -0
- package/src/utils/permit2.ts +11 -0
- package/src/utils/viem-utils/hashTypedData.d.ts +17 -0
- package/src/utils/viem-utils/hashTypedData.d.ts.map +1 -0
- package/src/utils/viem-utils/hashTypedData.ts +57 -0
- package/src/utils/viem-utils/types.d.ts +6 -0
- package/src/utils/viem-utils/types.d.ts.map +1 -0
- package/src/utils/viem-utils/types.ts +18 -0
- package/src/utils/viem.d.ts +11 -0
- package/src/utils/viem.d.ts.map +1 -0
- package/src/utils/viem.ts +11 -0
- package/src/vendor/viem/{_esm-YOAV66U4.js → _esm-OKAICHVC.js} +2 -2
- package/src/vendor/viem/{ccip-AAQDZF3N.js → ccip-34BSSMV5.js} +1 -2
- package/src/vendor/viem/{chunk-4EF4K2MH.js → chunk-GCI53Z2G.js} +35 -1
- package/src/vendor/viem/chunk-OFIEVWYB.js +326 -0
- package/src/vendor/viem/viem-abi.js +2 -2
- package/src/vendor/viem/viem-typedData.d.ts +19 -0
- package/src/vendor/viem/viem-typedData.js +56 -0
- package/tsup.config.ts +13 -2
- package/src/stubs/viem-abi.d.ts.map +0 -1
- package/src/vendor/viem/chunk-XN4LUOIH.js +0 -253
- package/src/vendor/viem/secp256k1-WHBDSQB2.js +0 -1914
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/orchestration",
|
|
3
|
-
"version": "0.1.1-dev-
|
|
3
|
+
"version": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
|
|
4
4
|
"description": "Chain abstraction for Agoric's orchestration clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -35,19 +35,19 @@
|
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://github.com/Agoric/agoric-sdk#readme",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@agoric/async-flow": "0.1.1-dev-
|
|
39
|
-
"@agoric/cosmic-proto": "0.4.1-dev-
|
|
40
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
41
|
-
"@agoric/internal": "0.3.3-dev-
|
|
42
|
-
"@agoric/network": "0.1.1-dev-
|
|
43
|
-
"@agoric/notifier": "0.6.3-dev-
|
|
44
|
-
"@agoric/store": "0.9.3-dev-
|
|
45
|
-
"@agoric/time": "0.3.3-dev-
|
|
46
|
-
"@agoric/vat-data": "0.5.3-dev-
|
|
47
|
-
"@agoric/vats": "0.15.2-dev-
|
|
48
|
-
"@agoric/vow": "0.1.1-dev-
|
|
49
|
-
"@agoric/zoe": "0.26.3-dev-
|
|
50
|
-
"@agoric/zone": "0.2.3-dev-
|
|
38
|
+
"@agoric/async-flow": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
|
|
39
|
+
"@agoric/cosmic-proto": "0.4.1-dev-2ae3f1f.0.2ae3f1f",
|
|
40
|
+
"@agoric/ertp": "0.16.3-dev-2ae3f1f.0.2ae3f1f",
|
|
41
|
+
"@agoric/internal": "0.3.3-dev-2ae3f1f.0.2ae3f1f",
|
|
42
|
+
"@agoric/network": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
|
|
43
|
+
"@agoric/notifier": "0.6.3-dev-2ae3f1f.0.2ae3f1f",
|
|
44
|
+
"@agoric/store": "0.9.3-dev-2ae3f1f.0.2ae3f1f",
|
|
45
|
+
"@agoric/time": "0.3.3-dev-2ae3f1f.0.2ae3f1f",
|
|
46
|
+
"@agoric/vat-data": "0.5.3-dev-2ae3f1f.0.2ae3f1f",
|
|
47
|
+
"@agoric/vats": "0.15.2-dev-2ae3f1f.0.2ae3f1f",
|
|
48
|
+
"@agoric/vow": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
|
|
49
|
+
"@agoric/zoe": "0.26.3-dev-2ae3f1f.0.2ae3f1f",
|
|
50
|
+
"@agoric/zone": "0.2.3-dev-2ae3f1f.0.2ae3f1f",
|
|
51
51
|
"@cosmjs/encoding": "^0.36.0",
|
|
52
52
|
"@endo/base64": "^1.0.12",
|
|
53
53
|
"@endo/errors": "^1.2.13",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"bs58": "^6.0.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@agoric/swingset-liveslots": "0.10.3-dev-
|
|
63
|
+
"@agoric/swingset-liveslots": "0.10.3-dev-2ae3f1f.0.2ae3f1f",
|
|
64
64
|
"@chain-registry/client": "^1.53.194",
|
|
65
65
|
"@cosmjs/amino": "^0.36.0",
|
|
66
66
|
"@cosmjs/proto-signing": "^0.36.0",
|
|
@@ -106,5 +106,5 @@
|
|
|
106
106
|
"typeCoverage": {
|
|
107
107
|
"atLeast": 97.46
|
|
108
108
|
},
|
|
109
|
-
"gitHead": "
|
|
109
|
+
"gitHead": "2ae3f1fb1423324b633432fe7149a26bcaadd843"
|
|
110
110
|
}
|
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
* So we use tsup to do dead code elimination, aka tree-shaking,
|
|
7
7
|
* while preserving type info.
|
|
8
8
|
*/
|
|
9
|
-
export {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
export {
|
|
10
|
+
hashStruct,
|
|
11
|
+
hashTypedData,
|
|
12
|
+
recoverTypedDataAddress,
|
|
13
|
+
verifyTypedData,
|
|
14
|
+
serializeTypedData,
|
|
15
|
+
validateTypedData,
|
|
16
|
+
} from 'viem/utils';
|
|
17
|
+
export { encodeType } from '../utils/viem-utils/hashTypedData.ts';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TypedDataType, TypedData } from 'abitype';
|
|
2
|
+
export type TypedDataParameter<TN extends string = string, TT extends string = TypedDataType | keyof TypedData | `${keyof TypedData}[${string | ''}]`> = {
|
|
3
|
+
name: TN;
|
|
4
|
+
type: TT;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=abitype.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abitype.d.ts","sourceRoot":"","sources":["abitype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGxD,MAAM,MAAM,kBAAkB,CAC5B,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,EAAE,SAAS,MAAM,GACb,aAAa,GACb,MAAM,SAAS,GACf,GAAG,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,GAAG,IACtC;IACF,IAAI,EAAE,EAAE,CAAC;IACT,IAAI,EAAE,EAAE,CAAC;CACV,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TypedDataType, TypedData } from 'abitype';
|
|
2
|
+
|
|
3
|
+
// Redefine abitype's TypedDataParameter to make it generic
|
|
4
|
+
export type TypedDataParameter<
|
|
5
|
+
TN extends string = string,
|
|
6
|
+
TT extends string =
|
|
7
|
+
| TypedDataType
|
|
8
|
+
| keyof TypedData
|
|
9
|
+
| `${keyof TypedData}[${string | ''}]`,
|
|
10
|
+
> = {
|
|
11
|
+
name: TN;
|
|
12
|
+
type: TT;
|
|
13
|
+
};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Signature transfer permit2 types and utilities
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* Copyright (c) 2021 Uniswap Lab
|
|
6
|
+
* Copied and adapted from https://github.com/Uniswap/sdks/blob/de28419fcae6e6ba6f88e4a4ae46b2fc9d226cd6/sdks/permit2-sdk/src/signatureTransfer.ts
|
|
7
|
+
*
|
|
8
|
+
* The modifications made are to generalize the witness type to allow defining the field name,
|
|
9
|
+
* and use viem types instead of ethers types.
|
|
10
|
+
*
|
|
11
|
+
* Some stylistic changes have also been made to conform to our code style.
|
|
12
|
+
*/
|
|
13
|
+
import type { TypedDataToPrimitiveTypes } from 'abitype';
|
|
14
|
+
import type { Address, TypedData, TypedDataDefinition } from 'viem';
|
|
15
|
+
import type { TypedDataParameter } from '../abitype.ts';
|
|
16
|
+
interface WitnessDefinition<T extends TypedData = TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>> {
|
|
17
|
+
witnessField: TD;
|
|
18
|
+
witnessTypes: T;
|
|
19
|
+
}
|
|
20
|
+
export interface Witness<T extends TypedData = TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>> extends WitnessDefinition<T, TD> {
|
|
21
|
+
witness: TypedDataToPrimitiveTypes<T>[TD['type']];
|
|
22
|
+
}
|
|
23
|
+
export declare function makeWitness<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>>>(data: NoInfer<TypedDataToPrimitiveTypes<T>[TD['type']]>, types: T, typeParam: TD): Witness<T, TD>;
|
|
24
|
+
export type TokenPermissions = {
|
|
25
|
+
token: Address;
|
|
26
|
+
amount: bigint;
|
|
27
|
+
};
|
|
28
|
+
export type PermitTransferFrom = {
|
|
29
|
+
permitted: TokenPermissions;
|
|
30
|
+
spender: Address;
|
|
31
|
+
nonce: bigint;
|
|
32
|
+
deadline: bigint;
|
|
33
|
+
};
|
|
34
|
+
export type PermitBatchTransferFrom = {
|
|
35
|
+
permitted: readonly TokenPermissions[];
|
|
36
|
+
spender: Address;
|
|
37
|
+
nonce: bigint;
|
|
38
|
+
deadline: bigint;
|
|
39
|
+
};
|
|
40
|
+
export declare const PermitTransferFromTypeParams: [{
|
|
41
|
+
readonly name: "permitted";
|
|
42
|
+
readonly type: "TokenPermissions";
|
|
43
|
+
}, {
|
|
44
|
+
readonly name: "spender";
|
|
45
|
+
readonly type: "address";
|
|
46
|
+
}, {
|
|
47
|
+
readonly name: "nonce";
|
|
48
|
+
readonly type: "uint256";
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "deadline";
|
|
51
|
+
readonly type: "uint256";
|
|
52
|
+
}];
|
|
53
|
+
export declare const PermitBatchTransferFromTypeParams: [{
|
|
54
|
+
readonly name: "permitted";
|
|
55
|
+
readonly type: "TokenPermissions[]";
|
|
56
|
+
}, {
|
|
57
|
+
readonly name: "spender";
|
|
58
|
+
readonly type: "address";
|
|
59
|
+
}, {
|
|
60
|
+
readonly name: "nonce";
|
|
61
|
+
readonly type: "uint256";
|
|
62
|
+
}, {
|
|
63
|
+
readonly name: "deadline";
|
|
64
|
+
readonly type: "uint256";
|
|
65
|
+
}];
|
|
66
|
+
export declare const PermitTransferFromTypes: {
|
|
67
|
+
readonly EIP712Domain: [{
|
|
68
|
+
readonly name: "name";
|
|
69
|
+
readonly type: "string";
|
|
70
|
+
}, {
|
|
71
|
+
readonly name: "chainId";
|
|
72
|
+
readonly type: "uint256";
|
|
73
|
+
}, {
|
|
74
|
+
readonly name: "verifyingContract";
|
|
75
|
+
readonly type: "address";
|
|
76
|
+
}];
|
|
77
|
+
readonly PermitTransferFrom: [{
|
|
78
|
+
readonly name: "permitted";
|
|
79
|
+
readonly type: "TokenPermissions";
|
|
80
|
+
}, {
|
|
81
|
+
readonly name: "spender";
|
|
82
|
+
readonly type: "address";
|
|
83
|
+
}, {
|
|
84
|
+
readonly name: "nonce";
|
|
85
|
+
readonly type: "uint256";
|
|
86
|
+
}, {
|
|
87
|
+
readonly name: "deadline";
|
|
88
|
+
readonly type: "uint256";
|
|
89
|
+
}];
|
|
90
|
+
readonly TokenPermissions: [{
|
|
91
|
+
readonly name: "token";
|
|
92
|
+
readonly type: "address";
|
|
93
|
+
}, {
|
|
94
|
+
readonly name: "amount";
|
|
95
|
+
readonly type: "uint256";
|
|
96
|
+
}];
|
|
97
|
+
};
|
|
98
|
+
export declare const PermitBatchTransferFromTypes: {
|
|
99
|
+
readonly EIP712Domain: [{
|
|
100
|
+
readonly name: "name";
|
|
101
|
+
readonly type: "string";
|
|
102
|
+
}, {
|
|
103
|
+
readonly name: "chainId";
|
|
104
|
+
readonly type: "uint256";
|
|
105
|
+
}, {
|
|
106
|
+
readonly name: "verifyingContract";
|
|
107
|
+
readonly type: "address";
|
|
108
|
+
}];
|
|
109
|
+
readonly PermitBatchTransferFrom: [{
|
|
110
|
+
readonly name: "permitted";
|
|
111
|
+
readonly type: "TokenPermissions[]";
|
|
112
|
+
}, {
|
|
113
|
+
readonly name: "spender";
|
|
114
|
+
readonly type: "address";
|
|
115
|
+
}, {
|
|
116
|
+
readonly name: "nonce";
|
|
117
|
+
readonly type: "uint256";
|
|
118
|
+
}, {
|
|
119
|
+
readonly name: "deadline";
|
|
120
|
+
readonly type: "uint256";
|
|
121
|
+
}];
|
|
122
|
+
readonly TokenPermissions: [{
|
|
123
|
+
readonly name: "token";
|
|
124
|
+
readonly type: "address";
|
|
125
|
+
}, {
|
|
126
|
+
readonly name: "amount";
|
|
127
|
+
readonly type: "uint256";
|
|
128
|
+
}];
|
|
129
|
+
};
|
|
130
|
+
export declare function permitWitnessTransferFromTypes<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(witness: WitnessDefinition<T, TD>): {
|
|
131
|
+
readonly EIP712Domain: [{
|
|
132
|
+
readonly name: "name";
|
|
133
|
+
readonly type: "string";
|
|
134
|
+
}, {
|
|
135
|
+
readonly name: "chainId";
|
|
136
|
+
readonly type: "uint256";
|
|
137
|
+
}, {
|
|
138
|
+
readonly name: "verifyingContract";
|
|
139
|
+
readonly type: "address";
|
|
140
|
+
}];
|
|
141
|
+
readonly PermitWitnessTransferFrom: readonly [{
|
|
142
|
+
readonly name: "permitted";
|
|
143
|
+
readonly type: "TokenPermissions";
|
|
144
|
+
}, {
|
|
145
|
+
readonly name: "spender";
|
|
146
|
+
readonly type: "address";
|
|
147
|
+
}, {
|
|
148
|
+
readonly name: "nonce";
|
|
149
|
+
readonly type: "uint256";
|
|
150
|
+
}, {
|
|
151
|
+
readonly name: "deadline";
|
|
152
|
+
readonly type: "uint256";
|
|
153
|
+
}, TD];
|
|
154
|
+
readonly TokenPermissions: [{
|
|
155
|
+
readonly name: "token";
|
|
156
|
+
readonly type: "address";
|
|
157
|
+
}, {
|
|
158
|
+
readonly name: "amount";
|
|
159
|
+
readonly type: "uint256";
|
|
160
|
+
}];
|
|
161
|
+
} & T;
|
|
162
|
+
export declare function permitBatchWitnessTransferFromTypes<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(witness: WitnessDefinition<T, TD>): {
|
|
163
|
+
readonly EIP712Domain: [{
|
|
164
|
+
readonly name: "name";
|
|
165
|
+
readonly type: "string";
|
|
166
|
+
}, {
|
|
167
|
+
readonly name: "chainId";
|
|
168
|
+
readonly type: "uint256";
|
|
169
|
+
}, {
|
|
170
|
+
readonly name: "verifyingContract";
|
|
171
|
+
readonly type: "address";
|
|
172
|
+
}];
|
|
173
|
+
readonly PermitBatchWitnessTransferFrom: readonly [{
|
|
174
|
+
readonly name: "permitted";
|
|
175
|
+
readonly type: "TokenPermissions[]";
|
|
176
|
+
}, {
|
|
177
|
+
readonly name: "spender";
|
|
178
|
+
readonly type: "address";
|
|
179
|
+
}, {
|
|
180
|
+
readonly name: "nonce";
|
|
181
|
+
readonly type: "uint256";
|
|
182
|
+
}, {
|
|
183
|
+
readonly name: "deadline";
|
|
184
|
+
readonly type: "uint256";
|
|
185
|
+
}, TD];
|
|
186
|
+
readonly TokenPermissions: [{
|
|
187
|
+
readonly name: "token";
|
|
188
|
+
readonly type: "address";
|
|
189
|
+
}, {
|
|
190
|
+
readonly name: "amount";
|
|
191
|
+
readonly type: "uint256";
|
|
192
|
+
}];
|
|
193
|
+
} & T;
|
|
194
|
+
export type PermitWitnessTransferFrom<T extends Record<string, unknown>, TN extends string = 'witness'> = PermitTransferFrom & {
|
|
195
|
+
[key in TN]: T;
|
|
196
|
+
};
|
|
197
|
+
export type PermitBatchWitnessTransferFrom<T extends Record<string, unknown>, TN extends string = 'witness'> = PermitBatchTransferFrom & {
|
|
198
|
+
[key in TN]: T;
|
|
199
|
+
};
|
|
200
|
+
export declare function permit2Domain(permit2Address: Address, chainId: number | bigint): {
|
|
201
|
+
readonly name: "Permit2";
|
|
202
|
+
readonly chainId: number | bigint;
|
|
203
|
+
readonly verifyingContract: `0x${string}`;
|
|
204
|
+
};
|
|
205
|
+
export declare function getPermitWitnessTransferFromData<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(permit: PermitTransferFrom, permit2Address: Address, chainId: number | bigint, witness: Witness<T, TD>): TypedDataDefinition<ReturnType<typeof permitWitnessTransferFromTypes<T, TD>>, 'PermitWitnessTransferFrom', 'PermitWitnessTransferFrom'>;
|
|
206
|
+
export declare function getPermitBatchWitnessTransferFromData<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(permit: PermitBatchTransferFrom, permit2Address: Address, chainId: number | bigint, witness: Witness<T, TD>): TypedDataDefinition<ReturnType<typeof permitBatchWitnessTransferFromTypes<T, TD>>, 'PermitBatchWitnessTransferFrom', 'PermitBatchWitnessTransferFrom'>;
|
|
207
|
+
export {};
|
|
208
|
+
//# sourceMappingURL=signatureTransfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatureTransfer.d.ts","sourceRoot":"","sources":["signatureTransfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Signature transfer permit2 types and utilities
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* Copyright (c) 2021 Uniswap Lab
|
|
6
|
+
* Copied and adapted from https://github.com/Uniswap/sdks/blob/de28419fcae6e6ba6f88e4a4ae46b2fc9d226cd6/sdks/permit2-sdk/src/signatureTransfer.ts
|
|
7
|
+
*
|
|
8
|
+
* The modifications made are to generalize the witness type to allow defining the field name,
|
|
9
|
+
* and use viem types instead of ethers types.
|
|
10
|
+
*
|
|
11
|
+
* Some stylistic changes have also been made to conform to our code style.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { TypedDataToPrimitiveTypes } from 'abitype';
|
|
15
|
+
import type {
|
|
16
|
+
Address,
|
|
17
|
+
TypedData,
|
|
18
|
+
TypedDataDefinition,
|
|
19
|
+
TypedDataDomain,
|
|
20
|
+
} from 'viem';
|
|
21
|
+
import type { TypedDataParameter } from '../abitype.ts';
|
|
22
|
+
|
|
23
|
+
const PERMIT2_DOMAIN_NAME = 'Permit2';
|
|
24
|
+
|
|
25
|
+
// TODO: disallow witness type field being another Permit field name
|
|
26
|
+
interface WitnessDefinition<
|
|
27
|
+
T extends TypedData = TypedData,
|
|
28
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>> =
|
|
29
|
+
TypedDataParameter<'witness', Extract<keyof T, string>>,
|
|
30
|
+
> {
|
|
31
|
+
witnessField: TD;
|
|
32
|
+
witnessTypes: T;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface Witness<
|
|
36
|
+
T extends TypedData = TypedData,
|
|
37
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>> =
|
|
38
|
+
TypedDataParameter<'witness', Extract<keyof T, string>>,
|
|
39
|
+
> extends WitnessDefinition<T, TD> {
|
|
40
|
+
witness: TypedDataToPrimitiveTypes<T>[TD['type']];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function makeWitness<
|
|
44
|
+
T extends TypedData,
|
|
45
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>>,
|
|
46
|
+
>(
|
|
47
|
+
data: NoInfer<TypedDataToPrimitiveTypes<T>[TD['type']]>,
|
|
48
|
+
types: T,
|
|
49
|
+
typeParam: TD,
|
|
50
|
+
): Witness<T, TD> {
|
|
51
|
+
return {
|
|
52
|
+
witness: data,
|
|
53
|
+
witnessTypes: types,
|
|
54
|
+
witnessField: typeParam,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type TokenPermissions = {
|
|
59
|
+
token: Address;
|
|
60
|
+
amount: bigint;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export type PermitTransferFrom = {
|
|
64
|
+
permitted: TokenPermissions;
|
|
65
|
+
spender: Address;
|
|
66
|
+
nonce: bigint;
|
|
67
|
+
deadline: bigint;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export type PermitBatchTransferFrom = {
|
|
71
|
+
permitted: readonly TokenPermissions[];
|
|
72
|
+
spender: Address;
|
|
73
|
+
nonce: bigint;
|
|
74
|
+
deadline: bigint;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const Permit2DomainTypeParams = [
|
|
78
|
+
{ name: 'name', type: 'string' },
|
|
79
|
+
{ name: 'chainId', type: 'uint256' },
|
|
80
|
+
{ name: 'verifyingContract', type: 'address' },
|
|
81
|
+
] as const satisfies TypedDataParameter[];
|
|
82
|
+
|
|
83
|
+
export const PermitTransferFromTypeParams = [
|
|
84
|
+
{ name: 'permitted', type: 'TokenPermissions' },
|
|
85
|
+
{ name: 'spender', type: 'address' },
|
|
86
|
+
{ name: 'nonce', type: 'uint256' },
|
|
87
|
+
{ name: 'deadline', type: 'uint256' },
|
|
88
|
+
] as const satisfies TypedDataParameter[];
|
|
89
|
+
|
|
90
|
+
export const PermitBatchTransferFromTypeParams = [
|
|
91
|
+
{ name: 'permitted', type: 'TokenPermissions[]' },
|
|
92
|
+
{ name: 'spender', type: 'address' },
|
|
93
|
+
{ name: 'nonce', type: 'uint256' },
|
|
94
|
+
{ name: 'deadline', type: 'uint256' },
|
|
95
|
+
] as const satisfies TypedDataParameter[];
|
|
96
|
+
|
|
97
|
+
const TokenPermissionTypeParams = [
|
|
98
|
+
{ name: 'token', type: 'address' },
|
|
99
|
+
{ name: 'amount', type: 'uint256' },
|
|
100
|
+
] as const satisfies TypedDataParameter[];
|
|
101
|
+
|
|
102
|
+
export const PermitTransferFromTypes = {
|
|
103
|
+
EIP712Domain: Permit2DomainTypeParams,
|
|
104
|
+
PermitTransferFrom: PermitTransferFromTypeParams,
|
|
105
|
+
TokenPermissions: TokenPermissionTypeParams,
|
|
106
|
+
} as const satisfies TypedData;
|
|
107
|
+
|
|
108
|
+
export const PermitBatchTransferFromTypes = {
|
|
109
|
+
EIP712Domain: Permit2DomainTypeParams,
|
|
110
|
+
PermitBatchTransferFrom: PermitBatchTransferFromTypeParams,
|
|
111
|
+
TokenPermissions: TokenPermissionTypeParams,
|
|
112
|
+
} as const satisfies TypedData;
|
|
113
|
+
|
|
114
|
+
export function permitWitnessTransferFromTypes<
|
|
115
|
+
T extends TypedData,
|
|
116
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>> =
|
|
117
|
+
TypedDataParameter<'witness', Extract<keyof T, string>>,
|
|
118
|
+
>(witness: WitnessDefinition<T, TD>) {
|
|
119
|
+
return {
|
|
120
|
+
EIP712Domain: Permit2DomainTypeParams,
|
|
121
|
+
PermitWitnessTransferFrom: [
|
|
122
|
+
...PermitTransferFromTypeParams,
|
|
123
|
+
// Enable runtime type to accept undefined field for base type extraction
|
|
124
|
+
...((witness ? [witness.witnessField] : []) as [TD]),
|
|
125
|
+
],
|
|
126
|
+
TokenPermissions: TokenPermissionTypeParams,
|
|
127
|
+
...witness?.witnessTypes,
|
|
128
|
+
} as const satisfies TypedData;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function permitBatchWitnessTransferFromTypes<
|
|
132
|
+
T extends TypedData,
|
|
133
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>> =
|
|
134
|
+
TypedDataParameter<'witness', Extract<keyof T, string>>,
|
|
135
|
+
>(witness: WitnessDefinition<T, TD>) {
|
|
136
|
+
return {
|
|
137
|
+
EIP712Domain: Permit2DomainTypeParams,
|
|
138
|
+
PermitBatchWitnessTransferFrom: [
|
|
139
|
+
...PermitBatchTransferFromTypeParams,
|
|
140
|
+
// Enable runtime type to accept undefined field for base type extraction
|
|
141
|
+
...((witness ? [witness.witnessField] : []) as [TD]),
|
|
142
|
+
],
|
|
143
|
+
TokenPermissions: TokenPermissionTypeParams,
|
|
144
|
+
...witness?.witnessTypes,
|
|
145
|
+
} as const satisfies TypedData;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export type PermitWitnessTransferFrom<
|
|
149
|
+
T extends Record<string, unknown>,
|
|
150
|
+
TN extends string = 'witness',
|
|
151
|
+
> = PermitTransferFrom & { [key in TN]: T };
|
|
152
|
+
|
|
153
|
+
export type PermitBatchWitnessTransferFrom<
|
|
154
|
+
T extends Record<string, unknown>,
|
|
155
|
+
TN extends string = 'witness',
|
|
156
|
+
> = PermitBatchTransferFrom & { [key in TN]: T };
|
|
157
|
+
|
|
158
|
+
export function permit2Domain(
|
|
159
|
+
permit2Address: Address,
|
|
160
|
+
chainId: number | bigint,
|
|
161
|
+
) {
|
|
162
|
+
return {
|
|
163
|
+
name: PERMIT2_DOMAIN_NAME,
|
|
164
|
+
chainId,
|
|
165
|
+
verifyingContract: permit2Address,
|
|
166
|
+
} as const satisfies TypedDataDomain;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// XXX: restore permit to be either PermitTransferFrom or PermitBatchTransferFrom
|
|
170
|
+
// and remove duplication between the two functions below
|
|
171
|
+
// Original method was `SignatureTransfer.getPermitData`
|
|
172
|
+
export function getPermitWitnessTransferFromData<
|
|
173
|
+
T extends TypedData,
|
|
174
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>> =
|
|
175
|
+
TypedDataParameter<'witness', Extract<keyof T, string>>,
|
|
176
|
+
>(
|
|
177
|
+
permit: PermitTransferFrom,
|
|
178
|
+
permit2Address: Address,
|
|
179
|
+
chainId: number | bigint,
|
|
180
|
+
witness: Witness<T, TD>,
|
|
181
|
+
): TypedDataDefinition<
|
|
182
|
+
ReturnType<typeof permitWitnessTransferFromTypes<T, TD>>,
|
|
183
|
+
'PermitWitnessTransferFrom',
|
|
184
|
+
'PermitWitnessTransferFrom'
|
|
185
|
+
> {
|
|
186
|
+
// type MessageType = TypedDataToPrimitiveTypes<
|
|
187
|
+
// ReturnType<typeof permitWitnessTransferFromTypes<T, TD>>
|
|
188
|
+
// >['PermitWitnessTransferFrom'];
|
|
189
|
+
|
|
190
|
+
const domain = permit2Domain(permit2Address, chainId);
|
|
191
|
+
|
|
192
|
+
const types = permitWitnessTransferFromTypes(witness);
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
// @ts-expect-error some generic type inference issue
|
|
196
|
+
domain,
|
|
197
|
+
types,
|
|
198
|
+
primaryType: 'PermitWitnessTransferFrom',
|
|
199
|
+
// @ts-expect-error some generic type inference issue
|
|
200
|
+
message: {
|
|
201
|
+
...permit,
|
|
202
|
+
[witness.witnessField.name]: witness.witness,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function getPermitBatchWitnessTransferFromData<
|
|
208
|
+
T extends TypedData,
|
|
209
|
+
TD extends TypedDataParameter<string, Extract<keyof T, string>> =
|
|
210
|
+
TypedDataParameter<'witness', Extract<keyof T, string>>,
|
|
211
|
+
>(
|
|
212
|
+
permit: PermitBatchTransferFrom,
|
|
213
|
+
permit2Address: Address,
|
|
214
|
+
chainId: number | bigint,
|
|
215
|
+
witness: Witness<T, TD>,
|
|
216
|
+
): TypedDataDefinition<
|
|
217
|
+
ReturnType<typeof permitBatchWitnessTransferFromTypes<T, TD>>,
|
|
218
|
+
'PermitBatchWitnessTransferFrom',
|
|
219
|
+
'PermitBatchWitnessTransferFrom'
|
|
220
|
+
> {
|
|
221
|
+
// type MessageType = TypedDataToPrimitiveTypes<
|
|
222
|
+
// ReturnType<typeof permitBatchWitnessTransferFromTypes<T, TD>>
|
|
223
|
+
// >['PermitBatchWitnessTransferFrom'];
|
|
224
|
+
|
|
225
|
+
const domain = permit2Domain(permit2Address, chainId);
|
|
226
|
+
|
|
227
|
+
const types = permitBatchWitnessTransferFromTypes(witness);
|
|
228
|
+
|
|
229
|
+
return {
|
|
230
|
+
// @ts-expect-error some generic type inference issue
|
|
231
|
+
domain,
|
|
232
|
+
types,
|
|
233
|
+
primaryType: 'PermitBatchWitnessTransferFrom',
|
|
234
|
+
// @ts-expect-error some generic type inference issue
|
|
235
|
+
message: {
|
|
236
|
+
...permit,
|
|
237
|
+
[witness.witnessField.name]: witness.witness,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Helpers for working with permit2 signature transfer witness types
|
|
3
|
+
*
|
|
4
|
+
* This is original code that was adapted for permit2-sdk, unlike @see ./permit2SignatureTransfer.ts
|
|
5
|
+
*/
|
|
6
|
+
import type { TypedData } from 'viem';
|
|
7
|
+
import type { TypedDataParameter } from '../abitype.ts';
|
|
8
|
+
import { PermitBatchTransferFromTypeParams, PermitTransferFromTypeParams } from './signatureTransfer.ts';
|
|
9
|
+
export declare const makeWitnessTypeStringExtractor: ({ encodeType, }: {
|
|
10
|
+
encodeType: ({ primaryType, types, }: {
|
|
11
|
+
primaryType: string;
|
|
12
|
+
types: TypedData;
|
|
13
|
+
}) => string;
|
|
14
|
+
}) => (types: TypedData) => string;
|
|
15
|
+
export declare const extractWitnessFieldFromTypes: <T extends Readonly<TypedDataParameter>>(types: {
|
|
16
|
+
PermitBatchWitnessTransferFrom: readonly [...typeof PermitBatchTransferFromTypeParams, T];
|
|
17
|
+
} | {
|
|
18
|
+
PermitWitnessTransferFrom: readonly [...typeof PermitTransferFromTypeParams, T];
|
|
19
|
+
}) => T;
|
|
20
|
+
export declare const isPermit2MessageType: (type: string) => type is "PermitWitnessTransferFrom" | "PermitBatchWitnessTransferFrom";
|
|
21
|
+
//# sourceMappingURL=signatureTransferHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatureTransferHelpers.d.ts","sourceRoot":"","sources":["signatureTransferHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,iCAAiC,EAEjC,4BAA4B,EAE7B,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,8BAA8B,GAAI,iBAE5C;IACD,UAAU,EAAE,CAAC,EACX,WAAW,EACX,KAAK,GACN,EAAE;QACD,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,SAAS,CAAC;KAClB,KAAK,MAAM,CAAC;CACd,MAiBsC,OAAO,SAAS,WA0BtD,CAAC;AAUF,eAAO,MAAM,4BAA4B,GACvC,CAAC,SAAS,QAAQ,CAAC,kBAAkB,CAAC,EAEtC,OACI;IACE,8BAA8B,EAAE,SAAS,CACvC,GAAG,OAAO,iCAAiC,EAC3C,CAAC,CACF,CAAC;CACH,GACD;IACE,yBAAyB,EAAE,SAAS,CAClC,GAAG,OAAO,4BAA4B,EACtC,CAAC,CACF,CAAC;CACH,KACJ,CAqCF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,2EAKhD,CAAC"}
|