@zerodev/permissions 5.2.7-alpha-1 → 5.2.7-alpha-3
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/_cjs/serializeMultiChainPermissionAccounts.js +36 -15
- package/_cjs/serializeMultiChainPermissionAccounts.js.map +1 -1
- package/_esm/serializeMultiChainPermissionAccounts.js +37 -15
- package/_esm/serializeMultiChainPermissionAccounts.js.map +1 -1
- package/_types/serializeMultiChainPermissionAccounts.d.ts.map +1 -1
- package/package.json +2 -2
- package/serializeMultiChainPermissionAccounts.ts +51 -22
|
@@ -18,25 +18,46 @@ const serializeMultiChainPermissionAccounts = async (params) => {
|
|
|
18
18
|
const pluginEnableTypedDatas = await Promise.all(params.map(async (param) => {
|
|
19
19
|
return param.account.kernelPluginManager.getPluginsEnableTypedData(param.account.address);
|
|
20
20
|
}));
|
|
21
|
+
const leaves = pluginEnableTypedDatas.map((typedData) => {
|
|
22
|
+
return (0, viem_1.hashTypedData)(typedData);
|
|
23
|
+
});
|
|
24
|
+
const merkleTree = new merkletreejs_1.default(leaves, viem_1.keccak256, {
|
|
25
|
+
sortPairs: true
|
|
26
|
+
});
|
|
27
|
+
const merkleRoot = merkleTree.getHexRoot();
|
|
28
|
+
const signature = await params[0].account.kernelPluginManager.sudoValidator?.signMessage({
|
|
29
|
+
message: {
|
|
30
|
+
raw: merkleRoot
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
if (!signature) {
|
|
34
|
+
throw new Error("No enable signature, check if the sudo validator is multi-chain validator");
|
|
35
|
+
}
|
|
21
36
|
const enableSignatures = await Promise.all(params.map(async (param, index) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
25
|
-
const merkleTree = new merkletreejs_1.default(leaves, viem_1.keccak256, {
|
|
26
|
-
sortPairs: true
|
|
27
|
-
});
|
|
28
|
-
const merkleRoot = merkleTree.getHexRoot();
|
|
29
|
-
const ecdsaSig = await param.account.kernelPluginManager.sudoValidator?.signMessage({
|
|
30
|
-
message: {
|
|
31
|
-
raw: merkleRoot
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
if (!ecdsaSig) {
|
|
35
|
-
throw new Error("No ecdsaSig, check if the sudo validator is multi-chain validator");
|
|
37
|
+
if (!param.account.kernelPluginManager.sudoValidator) {
|
|
38
|
+
throw new Error("No sudo validator found, check if sudo validator is multi-chain validator");
|
|
36
39
|
}
|
|
37
40
|
const merkleProof = merkleTree.getHexProof(leaves[index]);
|
|
38
41
|
const encodedMerkleProof = (0, viem_1.encodeAbiParameters)([{ name: "proof", type: "bytes32[]" }], [merkleProof]);
|
|
39
|
-
|
|
42
|
+
if (param.account.kernelPluginManager.sudoValidator.source ===
|
|
43
|
+
"MultiChainECDSAValidator") {
|
|
44
|
+
return (0, viem_1.concatHex)([signature, merkleRoot, encodedMerkleProof]);
|
|
45
|
+
}
|
|
46
|
+
if (param.account.kernelPluginManager.sudoValidator.source ===
|
|
47
|
+
"MultiChainWebAuthnValidator") {
|
|
48
|
+
const merkleData = (0, viem_1.concatHex)([merkleRoot, encodedMerkleProof]);
|
|
49
|
+
return (0, viem_1.encodeAbiParameters)([
|
|
50
|
+
{
|
|
51
|
+
name: "merkleData",
|
|
52
|
+
type: "bytes"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "signature",
|
|
56
|
+
type: "bytes"
|
|
57
|
+
}
|
|
58
|
+
], [merkleData, signature]);
|
|
59
|
+
}
|
|
60
|
+
throw new Error("Unknown multi-chain validator");
|
|
40
61
|
}));
|
|
41
62
|
const accountParamsPerAccounts = await Promise.all(params.map(async (param) => {
|
|
42
63
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeMultiChainPermissionAccounts.js","sourceRoot":"","sources":["../serializeMultiChainPermissionAccounts.ts"],"names":[],"mappings":";;;AACA,+CAAqC;AAErC,+BAMa;AAEb,yCAGmB;AAQZ,MAAM,qCAAqC,GAAG,KAAK,EAGtD,MAAwD,EACvC,EAAE;IACnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,IAAA,sCAA2B,EAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACnE,CAAC;QACD,OACI,KAAK,CAAC,OAAO,CAAC,mBACjB,CAAC,4BAA4B,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAChD,CAAA;IAED,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,eAAe,EAAE,CACtD,CAAA;IAED,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,yBAAyB,CAC9D,KAAK,CAAC,OAAO,CAAC,OAAO,CACxB,CAAA;IACL,CAAC,CAAC,CACL,CAAA;IAGD,MAAM,
|
|
1
|
+
{"version":3,"file":"serializeMultiChainPermissionAccounts.js","sourceRoot":"","sources":["../serializeMultiChainPermissionAccounts.ts"],"names":[],"mappings":";;;AACA,+CAAqC;AAErC,+BAMa;AAEb,yCAGmB;AAQZ,MAAM,qCAAqC,GAAG,KAAK,EAGtD,MAAwD,EACvC,EAAE;IACnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,IAAA,sCAA2B,EAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACnE,CAAC;QACD,OACI,KAAK,CAAC,OAAO,CAAC,mBACjB,CAAC,4BAA4B,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAChD,CAAA;IAED,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,eAAe,EAAE,CACtD,CAAA;IAED,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,yBAAyB,CAC9D,KAAK,CAAC,OAAO,CAAC,OAAO,CACxB,CAAA;IACL,CAAC,CAAC,CACL,CAAA;IAGD,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACpD,OAAO,IAAA,oBAAa,EAAC,SAAS,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,IAAI,sBAAU,CAAC,MAAM,EAAE,gBAAS,EAAE;QACjD,SAAS,EAAE,IAAI;KAClB,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAS,CAAA;IAEjD,MAAM,SAAS,GACX,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,WAAW,CAAC;QACnE,OAAO,EAAE;YACL,GAAG,EAAE,UAAU;SAClB;KACJ,CAAC,CAAA;IAEN,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,2EAA2E,CAC9E,CAAA;IACL,CAAC;IAGD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACX,2EAA2E,CAC9E,CAAA;QACL,CAAC;QACD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAU,CAAA;QAClE,MAAM,kBAAkB,GAAG,IAAA,0BAAmB,EAC1C,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EACtC,CAAC,WAAW,CAAC,CAChB,CAAA;QACD,IACI,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM;YACtD,0BAA0B,EAC5B,CAAC;YACC,OAAO,IAAA,gBAAS,EAAC,CAAC,SAAS,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAA;QACjE,CAAC;QACD,IACI,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM;YACtD,6BAA6B,EAC/B,CAAC;YACC,MAAM,UAAU,GAAG,IAAA,gBAAS,EAAC,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAA;YAC9D,OAAO,IAAA,0BAAmB,EACtB;gBACI;oBACI,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,OAAO;iBAChB;gBACD;oBACI,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,OAAO;iBAChB;aACJ,EACD,CAAC,UAAU,EAAE,SAAS,CAAC,CAC1B,CAAA;QACL,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IACpD,CAAC,CAAC,CACL,CAAA;IAED,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,OAAO;YACH,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAChD,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;SACxC,CAAA;IACL,CAAC,CAAC,CACL,CAAA;IAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACrD,OAAO,IAAA,2CAAgC,EAAC;YACpC,gBAAgB,EAAE,2BAA2B,CAAC,KAAK,CAAC;YACpD,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;YACtB,YAAY,EAAE,uBAAuB,CAAC,KAAK,CAAC;YAC5C,aAAa,EAAE,wBAAwB,CAAC,KAAK,CAAC;YAC9C,eAAe,EAAE,gBAAgB,CAAC,KAAK,CAAC;YACxC,UAAU,EAAE,KAAK,CAAC,UAAU;SAC/B,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,OAAO,oBAAoB,CAAA;AAC/B,CAAC,CAAA;AAvHY,QAAA,qCAAqC,yCAuHjD"}
|
|
@@ -15,26 +15,48 @@ export const serializeMultiChainPermissionAccounts = async (params) => {
|
|
|
15
15
|
const pluginEnableTypedDatas = await Promise.all(params.map(async (param) => {
|
|
16
16
|
return param.account.kernelPluginManager.getPluginsEnableTypedData(param.account.address);
|
|
17
17
|
}));
|
|
18
|
+
// build merkle tree for enable signatures
|
|
19
|
+
const leaves = pluginEnableTypedDatas.map((typedData) => {
|
|
20
|
+
return hashTypedData(typedData);
|
|
21
|
+
});
|
|
22
|
+
const merkleTree = new MerkleTree(leaves, keccak256, {
|
|
23
|
+
sortPairs: true
|
|
24
|
+
});
|
|
25
|
+
const merkleRoot = merkleTree.getHexRoot();
|
|
26
|
+
const signature = await params[0].account.kernelPluginManager.sudoValidator?.signMessage({
|
|
27
|
+
message: {
|
|
28
|
+
raw: merkleRoot
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (!signature) {
|
|
32
|
+
throw new Error("No enable signature, check if the sudo validator is multi-chain validator");
|
|
33
|
+
}
|
|
18
34
|
// get enable signatures for multi-chain validator
|
|
19
35
|
const enableSignatures = await Promise.all(params.map(async (param, index) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
});
|
|
23
|
-
const merkleTree = new MerkleTree(leaves, keccak256, {
|
|
24
|
-
sortPairs: true
|
|
25
|
-
});
|
|
26
|
-
const merkleRoot = merkleTree.getHexRoot();
|
|
27
|
-
const ecdsaSig = await param.account.kernelPluginManager.sudoValidator?.signMessage({
|
|
28
|
-
message: {
|
|
29
|
-
raw: merkleRoot
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
if (!ecdsaSig) {
|
|
33
|
-
throw new Error("No ecdsaSig, check if the sudo validator is multi-chain validator");
|
|
36
|
+
if (!param.account.kernelPluginManager.sudoValidator) {
|
|
37
|
+
throw new Error("No sudo validator found, check if sudo validator is multi-chain validator");
|
|
34
38
|
}
|
|
35
39
|
const merkleProof = merkleTree.getHexProof(leaves[index]);
|
|
36
40
|
const encodedMerkleProof = encodeAbiParameters([{ name: "proof", type: "bytes32[]" }], [merkleProof]);
|
|
37
|
-
|
|
41
|
+
if (param.account.kernelPluginManager.sudoValidator.source ===
|
|
42
|
+
"MultiChainECDSAValidator") {
|
|
43
|
+
return concatHex([signature, merkleRoot, encodedMerkleProof]);
|
|
44
|
+
}
|
|
45
|
+
if (param.account.kernelPluginManager.sudoValidator.source ===
|
|
46
|
+
"MultiChainWebAuthnValidator") {
|
|
47
|
+
const merkleData = concatHex([merkleRoot, encodedMerkleProof]);
|
|
48
|
+
return encodeAbiParameters([
|
|
49
|
+
{
|
|
50
|
+
name: "merkleData",
|
|
51
|
+
type: "bytes"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "signature",
|
|
55
|
+
type: "bytes"
|
|
56
|
+
}
|
|
57
|
+
], [merkleData, signature]);
|
|
58
|
+
}
|
|
59
|
+
throw new Error("Unknown multi-chain validator");
|
|
38
60
|
}));
|
|
39
61
|
const accountParamsPerAccounts = await Promise.all(params.map(async (param) => {
|
|
40
62
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeMultiChainPermissionAccounts.js","sourceRoot":"","sources":["../serializeMultiChainPermissionAccounts.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,OAAO,EAEH,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,SAAS,EACZ,MAAM,MAAM,CAAA;AAEb,OAAO,EACH,2BAA2B,EAC3B,gCAAgC,EACnC,MAAM,YAAY,CAAA;AAQnB,MAAM,CAAC,MAAM,qCAAqC,GAAG,KAAK,EAGtD,MAAwD,EACvC,EAAE;IACnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACnE,CAAC;QACD,OACI,KAAK,CAAC,OAAO,CAAC,mBACjB,CAAC,4BAA4B,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAChD,CAAA;IAED,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,eAAe,EAAE,CACtD,CAAA;IAED,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,yBAAyB,CAC9D,KAAK,CAAC,OAAO,CAAC,OAAO,CACxB,CAAA;IACL,CAAC,CAAC,CACL,CAAA;IAED,
|
|
1
|
+
{"version":3,"file":"serializeMultiChainPermissionAccounts.js","sourceRoot":"","sources":["../serializeMultiChainPermissionAccounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeMultiChainPermissionAccounts.d.ts","sourceRoot":"","sources":["../serializeMultiChainPermissionAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EACH,KAAK,GAAG,EAKX,MAAM,MAAM,CAAA;AAOb,MAAM,MAAM,kCAAkC,CAAC,UAAU,SAAS,UAAU,IACxE;IACI,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAA;IACvC,UAAU,CAAC,EAAE,GAAG,CAAA;CACnB,CAAA;AAEL,eAAO,MAAM,qCAAqC,+FAI/C,QAAQ,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"serializeMultiChainPermissionAccounts.d.ts","sourceRoot":"","sources":["../serializeMultiChainPermissionAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EACH,KAAK,GAAG,EAKX,MAAM,MAAM,CAAA;AAOb,MAAM,MAAM,kCAAkC,CAAC,UAAU,SAAS,UAAU,IACxE;IACI,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAA;IACvC,UAAU,CAAC,EAAE,GAAG,CAAA;CACnB,CAAA;AAEL,eAAO,MAAM,qCAAqC,+FAI/C,QAAQ,MAAM,EAAE,CAmHlB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerodev/permissions",
|
|
3
|
-
"version": "5.2.7-alpha-
|
|
3
|
+
"version": "5.2.7-alpha-3",
|
|
4
4
|
"author": "ZeroDev",
|
|
5
5
|
"main": "./_cjs/index.js",
|
|
6
6
|
"module": "./_esm/index.js",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"viem": "^2.9.17",
|
|
60
|
-
"@zerodev/sdk": "^5.2.
|
|
60
|
+
"@zerodev/sdk": "^5.2.12-alpha-3",
|
|
61
61
|
"permissionless": "^0.1.18"
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -52,40 +52,69 @@ export const serializeMultiChainPermissionAccounts = async <
|
|
|
52
52
|
})
|
|
53
53
|
)
|
|
54
54
|
|
|
55
|
-
//
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return hashTypedData(typedData)
|
|
60
|
-
})
|
|
55
|
+
// build merkle tree for enable signatures
|
|
56
|
+
const leaves = pluginEnableTypedDatas.map((typedData) => {
|
|
57
|
+
return hashTypedData(typedData)
|
|
58
|
+
})
|
|
61
59
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
const merkleTree = new MerkleTree(leaves, keccak256, {
|
|
61
|
+
sortPairs: true
|
|
62
|
+
})
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
const merkleRoot = merkleTree.getHexRoot() as Hex
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
)
|
|
66
|
+
const signature =
|
|
67
|
+
await params[0].account.kernelPluginManager.sudoValidator?.signMessage({
|
|
68
|
+
message: {
|
|
69
|
+
raw: merkleRoot
|
|
70
|
+
}
|
|
71
|
+
})
|
|
76
72
|
|
|
77
|
-
|
|
73
|
+
if (!signature) {
|
|
74
|
+
throw new Error(
|
|
75
|
+
"No enable signature, check if the sudo validator is multi-chain validator"
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// get enable signatures for multi-chain validator
|
|
80
|
+
const enableSignatures = await Promise.all(
|
|
81
|
+
params.map(async (param, index) => {
|
|
82
|
+
if (!param.account.kernelPluginManager.sudoValidator) {
|
|
78
83
|
throw new Error(
|
|
79
|
-
"No
|
|
84
|
+
"No sudo validator found, check if sudo validator is multi-chain validator"
|
|
80
85
|
)
|
|
81
86
|
}
|
|
82
|
-
|
|
83
87
|
const merkleProof = merkleTree.getHexProof(leaves[index]) as Hex[]
|
|
84
88
|
const encodedMerkleProof = encodeAbiParameters(
|
|
85
89
|
[{ name: "proof", type: "bytes32[]" }],
|
|
86
90
|
[merkleProof]
|
|
87
91
|
)
|
|
88
|
-
|
|
92
|
+
if (
|
|
93
|
+
param.account.kernelPluginManager.sudoValidator.source ===
|
|
94
|
+
"MultiChainECDSAValidator"
|
|
95
|
+
) {
|
|
96
|
+
return concatHex([signature, merkleRoot, encodedMerkleProof])
|
|
97
|
+
}
|
|
98
|
+
if (
|
|
99
|
+
param.account.kernelPluginManager.sudoValidator.source ===
|
|
100
|
+
"MultiChainWebAuthnValidator"
|
|
101
|
+
) {
|
|
102
|
+
const merkleData = concatHex([merkleRoot, encodedMerkleProof])
|
|
103
|
+
return encodeAbiParameters(
|
|
104
|
+
[
|
|
105
|
+
{
|
|
106
|
+
name: "merkleData",
|
|
107
|
+
type: "bytes"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "signature",
|
|
111
|
+
type: "bytes"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
[merkleData, signature]
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
throw new Error("Unknown multi-chain validator")
|
|
89
118
|
})
|
|
90
119
|
)
|
|
91
120
|
|