permissionless 0.1.19 → 0.1.21
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 +12 -0
- package/_cjs/accounts/kernel/abi/KernelV3AccountAbi.js +91 -0
- package/_cjs/accounts/kernel/abi/KernelV3AccountAbi.js.map +1 -0
- package/_cjs/accounts/kernel/abi/KernelV3MetaFactoryAbi.js +21 -0
- package/_cjs/accounts/kernel/abi/KernelV3MetaFactoryAbi.js.map +1 -0
- package/_cjs/accounts/kernel/constants.js +27 -0
- package/_cjs/accounts/kernel/constants.js.map +1 -0
- package/_cjs/accounts/kernel/signerToEcdsaKernelSmartAccount.js +138 -45
- package/_cjs/accounts/kernel/signerToEcdsaKernelSmartAccount.js.map +1 -1
- package/_cjs/accounts/kernel/utils/encodeCallData.js +89 -0
- package/_cjs/accounts/kernel/utils/encodeCallData.js.map +1 -0
- package/_cjs/accounts/kernel/utils/getExecMode.js +15 -0
- package/_cjs/accounts/kernel/utils/getExecMode.js.map +1 -0
- package/_cjs/accounts/kernel/utils/getNonceKey.js +24 -0
- package/_cjs/accounts/kernel/utils/getNonceKey.js.map +1 -0
- package/_cjs/accounts/kernel/utils/signMessage.js +28 -0
- package/_cjs/accounts/kernel/utils/signMessage.js.map +1 -0
- package/_cjs/accounts/kernel/utils/signTypedData.js +40 -0
- package/_cjs/accounts/kernel/utils/signTypedData.js.map +1 -0
- package/_cjs/accounts/kernel/utils/wrapMessageHash.js +20 -0
- package/_cjs/accounts/kernel/utils/wrapMessageHash.js.map +1 -0
- package/_esm/accounts/kernel/abi/KernelV3AccountAbi.js +88 -0
- package/_esm/accounts/kernel/abi/KernelV3AccountAbi.js.map +1 -0
- package/_esm/accounts/kernel/abi/KernelV3MetaFactoryAbi.js +18 -0
- package/_esm/accounts/kernel/abi/KernelV3MetaFactoryAbi.js.map +1 -0
- package/_esm/accounts/kernel/constants.js +24 -0
- package/_esm/accounts/kernel/constants.js.map +1 -0
- package/_esm/accounts/kernel/signerToEcdsaKernelSmartAccount.js +165 -52
- package/_esm/accounts/kernel/signerToEcdsaKernelSmartAccount.js.map +1 -1
- package/_esm/accounts/kernel/utils/encodeCallData.js +89 -0
- package/_esm/accounts/kernel/utils/encodeCallData.js.map +1 -0
- package/_esm/accounts/kernel/utils/getExecMode.js +12 -0
- package/_esm/accounts/kernel/utils/getExecMode.js.map +1 -0
- package/_esm/accounts/kernel/utils/getNonceKey.js +21 -0
- package/_esm/accounts/kernel/utils/getNonceKey.js.map +1 -0
- package/_esm/accounts/kernel/utils/signMessage.js +24 -0
- package/_esm/accounts/kernel/utils/signMessage.js.map +1 -0
- package/_esm/accounts/kernel/utils/signTypedData.js +38 -0
- package/_esm/accounts/kernel/utils/signTypedData.js.map +1 -0
- package/_esm/accounts/kernel/utils/wrapMessageHash.js +16 -0
- package/_esm/accounts/kernel/utils/wrapMessageHash.js.map +1 -0
- package/_types/accounts/kernel/abi/KernelV3AccountAbi.d.ts +108 -0
- package/_types/accounts/kernel/abi/KernelV3AccountAbi.d.ts.map +1 -0
- package/_types/accounts/kernel/abi/KernelV3MetaFactoryAbi.d.ts +24 -0
- package/_types/accounts/kernel/abi/KernelV3MetaFactoryAbi.d.ts.map +1 -0
- package/_types/accounts/kernel/constants.d.ts +21 -0
- package/_types/accounts/kernel/constants.d.ts.map +1 -0
- package/_types/accounts/kernel/signerToEcdsaKernelSmartAccount.d.ts +18 -5
- package/_types/accounts/kernel/signerToEcdsaKernelSmartAccount.d.ts.map +1 -1
- package/_types/accounts/kernel/utils/encodeCallData.d.ts +12 -0
- package/_types/accounts/kernel/utils/encodeCallData.d.ts.map +1 -0
- package/_types/accounts/kernel/utils/getExecMode.d.ts +7 -0
- package/_types/accounts/kernel/utils/getExecMode.d.ts.map +1 -0
- package/_types/accounts/kernel/utils/getNonceKey.d.ts +4 -0
- package/_types/accounts/kernel/utils/getNonceKey.d.ts.map +1 -0
- package/_types/accounts/kernel/utils/signMessage.d.ts +4 -0
- package/_types/accounts/kernel/utils/signMessage.d.ts.map +1 -0
- package/_types/accounts/kernel/utils/signTypedData.d.ts +4 -0
- package/_types/accounts/kernel/utils/signTypedData.d.ts.map +1 -0
- package/_types/accounts/kernel/utils/wrapMessageHash.d.ts +9 -0
- package/_types/accounts/kernel/utils/wrapMessageHash.d.ts.map +1 -0
- package/accounts/kernel/abi/KernelV3AccountAbi.ts +88 -0
- package/accounts/kernel/abi/KernelV3MetaFactoryAbi.ts +17 -0
- package/accounts/kernel/constants.ts +21 -0
- package/accounts/kernel/signerToEcdsaKernelSmartAccount.ts +252 -71
- package/accounts/kernel/utils/encodeCallData.ts +114 -0
- package/accounts/kernel/utils/getExecMode.ts +18 -0
- package/accounts/kernel/utils/getNonceKey.ts +32 -0
- package/accounts/kernel/utils/signMessage.ts +48 -0
- package/accounts/kernel/utils/signTypedData.ts +74 -0
- package/accounts/kernel/utils/wrapMessageHash.ts +38 -0
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signMessage = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const actions_1 = require("viem/actions");
|
|
6
|
+
const wrapMessageHash_1 = require("./wrapMessageHash.js");
|
|
7
|
+
async function signMessage(client, { account: account_ = client.account, message, accountAddress, accountVersion }) {
|
|
8
|
+
if (accountVersion === "0.2.2") {
|
|
9
|
+
return (0, actions_1.signMessage)(client, {
|
|
10
|
+
account: account_,
|
|
11
|
+
message
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const wrappedMessageHash = (0, wrapMessageHash_1.wrapMessageHash)((0, viem_1.hashMessage)(message), {
|
|
15
|
+
accountVersion,
|
|
16
|
+
accountAddress,
|
|
17
|
+
chainId: client.chain
|
|
18
|
+
? client.chain.id
|
|
19
|
+
: await client.extend(viem_1.publicActions).getChainId()
|
|
20
|
+
});
|
|
21
|
+
const signature = await (0, actions_1.signMessage)(client, {
|
|
22
|
+
account: account_,
|
|
23
|
+
message: { raw: wrappedMessageHash }
|
|
24
|
+
});
|
|
25
|
+
return signature;
|
|
26
|
+
}
|
|
27
|
+
exports.signMessage = signMessage;
|
|
28
|
+
//# sourceMappingURL=signMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signMessage.js","sourceRoot":"","sources":["../../../../accounts/kernel/utils/signMessage.ts"],"names":[],"mappings":";;;AAAA,+BAUa;AACb,0CAA0D;AAC1D,uDAA+E;AAExE,KAAK,UAAU,WAAW,CAI7B,MAA2C,EAC3C,EACI,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,OAAO,EACP,cAAc,EACd,cAAc,EACwC;IAE1D,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,IAAA,qBAAY,EAAC,MAAM,EAAE;YACxB,OAAO,EAAE,QAAwB;YACjC,OAAO;SACV,CAAC,CAAA;IACN,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAA,iCAAe,EAAC,IAAA,kBAAW,EAAC,OAAO,CAAC,EAAE;QAC7D,cAAc;QACd,cAAc;QACd,OAAO,EAAE,MAAM,CAAC,KAAK;YACjB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACjB,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAC,UAAU,EAAE;KACxD,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAY,EAAC,MAAM,EAAE;QACzC,OAAO,EAAE,QAAwB;QACjC,OAAO,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE;KACvC,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AACpB,CAAC;AAjCD,kCAiCC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signTypedData = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const actions_1 = require("viem/actions");
|
|
6
|
+
const wrapMessageHash_1 = require("./wrapMessageHash.js");
|
|
7
|
+
async function signTypedData(client, parameters) {
|
|
8
|
+
const { account: account_, accountAddress, accountVersion, ...typedData } = parameters;
|
|
9
|
+
if (accountVersion === "0.2.2") {
|
|
10
|
+
return (0, actions_1.signTypedData)(client, { account: account_, ...typedData });
|
|
11
|
+
}
|
|
12
|
+
const { message, primaryType, types: _types, domain } = typedData;
|
|
13
|
+
const types = {
|
|
14
|
+
EIP712Domain: (0, viem_1.getTypesForEIP712Domain)({
|
|
15
|
+
domain: domain
|
|
16
|
+
}),
|
|
17
|
+
..._types
|
|
18
|
+
};
|
|
19
|
+
(0, viem_1.validateTypedData)({
|
|
20
|
+
domain,
|
|
21
|
+
message,
|
|
22
|
+
primaryType,
|
|
23
|
+
types
|
|
24
|
+
});
|
|
25
|
+
const typedHash = (0, viem_1.hashTypedData)({ message, primaryType, types, domain });
|
|
26
|
+
const wrappedMessageHash = (0, wrapMessageHash_1.wrapMessageHash)(typedHash, {
|
|
27
|
+
accountVersion,
|
|
28
|
+
accountAddress,
|
|
29
|
+
chainId: client.chain
|
|
30
|
+
? client.chain.id
|
|
31
|
+
: await client.extend(viem_1.publicActions).getChainId()
|
|
32
|
+
});
|
|
33
|
+
const signature = await (0, actions_1.signMessage)(client, {
|
|
34
|
+
account: account_,
|
|
35
|
+
message: { raw: wrappedMessageHash }
|
|
36
|
+
});
|
|
37
|
+
return signature;
|
|
38
|
+
}
|
|
39
|
+
exports.signTypedData = signTypedData;
|
|
40
|
+
//# sourceMappingURL=signTypedData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signTypedData.js","sourceRoot":"","sources":["../../../../accounts/kernel/utils/signTypedData.ts"],"names":[],"mappings":";;;AAAA,+BAaa;AAEb,0CAGqB;AACrB,uDAA+E;AAExE,KAAK,UAAU,aAAa,CAM/B,MAAyC,EACzC,UACyB;IAEzB,MAAM,EACF,OAAO,EAAE,QAAQ,EACjB,cAAc,EACd,cAAc,EACd,GAAG,SAAS,EACf,GAAG,UAAwE,CAAA;IAC5E,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,IAAA,uBAAc,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;IACtE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IACjE,MAAM,KAAK,GAAG;QACV,YAAY,EAAE,IAAA,8BAAuB,EAAC;YAClC,MAAM,EAAE,MAAM;SACjB,CAAC;QACF,GAAG,MAAM;KACZ,CAAA;IAID,IAAA,wBAAiB,EAAC;QACd,MAAM;QACN,OAAO;QACP,WAAW;QACX,KAAK;KACR,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,IAAA,oBAAa,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAExE,MAAM,kBAAkB,GAAG,IAAA,iCAAe,EAAC,SAAS,EAAE;QAClD,cAAc;QACd,cAAc;QACd,OAAO,EAAE,MAAM,CAAC,KAAK;YACjB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACjB,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAC,UAAU,EAAE;KACxD,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAY,EAAC,MAAM,EAAE;QACzC,OAAO,EAAE,QAAwB;QACjC,OAAO,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE;KACvC,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AACpB,CAAC;AApDD,sCAoDC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapMessageHash = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const viem_2 = require("viem");
|
|
6
|
+
const wrapMessageHash = (messageHash, { accountAddress, accountVersion, chainId }) => {
|
|
7
|
+
const _domainSeparator = (0, viem_2.domainSeparator)({
|
|
8
|
+
domain: {
|
|
9
|
+
name: "Kernel",
|
|
10
|
+
version: accountVersion,
|
|
11
|
+
chainId,
|
|
12
|
+
verifyingContract: accountAddress
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
const wrappedMessageHash = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([{ type: "bytes32" }, { type: "bytes32" }], [(0, viem_1.keccak256)((0, viem_1.stringToHex)("Kernel(bytes32 hash)")), messageHash]));
|
|
16
|
+
const digest = (0, viem_1.keccak256)((0, viem_1.concatHex)(["0x1901", _domainSeparator, wrappedMessageHash]));
|
|
17
|
+
return digest;
|
|
18
|
+
};
|
|
19
|
+
exports.wrapMessageHash = wrapMessageHash;
|
|
20
|
+
//# sourceMappingURL=wrapMessageHash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapMessageHash.js","sourceRoot":"","sources":["../../../../accounts/kernel/utils/wrapMessageHash.ts"],"names":[],"mappings":";;;AAAA,+BAMa;AACb,+BAAoD;AAQ7C,MAAM,eAAe,GAAG,CAC3B,WAAgB,EAChB,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAyB,EACpE,EAAE;IACA,MAAM,gBAAgB,GAAG,IAAA,sBAAe,EAAC;QACrC,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc;YACvB,OAAO;YACP,iBAAiB,EAAE,cAAc;SACpC;KACJ,CAAC,CAAA;IACF,MAAM,kBAAkB,GAAG,IAAA,gBAAS,EAChC,IAAA,0BAAmB,EACf,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC1C,CAAC,IAAA,gBAAS,EAAC,IAAA,kBAAW,EAAC,sBAAsB,CAAC,CAAC,EAAE,WAAW,CAAC,CAChE,CACJ,CAAA;IACD,MAAM,MAAM,GAAG,IAAA,gBAAS,EACpB,IAAA,gBAAS,EAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAC9D,CAAA;IACD,OAAO,MAAM,CAAA;AACjB,CAAC,CAAA;AAtBY,QAAA,eAAe,mBAsB3B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export const KernelV3InitAbi = [
|
|
2
|
+
{
|
|
3
|
+
type: "function",
|
|
4
|
+
name: "initialize",
|
|
5
|
+
inputs: [
|
|
6
|
+
{
|
|
7
|
+
name: "_rootValidator",
|
|
8
|
+
type: "bytes21",
|
|
9
|
+
internalType: "ValidationId"
|
|
10
|
+
},
|
|
11
|
+
{ name: "hook", type: "address", internalType: "contract IHook" },
|
|
12
|
+
{ name: "validatorData", type: "bytes", internalType: "bytes" },
|
|
13
|
+
{ name: "hookData", type: "bytes", internalType: "bytes" }
|
|
14
|
+
],
|
|
15
|
+
outputs: [],
|
|
16
|
+
stateMutability: "nonpayable"
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
export const KernelV3ExecuteAbi = [
|
|
20
|
+
{
|
|
21
|
+
type: "function",
|
|
22
|
+
name: "execute",
|
|
23
|
+
inputs: [
|
|
24
|
+
{ name: "execMode", type: "bytes32", internalType: "ExecMode" },
|
|
25
|
+
{ name: "executionCalldata", type: "bytes", internalType: "bytes" }
|
|
26
|
+
],
|
|
27
|
+
outputs: [],
|
|
28
|
+
stateMutability: "payable"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: "function",
|
|
32
|
+
name: "executeFromExecutor",
|
|
33
|
+
inputs: [
|
|
34
|
+
{ name: "execMode", type: "bytes32", internalType: "ExecMode" },
|
|
35
|
+
{ name: "executionCalldata", type: "bytes", internalType: "bytes" }
|
|
36
|
+
],
|
|
37
|
+
outputs: [
|
|
38
|
+
{ name: "returnData", type: "bytes[]", internalType: "bytes[]" }
|
|
39
|
+
],
|
|
40
|
+
stateMutability: "payable"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
type: "function",
|
|
44
|
+
name: "executeUserOp",
|
|
45
|
+
inputs: [
|
|
46
|
+
{
|
|
47
|
+
name: "userOp",
|
|
48
|
+
type: "tuple",
|
|
49
|
+
internalType: "struct PackedUserOperation",
|
|
50
|
+
components: [
|
|
51
|
+
{
|
|
52
|
+
name: "sender",
|
|
53
|
+
type: "address",
|
|
54
|
+
internalType: "address"
|
|
55
|
+
},
|
|
56
|
+
{ name: "nonce", type: "uint256", internalType: "uint256" },
|
|
57
|
+
{ name: "initCode", type: "bytes", internalType: "bytes" },
|
|
58
|
+
{ name: "callData", type: "bytes", internalType: "bytes" },
|
|
59
|
+
{
|
|
60
|
+
name: "accountGasLimits",
|
|
61
|
+
type: "bytes32",
|
|
62
|
+
internalType: "bytes32"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: "preVerificationGas",
|
|
66
|
+
type: "uint256",
|
|
67
|
+
internalType: "uint256"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "gasFees",
|
|
71
|
+
type: "bytes32",
|
|
72
|
+
internalType: "bytes32"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "paymasterAndData",
|
|
76
|
+
type: "bytes",
|
|
77
|
+
internalType: "bytes"
|
|
78
|
+
},
|
|
79
|
+
{ name: "signature", type: "bytes", internalType: "bytes" }
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{ name: "userOpHash", type: "bytes32", internalType: "bytes32" }
|
|
83
|
+
],
|
|
84
|
+
outputs: [],
|
|
85
|
+
stateMutability: "payable"
|
|
86
|
+
}
|
|
87
|
+
];
|
|
88
|
+
//# sourceMappingURL=KernelV3AccountAbi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KernelV3AccountAbi.js","sourceRoot":"","sources":["../../../../accounts/kernel/abi/KernelV3AccountAbi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const KernelV3MetaFactoryDeployWithFactoryAbi = [
|
|
2
|
+
{
|
|
3
|
+
type: "function",
|
|
4
|
+
name: "deployWithFactory",
|
|
5
|
+
inputs: [
|
|
6
|
+
{
|
|
7
|
+
name: "factory",
|
|
8
|
+
type: "address",
|
|
9
|
+
internalType: "contract KernelFactory"
|
|
10
|
+
},
|
|
11
|
+
{ name: "createData", type: "bytes", internalType: "bytes" },
|
|
12
|
+
{ name: "salt", type: "bytes32", internalType: "bytes32" }
|
|
13
|
+
],
|
|
14
|
+
outputs: [{ name: "", type: "address", internalType: "address" }],
|
|
15
|
+
stateMutability: "payable"
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
//# sourceMappingURL=KernelV3MetaFactoryAbi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KernelV3MetaFactoryAbi.js","sourceRoot":"","sources":["../../../../accounts/kernel/abi/KernelV3MetaFactoryAbi.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACnD;QACI,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE;YACJ;gBACI,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,wBAAwB;aACzC;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE;YAC5D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE;SAC7D;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACjE,eAAe,EAAE,SAAS;KAC7B;CACK,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const DUMMY_ECDSA_SIGNATURE = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
2
|
+
export const ROOT_MODE_KERNEL_V2 = "0x00000000";
|
|
3
|
+
export var CALL_TYPE;
|
|
4
|
+
(function (CALL_TYPE) {
|
|
5
|
+
CALL_TYPE["SINGLE"] = "0x00";
|
|
6
|
+
CALL_TYPE["BATCH"] = "0x01";
|
|
7
|
+
CALL_TYPE["DELEGATE_CALL"] = "0xFF";
|
|
8
|
+
})(CALL_TYPE || (CALL_TYPE = {}));
|
|
9
|
+
export var EXEC_TYPE;
|
|
10
|
+
(function (EXEC_TYPE) {
|
|
11
|
+
EXEC_TYPE["DEFAULT"] = "0x00";
|
|
12
|
+
EXEC_TYPE["TRY_EXEC"] = "0x01";
|
|
13
|
+
})(EXEC_TYPE || (EXEC_TYPE = {}));
|
|
14
|
+
export const VALIDATOR_TYPE = {
|
|
15
|
+
ROOT: "0x00",
|
|
16
|
+
VALIDATOR: "0x01",
|
|
17
|
+
PERMISSION: "0x02"
|
|
18
|
+
};
|
|
19
|
+
export var VALIDATOR_MODE;
|
|
20
|
+
(function (VALIDATOR_MODE) {
|
|
21
|
+
VALIDATOR_MODE["DEFAULT"] = "0x00";
|
|
22
|
+
VALIDATOR_MODE["ENABLE"] = "0x01";
|
|
23
|
+
})(VALIDATOR_MODE || (VALIDATOR_MODE = {}));
|
|
24
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../accounts/kernel/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAC9B,sIAAsI,CAAA;AAC1I,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAA;AAC/C,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,4BAAe,CAAA;IACf,2BAAc,CAAA;IACd,mCAAsB,CAAA;AAC1B,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AACD,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,6BAAgB,CAAA;IAChB,8BAAiB,CAAA;AACrB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AACD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,MAAM;CACZ,CAAA;AACV,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,kCAAgB,CAAA;IAChB,iCAAe,CAAA;AACnB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import { concatHex, encodeFunctionData, isAddressEqual } from "viem";
|
|
2
|
-
import { getChainId, readContract, signMessage
|
|
1
|
+
import { concatHex, encodeFunctionData, isAddressEqual, toHex, zeroAddress } from "viem";
|
|
2
|
+
import { getChainId, readContract, signMessage as _signMessage } from "viem/actions";
|
|
3
3
|
import { getAccountNonce } from "../../actions/public/getAccountNonce.js";
|
|
4
4
|
import { getSenderAddress } from "../../actions/public/getSenderAddress.js";
|
|
5
|
-
import { getEntryPointVersion } from "../../utils/index.js";
|
|
5
|
+
import { ENTRYPOINT_ADDRESS_V06, getEntryPointVersion } from "../../utils/index.js";
|
|
6
6
|
import { getUserOperationHash } from "../../utils/getUserOperationHash.js";
|
|
7
7
|
import { isSmartAccountDeployed } from "../../utils/isSmartAccountDeployed.js";
|
|
8
8
|
import { toSmartAccount } from "../toSmartAccount.js";
|
|
9
9
|
import { SignTransactionNotSupportedBySmartAccount } from "../types.js";
|
|
10
|
-
import {
|
|
10
|
+
import { KernelInitAbi } from "./abi/KernelAccountAbi.js";
|
|
11
|
+
import { KernelV3InitAbi } from "./abi/KernelV3AccountAbi.js";
|
|
12
|
+
import { KernelV3MetaFactoryDeployWithFactoryAbi } from "./abi/KernelV3MetaFactoryAbi.js";
|
|
13
|
+
import { DUMMY_ECDSA_SIGNATURE, ROOT_MODE_KERNEL_V2, VALIDATOR_TYPE } from "./constants.js";
|
|
14
|
+
import { encodeCallData } from "./utils/encodeCallData.js";
|
|
15
|
+
import { getNonceKeyWithEncoding } from "./utils/getNonceKey.js";
|
|
16
|
+
import { signMessage } from "./utils/signMessage.js";
|
|
17
|
+
import { signTypedData } from "./utils/signTypedData.js";
|
|
11
18
|
/**
|
|
12
19
|
* The account creation ABI for a kernel smart account (from the KernelFactory)
|
|
13
20
|
*/
|
|
@@ -43,35 +50,110 @@ const createAccountAbi = [
|
|
|
43
50
|
}
|
|
44
51
|
];
|
|
45
52
|
/**
|
|
46
|
-
* Default addresses for kernel smart account
|
|
53
|
+
* Default addresses map for different kernel smart account versions
|
|
47
54
|
*/
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
export const KERNEL_VERSION_TO_ADDRESSES_MAP = {
|
|
56
|
+
"0.2.2": {
|
|
57
|
+
ECDSA_VALIDATOR: "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390",
|
|
58
|
+
ACCOUNT_LOGIC: "0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5",
|
|
59
|
+
FACTORY_ADDRESS: "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3"
|
|
60
|
+
},
|
|
61
|
+
"0.3.0-beta": {
|
|
62
|
+
ECDSA_VALIDATOR: "0x8104e3Ad430EA6d354d013A6789fDFc71E671c43",
|
|
63
|
+
ACCOUNT_LOGIC: "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27",
|
|
64
|
+
FACTORY_ADDRESS: "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
|
|
65
|
+
META_FACTORY_ADDRESS: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5"
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Get supported Kernel Smart Account version based on entryPoint
|
|
70
|
+
* @param entryPoint
|
|
71
|
+
*/
|
|
72
|
+
const getKernelVersion = (entryPoint) => {
|
|
73
|
+
return entryPoint === ENTRYPOINT_ADDRESS_V06 ? "0.2.2" : "0.3.0-beta";
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Get default addresses for Kernel Smart Account based on entryPoint or user input
|
|
77
|
+
* @param entryPointAddress
|
|
78
|
+
* @param ecdsaValidatorAddress
|
|
79
|
+
* @param accountLogicAddress
|
|
80
|
+
* @param factoryAddress
|
|
81
|
+
* @param metaFactoryAddress
|
|
82
|
+
*/
|
|
83
|
+
const getDefaultAddresses = (entryPointAddress, { ecdsaValidatorAddress: _ecdsaValidatorAddress, accountLogicAddress: _accountLogicAddress, factoryAddress: _factoryAddress, metaFactoryAddress: _metaFactoryAddress }) => {
|
|
84
|
+
const kernelVersion = getKernelVersion(entryPointAddress);
|
|
85
|
+
const addresses = KERNEL_VERSION_TO_ADDRESSES_MAP[kernelVersion];
|
|
86
|
+
const ecdsaValidatorAddress = _ecdsaValidatorAddress ?? addresses.ECDSA_VALIDATOR;
|
|
87
|
+
const accountLogicAddress = _accountLogicAddress ?? addresses.ACCOUNT_LOGIC;
|
|
88
|
+
const factoryAddress = _factoryAddress ?? addresses.FACTORY_ADDRESS;
|
|
89
|
+
const metaFactoryAddress = _metaFactoryAddress ?? addresses?.META_FACTORY_ADDRESS ?? zeroAddress; // Meta Factory doesn't exists for Kernel v2.2
|
|
90
|
+
return {
|
|
91
|
+
ecdsaValidatorAddress,
|
|
92
|
+
accountLogicAddress,
|
|
93
|
+
factoryAddress,
|
|
94
|
+
metaFactoryAddress
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
export const getEcdsaRootIdentifierForKernelV3 = (validatorAddress) => {
|
|
98
|
+
return concatHex([VALIDATOR_TYPE.VALIDATOR, validatorAddress]);
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Get the initialization data for a kernel smart account
|
|
102
|
+
* @param entryPoint
|
|
103
|
+
* @param owner
|
|
104
|
+
* @param ecdsaValidatorAddress
|
|
105
|
+
*/
|
|
106
|
+
const getInitialisationData = ({ entryPoint: entryPointAddress, owner, ecdsaValidatorAddress }) => {
|
|
107
|
+
const entryPointVersion = getEntryPointVersion(entryPointAddress);
|
|
108
|
+
if (entryPointVersion === "v0.6") {
|
|
109
|
+
return encodeFunctionData({
|
|
110
|
+
abi: KernelInitAbi,
|
|
111
|
+
functionName: "initialize",
|
|
112
|
+
args: [ecdsaValidatorAddress, owner]
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return encodeFunctionData({
|
|
116
|
+
abi: KernelV3InitAbi,
|
|
117
|
+
functionName: "initialize",
|
|
118
|
+
args: [
|
|
119
|
+
getEcdsaRootIdentifierForKernelV3(ecdsaValidatorAddress),
|
|
120
|
+
zeroAddress /* hookAddress */,
|
|
121
|
+
owner,
|
|
122
|
+
"0x" /* hookData */
|
|
123
|
+
]
|
|
124
|
+
});
|
|
52
125
|
};
|
|
53
126
|
/**
|
|
54
127
|
* Get the account initialization code for a kernel smart account
|
|
128
|
+
* @param entryPoint
|
|
55
129
|
* @param owner
|
|
56
130
|
* @param index
|
|
57
131
|
* @param factoryAddress
|
|
58
132
|
* @param accountLogicAddress
|
|
59
133
|
* @param ecdsaValidatorAddress
|
|
60
134
|
*/
|
|
61
|
-
const getAccountInitCode = async ({ owner, index, accountLogicAddress, ecdsaValidatorAddress }) => {
|
|
135
|
+
const getAccountInitCode = async ({ entryPoint: entryPointAddress, owner, index, factoryAddress, accountLogicAddress, ecdsaValidatorAddress }) => {
|
|
62
136
|
if (!owner)
|
|
63
137
|
throw new Error("Owner account not found");
|
|
138
|
+
const entryPointVersion = getEntryPointVersion(entryPointAddress);
|
|
64
139
|
// Build the account initialization data
|
|
65
|
-
const initialisationData =
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
140
|
+
const initialisationData = getInitialisationData({
|
|
141
|
+
entryPoint: entryPointAddress,
|
|
142
|
+
ecdsaValidatorAddress,
|
|
143
|
+
owner
|
|
69
144
|
});
|
|
70
145
|
// Build the account init code
|
|
146
|
+
if (entryPointVersion === "v0.6") {
|
|
147
|
+
return encodeFunctionData({
|
|
148
|
+
abi: createAccountAbi,
|
|
149
|
+
functionName: "createAccount",
|
|
150
|
+
args: [accountLogicAddress, initialisationData, index]
|
|
151
|
+
});
|
|
152
|
+
}
|
|
71
153
|
return encodeFunctionData({
|
|
72
|
-
abi:
|
|
73
|
-
functionName: "
|
|
74
|
-
args: [
|
|
154
|
+
abi: KernelV3MetaFactoryDeployWithFactoryAbi,
|
|
155
|
+
functionName: "deployWithFactory",
|
|
156
|
+
args: [factoryAddress, initialisationData, toHex(index, { size: 32 })]
|
|
75
157
|
});
|
|
76
158
|
};
|
|
77
159
|
/**
|
|
@@ -82,6 +164,7 @@ const getAccountInitCode = async ({ owner, index, accountLogicAddress, ecdsaVali
|
|
|
82
164
|
* @param ecdsaValidatorAddress
|
|
83
165
|
* @param initCodeProvider
|
|
84
166
|
* @param deployedAccountAddress
|
|
167
|
+
* @param factoryAddress
|
|
85
168
|
*/
|
|
86
169
|
const getAccountAddress = async ({ client, owner, entryPoint: entryPointAddress, initCodeProvider, ecdsaValidatorAddress, deployedAccountAddress, factoryAddress }) => {
|
|
87
170
|
// If we got an already deployed account, ensure it's well deployed, and the validator & signer are correct
|
|
@@ -122,8 +205,16 @@ const getAccountAddress = async ({ client, owner, entryPoint: entryPointAddress,
|
|
|
122
205
|
}
|
|
123
206
|
// Find the init code for this account
|
|
124
207
|
const factoryData = await initCodeProvider();
|
|
208
|
+
const entryPointVersion = getEntryPointVersion(entryPointAddress);
|
|
209
|
+
if (entryPointVersion === "v0.6") {
|
|
210
|
+
return getSenderAddress(client, {
|
|
211
|
+
initCode: concatHex([factoryAddress, factoryData]),
|
|
212
|
+
entryPoint: entryPointAddress
|
|
213
|
+
});
|
|
214
|
+
}
|
|
125
215
|
return getSenderAddress(client, {
|
|
126
|
-
|
|
216
|
+
factory: factoryAddress,
|
|
217
|
+
factoryData: factoryData,
|
|
127
218
|
entryPoint: entryPointAddress
|
|
128
219
|
});
|
|
129
220
|
};
|
|
@@ -138,11 +229,15 @@ const getAccountAddress = async ({ client, owner, entryPoint: entryPointAddress,
|
|
|
138
229
|
* @param ecdsaValidatorAddress
|
|
139
230
|
* @param deployedAccountAddress
|
|
140
231
|
*/
|
|
141
|
-
export async function signerToEcdsaKernelSmartAccount(client, { signer, address, entryPoint: entryPointAddress, index = BigInt(0), factoryAddress
|
|
232
|
+
export async function signerToEcdsaKernelSmartAccount(client, { signer, address, entryPoint: entryPointAddress, index = BigInt(0), factoryAddress: _factoryAddress, metaFactoryAddress: _metaFactoryAddress, accountLogicAddress: _accountLogicAddress, ecdsaValidatorAddress: _ecdsaValidatorAddress, deployedAccountAddress }) {
|
|
142
233
|
const entryPointVersion = getEntryPointVersion(entryPointAddress);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
234
|
+
const kernelVersion = getKernelVersion(entryPointAddress);
|
|
235
|
+
const { accountLogicAddress, ecdsaValidatorAddress, factoryAddress, metaFactoryAddress } = getDefaultAddresses(entryPointAddress, {
|
|
236
|
+
ecdsaValidatorAddress: _ecdsaValidatorAddress,
|
|
237
|
+
accountLogicAddress: _accountLogicAddress,
|
|
238
|
+
factoryAddress: _factoryAddress,
|
|
239
|
+
metaFactoryAddress: _metaFactoryAddress
|
|
240
|
+
});
|
|
146
241
|
// Get the private key related account
|
|
147
242
|
const viemSigner = {
|
|
148
243
|
...signer,
|
|
@@ -152,8 +247,10 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
152
247
|
};
|
|
153
248
|
// Helper to generate the init code for the smart account
|
|
154
249
|
const generateInitCode = () => getAccountInitCode({
|
|
250
|
+
entryPoint: entryPointAddress,
|
|
155
251
|
owner: viemSigner.address,
|
|
156
252
|
index,
|
|
253
|
+
factoryAddress,
|
|
157
254
|
accountLogicAddress,
|
|
158
255
|
ecdsaValidatorAddress
|
|
159
256
|
});
|
|
@@ -167,7 +264,9 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
167
264
|
ecdsaValidatorAddress,
|
|
168
265
|
initCodeProvider: generateInitCode,
|
|
169
266
|
deployedAccountAddress,
|
|
170
|
-
factoryAddress
|
|
267
|
+
factoryAddress: entryPointVersion === "v0.6"
|
|
268
|
+
? factoryAddress
|
|
269
|
+
: metaFactoryAddress
|
|
171
270
|
}),
|
|
172
271
|
client.chain?.id ?? getChainId(client)
|
|
173
272
|
]);
|
|
@@ -177,16 +276,33 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
177
276
|
return toSmartAccount({
|
|
178
277
|
address: accountAddress,
|
|
179
278
|
async signMessage({ message }) {
|
|
180
|
-
|
|
279
|
+
const signature = await signMessage(client, {
|
|
280
|
+
account: viemSigner,
|
|
281
|
+
message,
|
|
282
|
+
accountAddress,
|
|
283
|
+
accountVersion: kernelVersion,
|
|
284
|
+
chainId
|
|
285
|
+
});
|
|
286
|
+
return concatHex([
|
|
287
|
+
getEcdsaRootIdentifierForKernelV3(ecdsaValidatorAddress),
|
|
288
|
+
signature
|
|
289
|
+
]);
|
|
181
290
|
},
|
|
182
291
|
async signTransaction(_, __) {
|
|
183
292
|
throw new SignTransactionNotSupportedBySmartAccount();
|
|
184
293
|
},
|
|
185
294
|
async signTypedData(typedData) {
|
|
186
|
-
|
|
295
|
+
const signature = await signTypedData(client, {
|
|
187
296
|
account: viemSigner,
|
|
188
|
-
...typedData
|
|
297
|
+
...typedData,
|
|
298
|
+
accountAddress,
|
|
299
|
+
accountVersion: kernelVersion,
|
|
300
|
+
chainId
|
|
189
301
|
});
|
|
302
|
+
return concatHex([
|
|
303
|
+
getEcdsaRootIdentifierForKernelV3(ecdsaValidatorAddress),
|
|
304
|
+
signature
|
|
305
|
+
]);
|
|
190
306
|
},
|
|
191
307
|
client: client,
|
|
192
308
|
publicKey: accountAddress,
|
|
@@ -194,9 +310,14 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
194
310
|
source: "kernelEcdsaSmartAccount",
|
|
195
311
|
// Get the nonce of the smart account
|
|
196
312
|
async getNonce() {
|
|
313
|
+
const key = getNonceKeyWithEncoding(kernelVersion, ecdsaValidatorAddress
|
|
314
|
+
// @dev specify the custom nonceKey here when integrating the said feature
|
|
315
|
+
/*, nonceKey */
|
|
316
|
+
);
|
|
197
317
|
return getAccountNonce(client, {
|
|
198
318
|
sender: accountAddress,
|
|
199
|
-
entryPoint: entryPointAddress
|
|
319
|
+
entryPoint: entryPointAddress,
|
|
320
|
+
key
|
|
200
321
|
});
|
|
201
322
|
},
|
|
202
323
|
// Sign a user operation
|
|
@@ -209,12 +330,15 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
209
330
|
entryPoint: entryPointAddress,
|
|
210
331
|
chainId: chainId
|
|
211
332
|
});
|
|
212
|
-
const signature = await
|
|
333
|
+
const signature = await _signMessage(client, {
|
|
213
334
|
account: viemSigner,
|
|
214
335
|
message: { raw: hash }
|
|
215
336
|
});
|
|
216
337
|
// Always use the sudo mode, since we will use external paymaster
|
|
217
|
-
|
|
338
|
+
if (kernelVersion === "0.2.2") {
|
|
339
|
+
return concatHex(["0x00000000", signature]);
|
|
340
|
+
}
|
|
341
|
+
return signature;
|
|
218
342
|
},
|
|
219
343
|
// Encode the init code
|
|
220
344
|
async getInitCode() {
|
|
@@ -223,7 +347,10 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
223
347
|
smartAccountDeployed = await isSmartAccountDeployed(client, accountAddress);
|
|
224
348
|
if (smartAccountDeployed)
|
|
225
349
|
return "0x";
|
|
226
|
-
|
|
350
|
+
const _factoryAddress = entryPointVersion === "v0.6"
|
|
351
|
+
? factoryAddress
|
|
352
|
+
: metaFactoryAddress;
|
|
353
|
+
return concatHex([_factoryAddress, await generateInitCode()]);
|
|
227
354
|
},
|
|
228
355
|
async getFactory() {
|
|
229
356
|
if (smartAccountDeployed)
|
|
@@ -231,7 +358,9 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
231
358
|
smartAccountDeployed = await isSmartAccountDeployed(client, accountAddress);
|
|
232
359
|
if (smartAccountDeployed)
|
|
233
360
|
return undefined;
|
|
234
|
-
return
|
|
361
|
+
return entryPointVersion === "v0.6"
|
|
362
|
+
? factoryAddress
|
|
363
|
+
: metaFactoryAddress;
|
|
235
364
|
},
|
|
236
365
|
async getFactoryData() {
|
|
237
366
|
if (smartAccountDeployed)
|
|
@@ -247,30 +376,14 @@ export async function signerToEcdsaKernelSmartAccount(client, { signer, address,
|
|
|
247
376
|
},
|
|
248
377
|
// Encode a call
|
|
249
378
|
async encodeCallData(_tx) {
|
|
250
|
-
|
|
251
|
-
// Encode a batched call
|
|
252
|
-
return encodeFunctionData({
|
|
253
|
-
abi: KernelExecuteAbi,
|
|
254
|
-
functionName: "executeBatch",
|
|
255
|
-
args: [
|
|
256
|
-
_tx.map((tx) => ({
|
|
257
|
-
to: tx.to,
|
|
258
|
-
value: tx.value,
|
|
259
|
-
data: tx.data
|
|
260
|
-
}))
|
|
261
|
-
]
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
// Encode a simple call
|
|
265
|
-
return encodeFunctionData({
|
|
266
|
-
abi: KernelExecuteAbi,
|
|
267
|
-
functionName: "execute",
|
|
268
|
-
args: [_tx.to, _tx.value, _tx.data, 0]
|
|
269
|
-
});
|
|
379
|
+
return encodeCallData(_tx, kernelVersion);
|
|
270
380
|
},
|
|
271
381
|
// Get simple dummy signature
|
|
272
382
|
async getDummySignature(_userOperation) {
|
|
273
|
-
|
|
383
|
+
if (kernelVersion === "0.2.2") {
|
|
384
|
+
return concatHex([ROOT_MODE_KERNEL_V2, DUMMY_ECDSA_SIGNATURE]);
|
|
385
|
+
}
|
|
386
|
+
return DUMMY_ECDSA_SIGNATURE;
|
|
274
387
|
}
|
|
275
388
|
});
|
|
276
389
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signerToEcdsaKernelSmartAccount.js","sourceRoot":"","sources":["../../../accounts/kernel/signerToEcdsaKernelSmartAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAQH,SAAS,EACT,kBAAkB,EAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"signerToEcdsaKernelSmartAccount.js","sourceRoot":"","sources":["../../../accounts/kernel/signerToEcdsaKernelSmartAccount.ts"],"names":[],"mappings":"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"}
|