permissionless 0.2.53 → 0.2.54
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/CHANGELOG.md +6 -0
- package/_cjs/accounts/safe/signUserOperation.js +127 -33
- package/_cjs/accounts/safe/signUserOperation.js.map +1 -1
- package/_cjs/accounts/safe/toSafeSmartAccount.js +264 -66
- package/_cjs/accounts/safe/toSafeSmartAccount.js.map +1 -1
- package/_esm/accounts/safe/signUserOperation.js +136 -35
- package/_esm/accounts/safe/signUserOperation.js.map +1 -1
- package/_esm/accounts/safe/toSafeSmartAccount.js +263 -66
- package/_esm/accounts/safe/toSafeSmartAccount.js.map +1 -1
- package/_types/accounts/safe/signUserOperation.d.ts +13 -3
- package/_types/accounts/safe/signUserOperation.d.ts.map +1 -1
- package/_types/accounts/safe/toSafeSmartAccount.d.ts +13 -3
- package/_types/accounts/safe/toSafeSmartAccount.d.ts.map +1 -1
- package/accounts/safe/signUserOperation.ts +177 -39
- package/accounts/safe/toSafeSmartAccount.ts +350 -76
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWebAuthnSignature = exports.concatSignatures = void 0;
|
|
3
4
|
exports.signUserOperation = signUserOperation;
|
|
5
|
+
const ox_1 = require("ox");
|
|
4
6
|
const viem_1 = require("viem");
|
|
5
7
|
const index_js_1 = require("../../utils/index.js");
|
|
6
8
|
const toSafeSmartAccount_js_1 = require("./toSafeSmartAccount.js");
|
|
9
|
+
const concatSignatures = (signatures) => {
|
|
10
|
+
signatures.sort((left, right) => left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()));
|
|
11
|
+
const SIGNATURE_LENGTH_BYTES = 65;
|
|
12
|
+
let signatureBytes = "0x";
|
|
13
|
+
let dynamicBytes = "";
|
|
14
|
+
for (const sig of signatures) {
|
|
15
|
+
if (sig.dynamic) {
|
|
16
|
+
const dynamicPartPosition = (signatures.length * SIGNATURE_LENGTH_BYTES +
|
|
17
|
+
dynamicBytes.length / 2)
|
|
18
|
+
.toString(16)
|
|
19
|
+
.padStart(64, "0");
|
|
20
|
+
const dynamicPartLength = (sig.data.slice(2).length / 2)
|
|
21
|
+
.toString(16)
|
|
22
|
+
.padStart(64, "0");
|
|
23
|
+
const staticSignature = `${sig.signer.slice(2).padStart(64, "0")}${dynamicPartPosition}00`;
|
|
24
|
+
const dynamicPartWithLength = `${dynamicPartLength}${sig.data.slice(2)}`;
|
|
25
|
+
signatureBytes += staticSignature;
|
|
26
|
+
dynamicBytes += dynamicPartWithLength;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
signatureBytes += sig.data.slice(2);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
signatureBytes += dynamicBytes;
|
|
33
|
+
return signatureBytes;
|
|
34
|
+
};
|
|
35
|
+
exports.concatSignatures = concatSignatures;
|
|
36
|
+
const getWebAuthnSignature = async ({ owner, hash }) => {
|
|
37
|
+
const { signature: signatureData, webauthn } = await owner.sign({
|
|
38
|
+
hash
|
|
39
|
+
});
|
|
40
|
+
const signature = ox_1.Signature.fromHex(signatureData);
|
|
41
|
+
const match = webauthn.clientDataJSON.match(/^\{"type":"webauthn.get","challenge":"[A-Za-z0-9\-_]{43}",(.*)\}$/);
|
|
42
|
+
if (!match) {
|
|
43
|
+
throw new Error("challenge not found in client data JSON");
|
|
44
|
+
}
|
|
45
|
+
const [, fields] = match;
|
|
46
|
+
return (0, viem_1.encodeAbiParameters)([
|
|
47
|
+
{ name: "authenticatorData", type: "bytes" },
|
|
48
|
+
{ name: "clientDataJSON", type: "string" },
|
|
49
|
+
{ name: "signature", type: "uint256[2]" }
|
|
50
|
+
], [
|
|
51
|
+
webauthn.authenticatorData,
|
|
52
|
+
fields,
|
|
53
|
+
[BigInt(signature.r), BigInt(signature.s)]
|
|
54
|
+
]);
|
|
55
|
+
};
|
|
56
|
+
exports.getWebAuthnSignature = getWebAuthnSignature;
|
|
7
57
|
async function signUserOperation(parameters) {
|
|
8
58
|
const { chainId, entryPoint, validAfter = 0, validUntil = 0, safe4337ModuleAddress: _safe4337ModuleAddress, version, owners, signatures: existingSignatures, account, ...userOperation } = parameters;
|
|
9
59
|
const { safe4337ModuleAddress } = (0, toSafeSmartAccount_js_1.getDefaultAddresses)(version, entryPoint.version, {
|
|
@@ -42,56 +92,100 @@ async function signUserOperation(parameters) {
|
|
|
42
92
|
sender: userOperation.sender
|
|
43
93
|
});
|
|
44
94
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
95
|
+
const localOwner = (0, toSafeSmartAccount_js_1.isWebAuthnAccount)(account)
|
|
96
|
+
? account
|
|
97
|
+
: await (0, index_js_1.toOwner)({
|
|
47
98
|
owner: account
|
|
48
|
-
})
|
|
49
|
-
|
|
99
|
+
});
|
|
100
|
+
const signer = (0, toSafeSmartAccount_js_1.isWebAuthnAccount)(localOwner)
|
|
101
|
+
? parameters.safeWebAuthnSharedSignerAddress
|
|
102
|
+
: localOwner.address;
|
|
103
|
+
if (!signer) {
|
|
104
|
+
throw new Error("no signer found");
|
|
105
|
+
}
|
|
50
106
|
let unPackedSignatures = [];
|
|
51
107
|
if (existingSignatures) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
108
|
+
try {
|
|
109
|
+
const decoded = (0, viem_1.decodeAbiParameters)([
|
|
110
|
+
{
|
|
111
|
+
components: [
|
|
112
|
+
{ type: "address", name: "signer" },
|
|
113
|
+
{ type: "bytes", name: "data" },
|
|
114
|
+
{ type: "bool", name: "dynamic" }
|
|
115
|
+
],
|
|
116
|
+
name: "signatures",
|
|
117
|
+
type: "tuple[]"
|
|
118
|
+
}
|
|
119
|
+
], existingSignatures);
|
|
120
|
+
unPackedSignatures = decoded[0];
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
const decoded = (0, viem_1.decodeAbiParameters)([
|
|
124
|
+
{
|
|
125
|
+
components: [
|
|
126
|
+
{ type: "address", name: "signer" },
|
|
127
|
+
{ type: "bytes", name: "data" }
|
|
128
|
+
],
|
|
129
|
+
name: "signatures",
|
|
130
|
+
type: "tuple[]"
|
|
131
|
+
}
|
|
132
|
+
], existingSignatures);
|
|
133
|
+
unPackedSignatures = decoded[0].map((sig) => ({
|
|
134
|
+
...sig,
|
|
135
|
+
dynamic: false
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
63
138
|
}
|
|
64
139
|
const signatures = [
|
|
65
140
|
...unPackedSignatures,
|
|
66
|
-
|
|
67
|
-
signer
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
141
|
+
{
|
|
142
|
+
signer,
|
|
143
|
+
dynamic: (0, toSafeSmartAccount_js_1.isWebAuthnAccount)(localOwner),
|
|
144
|
+
data: await (async () => {
|
|
145
|
+
if ((0, toSafeSmartAccount_js_1.isWebAuthnAccount)(localOwner)) {
|
|
146
|
+
const safeHash = (0, viem_1.hashTypedData)({
|
|
147
|
+
domain: {
|
|
148
|
+
chainId,
|
|
149
|
+
verifyingContract: safe4337ModuleAddress
|
|
150
|
+
},
|
|
151
|
+
types: entryPoint.version === "0.6"
|
|
152
|
+
? toSafeSmartAccount_js_1.EIP712_SAFE_OPERATION_TYPE_V06
|
|
153
|
+
: toSafeSmartAccount_js_1.EIP712_SAFE_OPERATION_TYPE_V07,
|
|
154
|
+
primaryType: "SafeOp",
|
|
155
|
+
message: message
|
|
156
|
+
});
|
|
157
|
+
return (0, exports.getWebAuthnSignature)({
|
|
158
|
+
owner: localOwner,
|
|
159
|
+
hash: safeHash
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return localOwner.signTypedData({
|
|
163
|
+
domain: {
|
|
164
|
+
chainId,
|
|
165
|
+
verifyingContract: safe4337ModuleAddress
|
|
166
|
+
},
|
|
167
|
+
types: entryPoint.version === "0.6"
|
|
168
|
+
? toSafeSmartAccount_js_1.EIP712_SAFE_OPERATION_TYPE_V06
|
|
169
|
+
: toSafeSmartAccount_js_1.EIP712_SAFE_OPERATION_TYPE_V07,
|
|
170
|
+
primaryType: "SafeOp",
|
|
171
|
+
message: message
|
|
172
|
+
});
|
|
173
|
+
})()
|
|
174
|
+
}
|
|
80
175
|
];
|
|
81
176
|
if (signatures.length !== owners.length) {
|
|
82
177
|
return (0, viem_1.encodeAbiParameters)([
|
|
83
178
|
{
|
|
84
179
|
components: [
|
|
85
180
|
{ type: "address", name: "signer" },
|
|
86
|
-
{ type: "bytes", name: "data" }
|
|
181
|
+
{ type: "bytes", name: "data" },
|
|
182
|
+
{ type: "bool", name: "dynamic" }
|
|
87
183
|
],
|
|
88
184
|
name: "signatures",
|
|
89
185
|
type: "tuple[]"
|
|
90
186
|
}
|
|
91
187
|
], [signatures]);
|
|
92
188
|
}
|
|
93
|
-
|
|
94
|
-
const signatureBytes = (0, viem_1.concat)(signatures.map((sig) => sig.data));
|
|
95
|
-
return (0, viem_1.encodePacked)(["uint48", "uint48", "bytes"], [validAfter, validUntil, signatureBytes]);
|
|
189
|
+
return (0, viem_1.encodePacked)(["uint48", "uint48", "bytes"], [validAfter, validUntil, (0, exports.concatSignatures)(signatures)]);
|
|
96
190
|
}
|
|
97
191
|
//# sourceMappingURL=signUserOperation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signUserOperation.js","sourceRoot":"","sources":["../../../accounts/safe/signUserOperation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signUserOperation.js","sourceRoot":"","sources":["../../../accounts/safe/signUserOperation.ts"],"names":[],"mappings":"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"}
|