@pimlico/alto 0.0.0-main.20240607T104359 → 0.0.0-staging.20240606T093925
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/lib/cli/index.d.ts +0 -1
- package/lib/cli/index.js +0 -1
- package/lib/cli/index.js.map +1 -1
- package/lib/executor/executor.js +0 -6
- package/lib/executor/executor.js.map +1 -1
- package/lib/executor/executorManager.js +0 -1
- package/lib/executor/executorManager.js.map +1 -1
- package/lib/executor/utils.js +1 -3
- package/lib/executor/utils.js.map +1 -1
- package/lib/index.d.ts +5 -1
- package/lib/index.js +120 -1
- package/lib/index.js.map +1 -1
- package/lib/rpc/server.js +1 -2
- package/lib/rpc/server.js.map +1 -1
- package/lib/types/mempool.d.ts +1 -2
- package/package.json +67 -70
- package/esm/cli/alto.d.ts +0 -6
- package/esm/cli/alto.js +0 -92
- package/esm/cli/alto.js.map +0 -1
- package/esm/cli/config/bundler.d.ts +0 -391
- package/esm/cli/config/bundler.js +0 -132
- package/esm/cli/config/bundler.js.map +0 -1
- package/esm/cli/config/index.d.ts +0 -3
- package/esm/cli/config/index.js +0 -3
- package/esm/cli/config/index.js.map +0 -1
- package/esm/cli/config/options.d.ts +0 -11
- package/esm/cli/config/options.js +0 -336
- package/esm/cli/config/options.js.map +0 -1
- package/esm/cli/customTransport.d.ts +0 -14
- package/esm/cli/customTransport.js +0 -53
- package/esm/cli/customTransport.js.map +0 -1
- package/esm/cli/handler.d.ts +0 -3
- package/esm/cli/handler.js +0 -116
- package/esm/cli/handler.js.map +0 -1
- package/esm/cli/index.d.ts +0 -4
- package/esm/cli/index.js +0 -4
- package/esm/cli/index.js.map +0 -1
- package/esm/cli/instrumentation.d.ts +0 -2
- package/esm/cli/instrumentation.js +0 -39
- package/esm/cli/instrumentation.js.map +0 -1
- package/esm/cli/setupServer.d.ts +0 -17
- package/esm/cli/setupServer.js +0 -155
- package/esm/cli/setupServer.js.map +0 -1
- package/esm/cli/util.d.ts +0 -22
- package/esm/cli/util.js +0 -30
- package/esm/cli/util.js.map +0 -1
- package/esm/executor/executor.d.ts +0 -54
- package/esm/executor/executor.js +0 -643
- package/esm/executor/executor.js.map +0 -1
- package/esm/executor/executorManager.d.ts +0 -34
- package/esm/executor/executorManager.js +0 -402
- package/esm/executor/executorManager.js.map +0 -1
- package/esm/executor/index.d.ts +0 -5
- package/esm/executor/index.js +0 -5
- package/esm/executor/index.js.map +0 -1
- package/esm/executor/senderManager.d.ts +0 -17
- package/esm/executor/senderManager.js +0 -160
- package/esm/executor/senderManager.js.map +0 -1
- package/esm/executor/test/utils.d.ts +0 -13
- package/esm/executor/test/utils.js +0 -75
- package/esm/executor/test/utils.js.map +0 -1
- package/esm/executor/utils.d.ts +0 -32
- package/esm/executor/utils.js +0 -241
- package/esm/executor/utils.js.map +0 -1
- package/esm/index.d.ts +0 -2
- package/esm/index.js +0 -2
- package/esm/index.js.map +0 -1
- package/esm/mempool/index.d.ts +0 -5
- package/esm/mempool/index.js +0 -5
- package/esm/mempool/index.js.map +0 -1
- package/esm/mempool/mempool.d.ts +0 -64
- package/esm/mempool/mempool.js +0 -489
- package/esm/mempool/mempool.js.map +0 -1
- package/esm/mempool/monitoring.d.ts +0 -10
- package/esm/mempool/monitoring.js +0 -34
- package/esm/mempool/monitoring.js.map +0 -1
- package/esm/mempool/nullMempool.d.ts +0 -15
- package/esm/mempool/nullMempool.js +0 -36
- package/esm/mempool/nullMempool.js.map +0 -1
- package/esm/mempool/reputationManager.d.ts +0 -115
- package/esm/mempool/reputationManager.js +0 -397
- package/esm/mempool/reputationManager.js.map +0 -1
- package/esm/mempool/store.d.ts +0 -22
- package/esm/mempool/store.js +0 -123
- package/esm/mempool/store.js.map +0 -1
- package/esm/rpc/EntryPointSimulationsV07.d.ts +0 -58
- package/esm/rpc/EntryPointSimulationsV07.js +0 -407
- package/esm/rpc/EntryPointSimulationsV07.js.map +0 -1
- package/esm/rpc/ExecuteSimulator.d.ts +0 -37
- package/esm/rpc/ExecuteSimulator.js +0 -48
- package/esm/rpc/ExecuteSimulator.js.map +0 -1
- package/esm/rpc/gasEstimation.d.ts +0 -17
- package/esm/rpc/gasEstimation.js +0 -410
- package/esm/rpc/gasEstimation.js.map +0 -1
- package/esm/rpc/index.d.ts +0 -5
- package/esm/rpc/index.js +0 -5
- package/esm/rpc/index.js.map +0 -1
- package/esm/rpc/nonceQueuer.d.ts +0 -25
- package/esm/rpc/nonceQueuer.js +0 -135
- package/esm/rpc/nonceQueuer.js.map +0 -1
- package/esm/rpc/rpcHandler.d.ts +0 -64
- package/esm/rpc/rpcHandler.js +0 -727
- package/esm/rpc/rpcHandler.js.map +0 -1
- package/esm/rpc/server.d.ts +0 -31
- package/esm/rpc/server.js +0 -239
- package/esm/rpc/server.js.map +0 -1
- package/esm/rpc/validation/BundlerCollectorTracerV06.d.ts +0 -102
- package/esm/rpc/validation/BundlerCollectorTracerV06.js +0 -255
- package/esm/rpc/validation/BundlerCollectorTracerV06.js.map +0 -1
- package/esm/rpc/validation/BundlerCollectorTracerV07.d.ts +0 -102
- package/esm/rpc/validation/BundlerCollectorTracerV07.js +0 -254
- package/esm/rpc/validation/BundlerCollectorTracerV07.js.map +0 -1
- package/esm/rpc/validation/SafeValidator.d.ts +0 -35
- package/esm/rpc/validation/SafeValidator.js +0 -487
- package/esm/rpc/validation/SafeValidator.js.map +0 -1
- package/esm/rpc/validation/TracerResultParserV06.d.ts +0 -13
- package/esm/rpc/validation/TracerResultParserV06.js +0 -578
- package/esm/rpc/validation/TracerResultParserV06.js.map +0 -1
- package/esm/rpc/validation/TracerResultParserV07.d.ts +0 -33
- package/esm/rpc/validation/TracerResultParserV07.js +0 -557
- package/esm/rpc/validation/TracerResultParserV07.js.map +0 -1
- package/esm/rpc/validation/UnsafeValidator.d.ts +0 -63
- package/esm/rpc/validation/UnsafeValidator.js +0 -257
- package/esm/rpc/validation/UnsafeValidator.js.map +0 -1
- package/esm/rpc/validation/index.d.ts +0 -3
- package/esm/rpc/validation/index.js +0 -3
- package/esm/rpc/validation/index.js.map +0 -1
- package/esm/rpc/validation/tracer.d.ts +0 -122
- package/esm/rpc/validation/tracer.js +0 -82
- package/esm/rpc/validation/tracer.js.map +0 -1
- package/esm/types/contracts/BundleBulker.d.ts +0 -120
- package/esm/types/contracts/BundleBulker.js +0 -157
- package/esm/types/contracts/BundleBulker.js.map +0 -1
- package/esm/types/contracts/CallEngine.d.ts +0 -28
- package/esm/types/contracts/CallEngine.js +0 -37
- package/esm/types/contracts/CallEngine.js.map +0 -1
- package/esm/types/contracts/CodeHashGetter.d.ts +0 -37
- package/esm/types/contracts/CodeHashGetter.js +0 -45
- package/esm/types/contracts/CodeHashGetter.js.map +0 -1
- package/esm/types/contracts/EntryPoint.d.ts +0 -1789
- package/esm/types/contracts/EntryPoint.js +0 -2304
- package/esm/types/contracts/EntryPoint.js.map +0 -1
- package/esm/types/contracts/EntryPointSimulations.d.ts +0 -153
- package/esm/types/contracts/EntryPointSimulations.js +0 -15
- package/esm/types/contracts/EntryPointSimulations.js.map +0 -1
- package/esm/types/contracts/IOpInflator.d.ts +0 -61
- package/esm/types/contracts/IOpInflator.js +0 -80
- package/esm/types/contracts/IOpInflator.js.map +0 -1
- package/esm/types/contracts/IPaymaster.d.ts +0 -3
- package/esm/types/contracts/IPaymaster.js +0 -117
- package/esm/types/contracts/IPaymaster.js.map +0 -1
- package/esm/types/contracts/Inflator.d.ts +0 -65
- package/esm/types/contracts/Inflator.js +0 -84
- package/esm/types/contracts/Inflator.js.map +0 -1
- package/esm/types/contracts/PerOpInflator.d.ts +0 -176
- package/esm/types/contracts/PerOpInflator.js +0 -229
- package/esm/types/contracts/PerOpInflator.js.map +0 -1
- package/esm/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -23
- package/esm/types/contracts/PimlicoEntryPointSimulations.js +0 -33
- package/esm/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
- package/esm/types/contracts/SenderCreator.d.ts +0 -4
- package/esm/types/contracts/SenderCreator.js +0 -23
- package/esm/types/contracts/SenderCreator.js.map +0 -1
- package/esm/types/contracts/SimpleAccountFactory.d.ts +0 -57
- package/esm/types/contracts/SimpleAccountFactory.js +0 -76
- package/esm/types/contracts/SimpleAccountFactory.js.map +0 -1
- package/esm/types/contracts/TestOpcodesAccount.d.ts +0 -4
- package/esm/types/contracts/TestOpcodesAccount.js +0 -281
- package/esm/types/contracts/TestOpcodesAccount.js.map +0 -1
- package/esm/types/contracts/TestOpcodesAccountFactory.d.ts +0 -4
- package/esm/types/contracts/TestOpcodesAccountFactory.js +0 -23
- package/esm/types/contracts/TestOpcodesAccountFactory.js.map +0 -1
- package/esm/types/contracts/TestStorageAccount.d.ts +0 -4
- package/esm/types/contracts/TestStorageAccount.js +0 -313
- package/esm/types/contracts/TestStorageAccount.js.map +0 -1
- package/esm/types/contracts/index.d.ts +0 -17
- package/esm/types/contracts/index.js +0 -17
- package/esm/types/contracts/index.js.map +0 -1
- package/esm/types/gasPrice.d.ts +0 -110
- package/esm/types/gasPrice.js +0 -52
- package/esm/types/gasPrice.js.map +0 -1
- package/esm/types/index.d.ts +0 -11
- package/esm/types/index.js +0 -11
- package/esm/types/index.js.map +0 -1
- package/esm/types/interfaces.d.ts +0 -26
- package/esm/types/interfaces.js +0 -2
- package/esm/types/interfaces.js.map +0 -1
- package/esm/types/mempool.d.ts +0 -79
- package/esm/types/mempool.js +0 -16
- package/esm/types/mempool.js.map +0 -1
- package/esm/types/schemas.d.ts +0 -4791
- package/esm/types/schemas.js +0 -497
- package/esm/types/schemas.js.map +0 -1
- package/esm/types/test/validationTestErrors.d.ts +0 -3
- package/esm/types/test/validationTestErrors.js +0 -229
- package/esm/types/test/validationTestErrors.js.map +0 -1
- package/esm/types/utils.d.ts +0 -24
- package/esm/types/utils.js +0 -30
- package/esm/types/utils.js.map +0 -1
- package/esm/types/validation.d.ts +0 -14327
- package/esm/types/validation.js +0 -304
- package/esm/types/validation.js.map +0 -1
- package/esm/utils/bigInt.d.ts +0 -3
- package/esm/utils/bigInt.js +0 -9
- package/esm/utils/bigInt.js.map +0 -1
- package/esm/utils/compressionHandler.d.ts +0 -11
- package/esm/utils/compressionHandler.js +0 -39
- package/esm/utils/compressionHandler.js.map +0 -1
- package/esm/utils/gasPriceManager.d.ts +0 -34
- package/esm/utils/gasPriceManager.js +0 -338
- package/esm/utils/gasPriceManager.js.map +0 -1
- package/esm/utils/helpers.d.ts +0 -4
- package/esm/utils/helpers.js +0 -13
- package/esm/utils/helpers.js.map +0 -1
- package/esm/utils/index.d.ts +0 -11
- package/esm/utils/index.js +0 -10
- package/esm/utils/index.js.map +0 -1
- package/esm/utils/logger.d.ts +0 -6
- package/esm/utils/logger.js +0 -76
- package/esm/utils/logger.js.map +0 -1
- package/esm/utils/metrics.d.ts +0 -22
- package/esm/utils/metrics.js +0 -150
- package/esm/utils/metrics.js.map +0 -1
- package/esm/utils/rpc-reply.d.ts +0 -17
- package/esm/utils/rpc-reply.js +0 -41
- package/esm/utils/rpc-reply.js.map +0 -1
- package/esm/utils/test.d.ts +0 -17
- package/esm/utils/test.js +0 -130
- package/esm/utils/test.js.map +0 -1
- package/esm/utils/userop.d.ts +0 -49
- package/esm/utils/userop.js +0 -408
- package/esm/utils/userop.js.map +0 -1
- package/esm/utils/validation.d.ts +0 -65
- package/esm/utils/validation.js +0 -461
- package/esm/utils/validation.js.map +0 -1
- package/lib/cli/alto.d.ts +0 -6
- package/lib/cli/alto.js +0 -123
- package/lib/cli/alto.js.map +0 -1
|
@@ -1,578 +0,0 @@
|
|
|
1
|
-
import { EntryPointV06Abi, PaymasterAbi, RpcError, SenderCreatorAbi, ValidationErrors } from "../../types/index.js";
|
|
2
|
-
// This file contains references to validation rules, in the format [xxx-###]
|
|
3
|
-
// where xxx is OP/STO/COD/EP/SREP/EREP/UREP/ALT, and ### is a number
|
|
4
|
-
// the validation rules are defined in erc-aa-validation.md
|
|
5
|
-
import { decodeErrorResult, decodeFunctionResult, getFunctionSelector, hexToBigInt, keccak256, pad } from "viem";
|
|
6
|
-
const abi = [...SenderCreatorAbi, ...EntryPointV06Abi, ...PaymasterAbi];
|
|
7
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
8
|
-
const functionSignatureToMethodName = (hash) => {
|
|
9
|
-
let functionName = undefined;
|
|
10
|
-
for (const item of abi) {
|
|
11
|
-
const signature = getFunctionSelector(item);
|
|
12
|
-
if (signature === hash) {
|
|
13
|
-
functionName = item.name;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
if (functionName === undefined) {
|
|
17
|
-
throw new Error(`Could not find function name for hash ${hash}`);
|
|
18
|
-
}
|
|
19
|
-
return functionName;
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* parse all call operation in the trace.
|
|
23
|
-
* notes:
|
|
24
|
-
* - entries are ordered by the return (so nested call appears before its outer call
|
|
25
|
-
* - last entry is top-level return from "simulateValidation". it as ret and rettype, but no type or address
|
|
26
|
-
* @param tracerResults
|
|
27
|
-
* @param abi
|
|
28
|
-
*/
|
|
29
|
-
function parseCallStack(tracerResults) {
|
|
30
|
-
function callCatch(x, def) {
|
|
31
|
-
try {
|
|
32
|
-
return x();
|
|
33
|
-
}
|
|
34
|
-
catch (_) {
|
|
35
|
-
return def;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
const out = [];
|
|
39
|
-
const stack = [];
|
|
40
|
-
const filteredTracerResultCalls = tracerResults.calls.filter((x) => !x.type.startsWith("depth"));
|
|
41
|
-
for (const c of filteredTracerResultCalls) {
|
|
42
|
-
if (c.type.match(/REVERT|RETURN/) !== null) {
|
|
43
|
-
const top = stack.splice(-1)[0] ?? {
|
|
44
|
-
type: "top",
|
|
45
|
-
method: "validateUserOp"
|
|
46
|
-
};
|
|
47
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
48
|
-
const returnData = c.data;
|
|
49
|
-
if (top.type.match(/CREATE/) !== null) {
|
|
50
|
-
out.push({
|
|
51
|
-
to: top.to,
|
|
52
|
-
from: top.from,
|
|
53
|
-
type: top.type,
|
|
54
|
-
method: "",
|
|
55
|
-
return: `len=${returnData.length}`
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
const method = callCatch(() => functionSignatureToMethodName(top.method), top.method);
|
|
60
|
-
if (c.type === "REVERT") {
|
|
61
|
-
const parsedError = callCatch(() => decodeErrorResult({ abi: abi, data: returnData }), returnData);
|
|
62
|
-
out.push({
|
|
63
|
-
to: top.to,
|
|
64
|
-
from: top.from,
|
|
65
|
-
type: top.type,
|
|
66
|
-
method: method,
|
|
67
|
-
value: top.value,
|
|
68
|
-
revert: parsedError
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const ret = callCatch(() => decodeFunctionResult({
|
|
73
|
-
abi: abi,
|
|
74
|
-
functionName: method,
|
|
75
|
-
data: returnData
|
|
76
|
-
}), returnData);
|
|
77
|
-
out.push({
|
|
78
|
-
to: top.to,
|
|
79
|
-
from: top.from,
|
|
80
|
-
type: top.type,
|
|
81
|
-
value: top.value,
|
|
82
|
-
method: method,
|
|
83
|
-
return: ret
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
stack.push(c);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// TODO: verify that stack is empty at the end.
|
|
93
|
-
return out;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* slots associated with each entity.
|
|
97
|
-
* keccak( A || ...) is associated with "A"
|
|
98
|
-
* removed rule: keccak( ... || ASSOC ) (for a previously associated hash) is also associated with "A"
|
|
99
|
-
*
|
|
100
|
-
* @param stakeInfoEntities stake info for (factory, account, paymaster). factory and paymaster can be null.
|
|
101
|
-
* @param keccak array of buffers that were given to keccak in the transaction
|
|
102
|
-
*/
|
|
103
|
-
function parseEntitySlots(stakeInfoEntities, keccak) {
|
|
104
|
-
// for each entity (sender, factory, paymaster), hold the valid slot addresses
|
|
105
|
-
// valid: the slot was generated by keccak(entity || ...)
|
|
106
|
-
const entitySlots = {};
|
|
107
|
-
for (const k of keccak) {
|
|
108
|
-
const values = Object.values(stakeInfoEntities);
|
|
109
|
-
for (const info of values) {
|
|
110
|
-
const addr = info?.addr?.toLowerCase();
|
|
111
|
-
if (!addr) {
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
const addrPadded = pad(addr).toLowerCase();
|
|
115
|
-
if (!entitySlots[addr]) {
|
|
116
|
-
entitySlots[addr] = new Set();
|
|
117
|
-
}
|
|
118
|
-
const currentEntitySlots = entitySlots[addr];
|
|
119
|
-
// valid slot: the slot was generated by keccak(entityAddr || ...)
|
|
120
|
-
if (k.startsWith(addrPadded)) {
|
|
121
|
-
currentEntitySlots.add(keccak256(k));
|
|
122
|
-
}
|
|
123
|
-
// disabled 2nd rule: .. or by keccak( ... || OWN) where OWN is previous allowed slot
|
|
124
|
-
// if (k.length === 130 && currentEntitySlots.has(k.slice(-64))) {
|
|
125
|
-
// currentEntitySlots.add(value)
|
|
126
|
-
// }
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return entitySlots;
|
|
130
|
-
}
|
|
131
|
-
// method-signature for calls from entryPoint
|
|
132
|
-
const callsFromEntryPointMethodSigs = {
|
|
133
|
-
factory: getFunctionSelector({
|
|
134
|
-
inputs: [
|
|
135
|
-
{
|
|
136
|
-
internalType: "bytes",
|
|
137
|
-
name: "initCode",
|
|
138
|
-
type: "bytes"
|
|
139
|
-
}
|
|
140
|
-
],
|
|
141
|
-
name: "createSender",
|
|
142
|
-
outputs: [
|
|
143
|
-
{
|
|
144
|
-
internalType: "address",
|
|
145
|
-
name: "sender",
|
|
146
|
-
type: "address"
|
|
147
|
-
}
|
|
148
|
-
],
|
|
149
|
-
stateMutability: "nonpayable",
|
|
150
|
-
type: "function"
|
|
151
|
-
}),
|
|
152
|
-
account: getFunctionSelector({
|
|
153
|
-
inputs: [
|
|
154
|
-
{
|
|
155
|
-
components: [
|
|
156
|
-
{
|
|
157
|
-
internalType: "address",
|
|
158
|
-
name: "sender",
|
|
159
|
-
type: "address"
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
internalType: "uint256",
|
|
163
|
-
name: "nonce",
|
|
164
|
-
type: "uint256"
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
internalType: "bytes",
|
|
168
|
-
name: "initCode",
|
|
169
|
-
type: "bytes"
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
internalType: "bytes",
|
|
173
|
-
name: "callData",
|
|
174
|
-
type: "bytes"
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
internalType: "uint256",
|
|
178
|
-
name: "callGasLimit",
|
|
179
|
-
type: "uint256"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
internalType: "uint256",
|
|
183
|
-
name: "verificationGasLimit",
|
|
184
|
-
type: "uint256"
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
internalType: "uint256",
|
|
188
|
-
name: "preVerificationGas",
|
|
189
|
-
type: "uint256"
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
internalType: "uint256",
|
|
193
|
-
name: "maxFeePerGas",
|
|
194
|
-
type: "uint256"
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
internalType: "uint256",
|
|
198
|
-
name: "maxPriorityFeePerGas",
|
|
199
|
-
type: "uint256"
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
internalType: "bytes",
|
|
203
|
-
name: "paymasterAndData",
|
|
204
|
-
type: "bytes"
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
internalType: "bytes",
|
|
208
|
-
name: "signature",
|
|
209
|
-
type: "bytes"
|
|
210
|
-
}
|
|
211
|
-
],
|
|
212
|
-
internalType: "struct UserOperation",
|
|
213
|
-
name: "userOp",
|
|
214
|
-
type: "tuple"
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
internalType: "bytes32",
|
|
218
|
-
name: "",
|
|
219
|
-
type: "bytes32"
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
internalType: "uint256",
|
|
223
|
-
name: "missingAccountFunds",
|
|
224
|
-
type: "uint256"
|
|
225
|
-
}
|
|
226
|
-
],
|
|
227
|
-
name: "validateUserOp",
|
|
228
|
-
outputs: [
|
|
229
|
-
{
|
|
230
|
-
internalType: "uint256",
|
|
231
|
-
name: "",
|
|
232
|
-
type: "uint256"
|
|
233
|
-
}
|
|
234
|
-
],
|
|
235
|
-
stateMutability: "nonpayable",
|
|
236
|
-
type: "function"
|
|
237
|
-
}),
|
|
238
|
-
paymaster: getFunctionSelector({
|
|
239
|
-
inputs: [
|
|
240
|
-
{
|
|
241
|
-
components: [
|
|
242
|
-
{
|
|
243
|
-
internalType: "address",
|
|
244
|
-
name: "sender",
|
|
245
|
-
type: "address"
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
internalType: "uint256",
|
|
249
|
-
name: "nonce",
|
|
250
|
-
type: "uint256"
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
internalType: "bytes",
|
|
254
|
-
name: "initCode",
|
|
255
|
-
type: "bytes"
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
internalType: "bytes",
|
|
259
|
-
name: "callData",
|
|
260
|
-
type: "bytes"
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
internalType: "uint256",
|
|
264
|
-
name: "callGasLimit",
|
|
265
|
-
type: "uint256"
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
internalType: "uint256",
|
|
269
|
-
name: "verificationGasLimit",
|
|
270
|
-
type: "uint256"
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
internalType: "uint256",
|
|
274
|
-
name: "preVerificationGas",
|
|
275
|
-
type: "uint256"
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
internalType: "uint256",
|
|
279
|
-
name: "maxFeePerGas",
|
|
280
|
-
type: "uint256"
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
internalType: "uint256",
|
|
284
|
-
name: "maxPriorityFeePerGas",
|
|
285
|
-
type: "uint256"
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
internalType: "bytes",
|
|
289
|
-
name: "paymasterAndData",
|
|
290
|
-
type: "bytes"
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
internalType: "bytes",
|
|
294
|
-
name: "signature",
|
|
295
|
-
type: "bytes"
|
|
296
|
-
}
|
|
297
|
-
],
|
|
298
|
-
internalType: "struct UserOperation",
|
|
299
|
-
name: "userOp",
|
|
300
|
-
type: "tuple"
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
internalType: "bytes32",
|
|
304
|
-
name: "userOpHash",
|
|
305
|
-
type: "bytes32"
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
internalType: "uint256",
|
|
309
|
-
name: "maxCost",
|
|
310
|
-
type: "uint256"
|
|
311
|
-
}
|
|
312
|
-
],
|
|
313
|
-
name: "validatePaymasterUserOp",
|
|
314
|
-
outputs: [
|
|
315
|
-
{
|
|
316
|
-
internalType: "bytes",
|
|
317
|
-
name: "context",
|
|
318
|
-
type: "bytes"
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
internalType: "uint256",
|
|
322
|
-
name: "validationData",
|
|
323
|
-
type: "uint256"
|
|
324
|
-
}
|
|
325
|
-
],
|
|
326
|
-
stateMutability: "nonpayable",
|
|
327
|
-
type: "function"
|
|
328
|
-
})
|
|
329
|
-
};
|
|
330
|
-
/**
|
|
331
|
-
* parse collected simulation traces and revert if they break our rules
|
|
332
|
-
* @param userOperation the userOperation that was used in this simulation
|
|
333
|
-
* @param tracerResults the tracer return value
|
|
334
|
-
* @param validationResult output from simulateValidation
|
|
335
|
-
* @param entryPoint the entryPoint that hosted the "simulatedValidation" traced call.
|
|
336
|
-
* @return list of contract addresses referenced by this UserOp
|
|
337
|
-
*/
|
|
338
|
-
export function tracerResultParserV06(userOperation, tracerResults, validationResult, entryPointAddress) {
|
|
339
|
-
// todo: block access to no-code addresses (might need update to tracer)
|
|
340
|
-
// opcodes from [OP-011]
|
|
341
|
-
const bannedOpCodes = new Set([
|
|
342
|
-
"GASPRICE",
|
|
343
|
-
"GASLIMIT",
|
|
344
|
-
"DIFFICULTY",
|
|
345
|
-
"TIMESTAMP",
|
|
346
|
-
"BASEFEE",
|
|
347
|
-
"BLOCKHASH",
|
|
348
|
-
"NUMBER",
|
|
349
|
-
"SELFBALANCE",
|
|
350
|
-
"BALANCE",
|
|
351
|
-
"ORIGIN",
|
|
352
|
-
"GAS",
|
|
353
|
-
"CREATE",
|
|
354
|
-
"COINBASE",
|
|
355
|
-
"SELFDESTRUCT",
|
|
356
|
-
"RANDOM",
|
|
357
|
-
"PREVRANDAO",
|
|
358
|
-
"INVALID"
|
|
359
|
-
]);
|
|
360
|
-
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
361
|
-
if (Object.values(tracerResults.callsFromEntryPoint).length < 1) {
|
|
362
|
-
throw new Error("Unexpected traceCall result: no calls from entrypoint.");
|
|
363
|
-
}
|
|
364
|
-
const callStack = parseCallStack(tracerResults);
|
|
365
|
-
// [OP-052], [OP-053]
|
|
366
|
-
const callInfoEntryPoint = callStack.find((call) => call.to === entryPointAddress &&
|
|
367
|
-
call.from !== entryPointAddress &&
|
|
368
|
-
call.method !== "0x" &&
|
|
369
|
-
call.method !== "depositTo");
|
|
370
|
-
// [OP-054]
|
|
371
|
-
if (callInfoEntryPoint) {
|
|
372
|
-
throw new RpcError(`illegal call into EntryPoint during validation ${callInfoEntryPoint?.method}`, ValidationErrors.OpcodeValidation);
|
|
373
|
-
}
|
|
374
|
-
// [OP-061]
|
|
375
|
-
const illegalNonZeroValueCall = callStack.find((call) => call.to !== entryPointAddress &&
|
|
376
|
-
hexToBigInt(call.value ?? "0x0") !== 0n);
|
|
377
|
-
if (illegalNonZeroValueCall) {
|
|
378
|
-
throw new RpcError("May not may CALL with value", ValidationErrors.OpcodeValidation);
|
|
379
|
-
}
|
|
380
|
-
const sender = userOperation.sender.toLowerCase();
|
|
381
|
-
// stake info per "number" level (factory, sender, paymaster)
|
|
382
|
-
// we only use stake info if we notice a memory reference that require stake
|
|
383
|
-
const stakeInfoEntities = {
|
|
384
|
-
factory: validationResult.factoryInfo,
|
|
385
|
-
account: validationResult.senderInfo,
|
|
386
|
-
paymaster: validationResult.paymasterInfo
|
|
387
|
-
};
|
|
388
|
-
const entitySlots = parseEntitySlots(stakeInfoEntities, tracerResults.keccak);
|
|
389
|
-
for (const [title, entStakes] of Object.entries(stakeInfoEntities)) {
|
|
390
|
-
const entityTitle = title;
|
|
391
|
-
const entityAddr = (entStakes?.addr ?? "").toLowerCase();
|
|
392
|
-
const currentNumLevel = tracerResults.callsFromEntryPoint.find((info) => info.topLevelMethodSig ===
|
|
393
|
-
callsFromEntryPointMethodSigs[entityTitle]);
|
|
394
|
-
if (!currentNumLevel) {
|
|
395
|
-
if (entityTitle === "account") {
|
|
396
|
-
// should never happen... only factory, paymaster are optional.
|
|
397
|
-
throw new Error("missing trace into validateUserOp");
|
|
398
|
-
}
|
|
399
|
-
continue;
|
|
400
|
-
}
|
|
401
|
-
const opcodes = currentNumLevel.opcodes;
|
|
402
|
-
const access = currentNumLevel.access;
|
|
403
|
-
// [OP-020]
|
|
404
|
-
if (currentNumLevel.oog ?? false) {
|
|
405
|
-
throw new RpcError(`${entityTitle} internally reverts on oog`, ValidationErrors.OpcodeValidation);
|
|
406
|
-
}
|
|
407
|
-
// opcodes from [OP-011]
|
|
408
|
-
for (const opcode of Object.keys(opcodes)) {
|
|
409
|
-
if (bannedOpCodes.has(opcode)) {
|
|
410
|
-
throw new RpcError(`${entityTitle} uses banned opcode: ${opcode}`, ValidationErrors.OpcodeValidation);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
// [OP-031]
|
|
414
|
-
if (entityTitle === "factory") {
|
|
415
|
-
if ((opcodes.CREATE2 ?? 0) > 1) {
|
|
416
|
-
throw new RpcError(`${entityTitle} with too many CREATE2`, ValidationErrors.OpcodeValidation);
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
else if (opcodes.CREATE2) {
|
|
420
|
-
throw new RpcError(`${entityTitle} uses banned opcode: CREATE2`, ValidationErrors.OpcodeValidation);
|
|
421
|
-
}
|
|
422
|
-
for (const [addr, { reads, writes }] of Object.entries(access)) {
|
|
423
|
-
// testing read/write access on contract "addr"
|
|
424
|
-
if (addr === sender) {
|
|
425
|
-
// allowed to access sender's storage
|
|
426
|
-
// [STO-010]
|
|
427
|
-
continue;
|
|
428
|
-
}
|
|
429
|
-
if (addr === entryPointAddress) {
|
|
430
|
-
// ignore storage access on entryPoint (balance/deposit of entities.
|
|
431
|
-
// we block them on method calls: only allowed to deposit, never to read
|
|
432
|
-
continue;
|
|
433
|
-
}
|
|
434
|
-
// return true if the given slot is associated with the given address, given the known keccak operations:
|
|
435
|
-
// @param slot the SLOAD/SSTORE slot address we're testing
|
|
436
|
-
// @param addr - the address we try to check for association with
|
|
437
|
-
// @param reverseKeccak - a mapping we built for keccak values that contained the address
|
|
438
|
-
function associatedWith(slot, addr, entitySlots) {
|
|
439
|
-
const addrPadded = pad(addr, {
|
|
440
|
-
size: 32
|
|
441
|
-
}).toLowerCase();
|
|
442
|
-
if (slot.toLowerCase() === addrPadded) {
|
|
443
|
-
return true;
|
|
444
|
-
}
|
|
445
|
-
const k = entitySlots[addr];
|
|
446
|
-
if (!k) {
|
|
447
|
-
return false;
|
|
448
|
-
}
|
|
449
|
-
const slotN = hexToBigInt(slot);
|
|
450
|
-
// scan all slot entries to check of the given slot is within a structure, starting at that offset.
|
|
451
|
-
// assume a maximum size on a (static) structure size.
|
|
452
|
-
for (const k1 of k.keys()) {
|
|
453
|
-
const kn = hexToBigInt(k1);
|
|
454
|
-
if (slotN >= kn && slotN < kn + 128n) {
|
|
455
|
-
return true;
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
return false;
|
|
459
|
-
}
|
|
460
|
-
// scan all slots. find a referenced slot
|
|
461
|
-
// at the end of the scan, we will check if the entity has stake, and report that slot if not.
|
|
462
|
-
let requireStakeSlot;
|
|
463
|
-
const slots = [...Object.keys(writes), ...Object.keys(reads)];
|
|
464
|
-
for (const slot of slots) {
|
|
465
|
-
// slot associated with sender is allowed (e.g. token.balanceOf(sender)
|
|
466
|
-
// but during initial UserOp (where there is an initCode), it is allowed only for staked entity
|
|
467
|
-
if (associatedWith(slot, sender, entitySlots)) {
|
|
468
|
-
if (userOperation.initCode.length > 2) {
|
|
469
|
-
// special case: account.validateUserOp is allowed to use assoc storage if factory is staked.
|
|
470
|
-
// [STO-022], [STO-021]
|
|
471
|
-
if (!(entityAddr === sender &&
|
|
472
|
-
isStaked(stakeInfoEntities.factory))) {
|
|
473
|
-
requireStakeSlot = slot;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
else if (associatedWith(slot, entityAddr, entitySlots)) {
|
|
478
|
-
// [STO-032]
|
|
479
|
-
// accessing a slot associated with entityAddr (e.g. token.balanceOf(paymaster)
|
|
480
|
-
requireStakeSlot = slot;
|
|
481
|
-
}
|
|
482
|
-
else if (addr === entityAddr) {
|
|
483
|
-
// [STO-031]
|
|
484
|
-
// accessing storage member of entity itself requires stake.
|
|
485
|
-
requireStakeSlot = slot;
|
|
486
|
-
}
|
|
487
|
-
else if (writes[slot] === undefined) {
|
|
488
|
-
// [STO-033]: staked entity have read-only access to any storage in non-entity contract.
|
|
489
|
-
requireStakeSlot = slot;
|
|
490
|
-
}
|
|
491
|
-
else {
|
|
492
|
-
// accessing arbitrary storage of another contract is not allowed
|
|
493
|
-
const readWrite = Object.keys(writes).includes(addr)
|
|
494
|
-
? "write to"
|
|
495
|
-
: "read from";
|
|
496
|
-
const message = `${entityTitle} has forbidden ${readWrite} ${nameAddr(addr, entityTitle)} slot ${slot}`;
|
|
497
|
-
throw new RpcError(message, ValidationErrors.OpcodeValidation, {
|
|
498
|
-
[entityTitle]: entStakes?.addr
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
// if addr is current account/paymaster/factory, then return that title
|
|
503
|
-
// otherwise, return addr as-is
|
|
504
|
-
function nameAddr(addr, currentEntity) {
|
|
505
|
-
const [title] = Object.entries(stakeInfoEntities).find(([title, info]) => info?.addr?.toLowerCase() === addr.toLowerCase()) ?? [];
|
|
506
|
-
return title ?? addr;
|
|
507
|
-
}
|
|
508
|
-
requireCondAndStake(requireStakeSlot !== undefined, entStakes, `unstaked ${entityTitle} accessed ${nameAddr(addr, entityTitle)} slot ${requireStakeSlot}`);
|
|
509
|
-
}
|
|
510
|
-
// [EREP-050]
|
|
511
|
-
if (entityTitle === "paymaster") {
|
|
512
|
-
const validatePaymasterUserOp = callStack.find((call) => call.method === "validatePaymasterUserOp" &&
|
|
513
|
-
call.to === entityAddr);
|
|
514
|
-
const context = validatePaymasterUserOp?.return
|
|
515
|
-
? validatePaymasterUserOp?.return[0]
|
|
516
|
-
: undefined;
|
|
517
|
-
requireCondAndStake(context && context !== "0x", entStakes, "unstaked paymaster must not return context");
|
|
518
|
-
}
|
|
519
|
-
// check if the given entity is staked
|
|
520
|
-
function isStaked(entStake) {
|
|
521
|
-
return Boolean(entStake &&
|
|
522
|
-
1n <= entStake.stake &&
|
|
523
|
-
1n <= entStake.unstakeDelaySec);
|
|
524
|
-
}
|
|
525
|
-
// helper method: if condition is true, then entity must be staked.
|
|
526
|
-
function requireCondAndStake(cond, entStake, failureMessage) {
|
|
527
|
-
if (!cond) {
|
|
528
|
-
return;
|
|
529
|
-
}
|
|
530
|
-
if (!entStake) {
|
|
531
|
-
throw new Error(`internal: ${entityTitle} not in userOp, but has storage accesses in ${JSON.stringify(access)}`);
|
|
532
|
-
}
|
|
533
|
-
if (!isStaked(entStake)) {
|
|
534
|
-
throw new RpcError(failureMessage, ValidationErrors.OpcodeValidation, {
|
|
535
|
-
[entityTitle]: entStakes?.addr
|
|
536
|
-
});
|
|
537
|
-
}
|
|
538
|
-
// TODO: check real minimum stake values
|
|
539
|
-
}
|
|
540
|
-
// the only contract we allow to access before its deployment is the "sender" itself, which gets created.
|
|
541
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
542
|
-
let illegalZeroCodeAccess;
|
|
543
|
-
for (const addr of Object.keys(currentNumLevel.contractSize)) {
|
|
544
|
-
// [OP-042]
|
|
545
|
-
if (addr !== sender &&
|
|
546
|
-
currentNumLevel.contractSize[addr].contractSize <= 2) {
|
|
547
|
-
illegalZeroCodeAccess = currentNumLevel.contractSize[addr];
|
|
548
|
-
illegalZeroCodeAccess.address = addr;
|
|
549
|
-
break;
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
// [OP-041]
|
|
553
|
-
if (illegalZeroCodeAccess) {
|
|
554
|
-
throw new RpcError(`${entityTitle} accesses un-deployed contract address ${illegalZeroCodeAccess?.address} with opcode ${illegalZeroCodeAccess?.opcode}`, ValidationErrors.OpcodeValidation);
|
|
555
|
-
}
|
|
556
|
-
let illegalEntryPointCodeAccess = undefined;
|
|
557
|
-
for (const addr of Object.keys(currentNumLevel.extCodeAccessInfo)) {
|
|
558
|
-
if (addr === entryPointAddress) {
|
|
559
|
-
illegalEntryPointCodeAccess =
|
|
560
|
-
currentNumLevel.extCodeAccessInfo[addr];
|
|
561
|
-
break;
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
if (illegalEntryPointCodeAccess) {
|
|
565
|
-
throw new RpcError(`${entityTitle} accesses EntryPoint contract address ${entryPointAddress} with opcode ${illegalEntryPointCodeAccess}`, ValidationErrors.OpcodeValidation);
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
// return list of contract addresses by this UserOp. already known not to contain zero-sized addresses.
|
|
569
|
-
const addresses = tracerResults.callsFromEntryPoint.flatMap((level) => Object.keys(level.contractSize));
|
|
570
|
-
const storageMap = {};
|
|
571
|
-
for (const level of tracerResults.callsFromEntryPoint) {
|
|
572
|
-
for (const addr of Object.keys(level.access)) {
|
|
573
|
-
storageMap[addr] = storageMap[addr] ?? level.access[addr].reads;
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
return [addresses, storageMap];
|
|
577
|
-
}
|
|
578
|
-
//# sourceMappingURL=TracerResultParserV06.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TracerResultParserV06.js","sourceRoot":"","sources":["../../../rpc/validation/TracerResultParserV06.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAGhB,gBAAgB,EAGnB,MAAM,aAAa,CAAA;AAEpB,6EAA6E;AAC7E,qEAAqE;AACrE,2DAA2D;AAC3D,OAAO,EAGH,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,GAAG,EACN,MAAM,MAAM,CAAA;AAqBb,MAAM,GAAG,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,GAAG,YAAY,CAAQ,CAAA;AAE9E,kEAAkE;AAClE,MAAM,6BAA6B,GAAG,CAAC,IAAS,EAAE,EAAE;IAChD,IAAI,YAAY,GAAuB,SAAS,CAAA;IAChD,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAmB,CAAC,CAAA;QAC1D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACrB,YAAY,GAAI,IAAoB,CAAC,IAAI,CAAA;QAC7C,CAAC;IACL,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,YAAY,CAAA;AACvB,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,aAAkC;IACtD,SAAS,SAAS,CAAQ,CAAU,EAAE,GAAO;QACzC,IAAI,CAAC;YACD,OAAO,CAAC,EAAE,CAAA;QACd,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,GAAG,CAAA;QACd,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAgB,EAAE,CAAA;IAC3B,MAAM,KAAK,GAAU,EAAE,CAAA;IACvB,MAAM,yBAAyB,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CACrC,CAAA;IAED,KAAK,MAAM,CAAC,IAAI,yBAAyB,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC/B,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,gBAAgB;aAC3B,CAAA;YACD,kEAAkE;YAClE,MAAM,UAAU,GAAS,CAAS,CAAC,IAAI,CAAA;YACvC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,GAAG,CAAC,IAAI,CAAC;oBACL,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,OAAO,UAAU,CAAC,MAAM,EAAE;iBACrC,CAAC,CAAA;YACN,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,SAAS,CACpB,GAAG,EAAE,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAC/C,GAAG,CAAC,MAAM,CACb,CAAA;gBAED,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,MAAM,WAAW,GAAG,SAAS,CACzB,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EACvD,UAAU,CACb,CAAA;oBACD,GAAG,CAAC,IAAI,CAAC;wBACL,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,MAAM,EAAE,MAAM;wBACd,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,WAAW;qBACtB,CAAC,CAAA;gBACN,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,GAAG,SAAS,CACjB,GAAG,EAAE,CACD,oBAAoB,CAAC;wBACjB,GAAG,EAAE,GAAG;wBACR,YAAY,EAAE,MAAM;wBACpB,IAAI,EAAE,UAAU;qBACnB,CAAC,EACN,UAAU,CACb,CAAA;oBACD,GAAG,CAAC,IAAI,CAAC;wBACL,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,GAAG;qBACd,CAAC,CAAA;gBACN,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACL,CAAC;IAED,+CAA+C;IAE/C,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CACrB,iBAAoC,EACpC,MAAa;IAIb,8EAA8E;IAC9E,yDAAyD;IACzD,MAAM,WAAW,GAAoC,EAAE,CAAA;IAEvD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAS,CAAA;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,SAAQ;YACZ,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAU,CAAA;YACzC,CAAC;YAED,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAE5C,kEAAkE;YAClE,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACxC,CAAC;YACD,qFAAqF;YACrF,kEAAkE;YAClE,kCAAkC;YAClC,IAAI;QACR,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAA;AACtB,CAAC;AAED,6CAA6C;AAC7C,MAAM,6BAA6B,GAA8B;IAC7D,OAAO,EAAE,mBAAmB,CAAC;QACzB,MAAM,EAAE;YACJ;gBACI,YAAY,EAAE,OAAO;gBACrB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO;aAChB;SACJ;QACD,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE;YACL;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,eAAe,EAAE,YAAY;QAC7B,IAAI,EAAE,UAAU;KACnB,CAAC;IACF,OAAO,EAAE,mBAAmB,CAAC;QACzB,MAAM,EAAE;YACJ;gBACI,UAAU,EAAE;oBACR;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,sBAAsB;wBAC5B,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,oBAAoB;wBAC1B,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,sBAAsB;wBAC5B,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,kBAAkB;wBACxB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO;qBAChB;iBACJ;gBACD,YAAY,EAAE,sBAAsB;gBACpC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;aAChB;YACD;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE;YACL;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,eAAe,EAAE,YAAY;QAC7B,IAAI,EAAE,UAAU;KACnB,CAAC;IACF,SAAS,EAAE,mBAAmB,CAAC;QAC3B,MAAM,EAAE;YACJ;gBACI,UAAU,EAAE;oBACR;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,sBAAsB;wBAC5B,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,oBAAoB;wBAC1B,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,SAAS;wBACvB,IAAI,EAAE,sBAAsB;wBAC5B,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,kBAAkB;wBACxB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,YAAY,EAAE,OAAO;wBACrB,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO;qBAChB;iBACJ;gBACD,YAAY,EAAE,sBAAsB;gBACpC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;aAChB;YACD;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE;YACL;gBACI,YAAY,EAAE,OAAO;gBACrB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;aAChB;YACD;gBACI,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,eAAe,EAAE,YAAY;QAC7B,IAAI,EAAE,UAAU;KACnB,CAAC;CACL,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACjC,aAA+B,EAC/B,aAAkC,EAClC,gBAAkC,EAClC,iBAA0B;IAE1B,wEAAwE;IAExE,wBAAwB;IACxB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC1B,UAAU;QACV,UAAU;QACV,YAAY;QACZ,WAAW;QACX,SAAS;QACT,WAAW;QACX,QAAQ;QACR,aAAa;QACb,SAAS;QACT,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,UAAU;QACV,cAAc;QACd,QAAQ;QACR,YAAY;QACZ,SAAS;KACZ,CAAC,CAAA;IAEF,gEAAgE;IAChE,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACX,wDAAwD,CAC3D,CAAA;IACL,CAAC;IACD,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;IAE/C,qBAAqB;IACrB,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CACrC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,EAAE,KAAK,iBAAiB;QAC7B,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAC/B,IAAI,CAAC,MAAM,KAAK,IAAI;QACpB,IAAI,CAAC,MAAM,KAAK,WAAW,CAClC,CAAA;IACD,WAAW;IACX,IAAI,kBAAkB,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CACd,kDAAkD,kBAAkB,EAAE,MAAM,EAAE,EAC9E,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;IACL,CAAC;IAED,WAAW;IACX,MAAM,uBAAuB,GAAG,SAAS,CAAC,IAAI,CAC1C,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,EAAE,KAAK,iBAAiB;QAC7B,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAC9C,CAAA;IAED,IAAI,uBAAuB,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CACd,6BAA6B,EAC7B,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;IACL,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;IACjD,6DAA6D;IAC7D,4EAA4E;IAC5E,MAAM,iBAAiB,GAAsB;QACzC,OAAO,EAAE,gBAAgB,CAAC,WAAW;QACrC,OAAO,EAAE,gBAAgB,CAAC,UAAU;QACpC,SAAS,EAAE,gBAAgB,CAAC,aAAa;KAC5C,CAAA;IAED,MAAM,WAAW,GAAoC,gBAAgB,CACjE,iBAAiB,EACjB,aAAa,CAAC,MAAe,CAChC,CAAA;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACjE,MAAM,WAAW,GAAG,KAAgC,CAAA;QACpD,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QACxD,MAAM,eAAe,GAAG,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAC1D,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,iBAAiB;YACtB,6BAA6B,CAAC,WAAW,CAAC,CACjD,CAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC5B,+DAA+D;gBAC/D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACxD,CAAC;YACD,SAAQ;QACZ,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;QACvC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAA;QAErC,WAAW;QACX,IAAI,eAAe,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,QAAQ,CACd,GAAG,WAAW,4BAA4B,EAC1C,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;QACL,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,QAAQ,CACd,GAAG,WAAW,wBAAwB,MAAM,EAAE,EAC9C,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;YACL,CAAC;QACL,CAAC;QACD,WAAW;QACX,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,QAAQ,CACd,GAAG,WAAW,wBAAwB,EACtC,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;YACL,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,QAAQ,CACd,GAAG,WAAW,8BAA8B,EAC5C,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;QACL,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,+CAA+C;YAC/C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAClB,qCAAqC;gBACrC,YAAY;gBACZ,SAAQ;YACZ,CAAC;YAED,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC7B,oEAAoE;gBACpE,wEAAwE;gBACxE,SAAQ;YACZ,CAAC;YAED,yGAAyG;YACzG,0DAA0D;YAC1D,iEAAiE;YACjE,yFAAyF;YACzF,SAAS,cAAc,CACnB,IAAY,EACZ,IAAY,EACZ,WAA4C;gBAE5C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAW,EAAE;oBAChC,IAAI,EAAE,EAAE;iBACX,CAAC,CAAC,WAAW,EAAE,CAAA;gBAChB,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAA;gBACf,CAAC;gBACD,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;gBAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;oBACL,OAAO,KAAK,CAAA;gBAChB,CAAC;gBACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAW,CAAC,CAAA;gBACtC,mGAAmG;gBACnG,sDAAsD;gBACtD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,MAAM,EAAE,GAAG,WAAW,CAAC,EAAS,CAAC,CAAA;oBACjC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;wBACnC,OAAO,IAAI,CAAA;oBACf,CAAC;gBACL,CAAC;gBACD,OAAO,KAAK,CAAA;YAChB,CAAC;YAED,yCAAyC;YACzC,8FAA8F;YAC9F,IAAI,gBAAoC,CAAA;YAExC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YAE7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,uEAAuE;gBACvE,+FAA+F;gBAC/F,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;oBAC5C,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpC,6FAA6F;wBAC7F,uBAAuB;wBACvB,IACI,CAAC,CACG,UAAU,KAAK,MAAM;4BACrB,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CACtC,EACH,CAAC;4BACC,gBAAgB,GAAG,IAAI,CAAA;wBAC3B,CAAC;oBACL,CAAC;gBACL,CAAC;qBAAM,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;oBACvD,YAAY;oBACZ,+EAA+E;oBAC/E,gBAAgB,GAAG,IAAI,CAAA;gBAC3B,CAAC;qBAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC7B,YAAY;oBACZ,4DAA4D;oBAC5D,gBAAgB,GAAG,IAAI,CAAA;gBAC3B,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpC,wFAAwF;oBACxF,gBAAgB,GAAG,IAAI,CAAA;gBAC3B,CAAC;qBAAM,CAAC;oBACJ,iEAAiE;oBACjE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAChD,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,WAAW,CAAA;oBAEjB,MAAM,OAAO,GAAG,GAAG,WAAW,kBAAkB,SAAS,IAAI,QAAQ,CACjE,IAAI,EACJ,WAAW,CACd,SAAS,IAAI,EAAE,CAAA;oBAEhB,MAAM,IAAI,QAAQ,CACd,OAAO,EACP,gBAAgB,CAAC,gBAAgB,EACjC;wBACI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI;qBACjC,CACJ,CAAA;gBACL,CAAC;YACL,CAAC;YAED,uEAAuE;YACvE,+BAA+B;YAC/B,SAAS,QAAQ,CAAC,IAAY,EAAE,aAAqB;gBACjD,MAAM,CAAC,KAAK,CAAC,GACT,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAClC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CACd,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACvD,IAAI,EAAE,CAAA;gBAEX,OAAO,KAAK,IAAI,IAAI,CAAA;YACxB,CAAC;YAED,mBAAmB,CACf,gBAAgB,KAAK,SAAS,EAC9B,SAAS,EACT,YAAY,WAAW,aAAa,QAAQ,CACxC,IAAI,EACJ,WAAW,CACd,SAAS,gBAAgB,EAAE,CAC/B,CAAA;QACL,CAAC;QAED,aAAa;QACb,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,uBAAuB,GAAG,SAAS,CAAC,IAAI,CAC1C,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,MAAM,KAAK,yBAAyB;gBACzC,IAAI,CAAC,EAAE,KAAK,UAAU,CAC7B,CAAA;YACD,MAAM,OAAO,GAAG,uBAAuB,EAAE,MAAM;gBAC3C,CAAC,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAA;YAEf,mBAAmB,CACf,OAAO,IAAI,OAAO,KAAK,IAAI,EAC3B,SAAS,EACT,4CAA4C,CAC/C,CAAA;QACL,CAAC;QAED,sCAAsC;QACtC,SAAS,QAAQ,CAAC,QAAoB;YAClC,OAAO,OAAO,CACV,QAAQ;gBACJ,EAAE,IAAI,QAAQ,CAAC,KAAK;gBACpB,EAAE,IAAI,QAAQ,CAAC,eAAe,CACrC,CAAA;QACL,CAAC;QAED,mEAAmE;QACnE,SAAS,mBAAmB,CACxB,IAAa,EACb,QAA+B,EAC/B,cAAsB;YAEtB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAM;YACV,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACX,aAAa,WAAW,+CAA+C,IAAI,CAAC,SAAS,CACjF,MAAM,CACT,EAAE,CACN,CAAA;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CACd,cAAc,EACd,gBAAgB,CAAC,gBAAgB,EACjC;oBACI,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI;iBACjC,CACJ,CAAA;YACL,CAAC;YAED,wCAAwC;QAC5C,CAAC;QAED,yGAAyG;QACzG,kEAAkE;QAClE,IAAI,qBAA0B,CAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,WAAW;YACX,IACI,IAAI,KAAK,MAAM;gBACf,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,EACtD,CAAC;gBACC,qBAAqB,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;gBAC1D,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAA;gBACpC,MAAK;YACT,CAAC;QACL,CAAC;QACD,WAAW;QACX,IAAI,qBAAqB,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CACd,GAAG,WAAW,0CACV,qBAAqB,EAAE,OAC3B,gBAAgB,qBAAqB,EAAE,MAAgB,EAAE,EACzD,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;QACL,CAAC;QAED,IAAI,2BAA2B,GAAuB,SAAS,CAAA;QAC/D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC7B,2BAA2B;oBACvB,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBAC3C,MAAK;YACT,CAAC;QACL,CAAC;QAED,IAAI,2BAA2B,EAAE,CAAC;YAC9B,MAAM,IAAI,QAAQ,CACd,GAAG,WAAW,yCAAyC,iBAAiB,gBAAgB,2BAA2B,EAAE,EACrH,gBAAgB,CAAC,gBAAgB,CACpC,CAAA;QACL,CAAC;IACL,CAAC;IAED,uGAAuG;IACvG,MAAM,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAClE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAClC,CAAA;IACD,MAAM,UAAU,GAAe,EAAE,CAAA;IACjC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;QACnE,CAAC;IACL,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { type Address, type Hex } from "viem";
|
|
2
|
-
import type { BundlerTracerResult } from "./BundlerCollectorTracerV07.js";
|
|
3
|
-
import { type UserOperationV07, type StakeInfo, type ValidationResultV07, type StorageMap } from "../../types/index.js";
|
|
4
|
-
export type StakeInfoEntities = {
|
|
5
|
-
factory?: StakeInfo;
|
|
6
|
-
account?: StakeInfo;
|
|
7
|
-
paymaster?: StakeInfo;
|
|
8
|
-
};
|
|
9
|
-
export declare function isStaked(entStake?: StakeInfo): boolean;
|
|
10
|
-
export declare function associatedWith(slot: string, addr: string, entitySlots: {
|
|
11
|
-
[addr: string]: Set<string>;
|
|
12
|
-
}): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* slots associated with each entity.
|
|
15
|
-
* keccak( A || ...) is associated with "A"
|
|
16
|
-
* removed rule: keccak( ... || ASSOC ) (for a previously associated hash) is also associated with "A"
|
|
17
|
-
*
|
|
18
|
-
* @param stakeInfoEntities stake info for (factory, account, paymaster). factory and paymaster can be null.
|
|
19
|
-
* @param keccak array of buffers that were given to keccak in the transaction
|
|
20
|
-
*/
|
|
21
|
-
export declare function parseEntitySlots(stakeInfoEntities: StakeInfoEntities, keccak: Hex[]): {
|
|
22
|
-
[addr: string]: Set<string>;
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* parse collected simulation traces and revert if they break our rules
|
|
26
|
-
* @param userOperation the userOperation that was used in this simulation
|
|
27
|
-
* @param tracerResults the tracer return value
|
|
28
|
-
* @param validationResult output from simulateValidation
|
|
29
|
-
* @param entryPoint the entryPoint that hosted the "simulatedValidation" traced call.
|
|
30
|
-
* @return list of contract addresses referenced by this UserOp
|
|
31
|
-
*/
|
|
32
|
-
export declare function tracerResultParserV07(userOperation: UserOperationV07, tracerResults: BundlerTracerResult, validationResult: ValidationResultV07, entryPointAddress: Address): [string[], StorageMap];
|
|
33
|
-
//# sourceMappingURL=TracerResultParserV07.d.ts.map
|