@aztec/sequencer-client 0.26.5 → 0.27.0
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/dest/block_builder/solo_block_builder.d.ts.map +1 -1
- package/dest/block_builder/solo_block_builder.js +12 -28
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -5
- package/dest/index.d.ts +7 -7
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +8 -8
- package/dest/publisher/l1-publisher.d.ts +1 -21
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +1 -55
- package/dest/publisher/viem-tx-sender.d.ts +1 -10
- package/dest/publisher/viem-tx-sender.d.ts.map +1 -1
- package/dest/publisher/viem-tx-sender.js +2 -41
- package/dest/sequencer/abstract_phase_manager.d.ts +12 -15
- package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/abstract_phase_manager.js +32 -24
- package/dest/sequencer/app_logic_phase_manager.d.ts +1 -6
- package/dest/sequencer/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/app_logic_phase_manager.js +11 -8
- package/dest/sequencer/hints_builder.d.ts +13 -0
- package/dest/sequencer/hints_builder.d.ts.map +1 -0
- package/dest/sequencer/hints_builder.js +21 -0
- package/dest/sequencer/index.d.ts +1 -1
- package/dest/sequencer/index.d.ts.map +1 -1
- package/dest/sequencer/index.js +2 -2
- package/dest/sequencer/phase_manager_factory.d.ts.map +1 -1
- package/dest/sequencer/phase_manager_factory.js +5 -1
- package/dest/sequencer/processed_tx.d.ts +38 -3
- package/dest/sequencer/processed_tx.d.ts.map +1 -1
- package/dest/sequencer/processed_tx.js +66 -10
- package/dest/sequencer/public_processor.d.ts.map +1 -1
- package/dest/sequencer/public_processor.js +15 -9
- package/dest/sequencer/sequencer.d.ts +0 -6
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +1 -27
- package/dest/sequencer/setup_phase_manager.d.ts +1 -6
- package/dest/sequencer/setup_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/setup_phase_manager.js +3 -5
- package/dest/sequencer/tail_phase_manager.d.ts +28 -0
- package/dest/sequencer/tail_phase_manager.d.ts.map +1 -0
- package/dest/sequencer/tail_phase_manager.js +32 -0
- package/dest/sequencer/teardown_phase_manager.d.ts +1 -6
- package/dest/sequencer/teardown_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/teardown_phase_manager.js +3 -4
- package/dest/simulator/index.d.ts +7 -1
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/index.js +1 -1
- package/dest/simulator/public_executor.d.ts.map +1 -1
- package/dest/simulator/public_executor.js +1 -15
- package/dest/simulator/public_kernel.d.ts +7 -1
- package/dest/simulator/public_kernel.d.ts.map +1 -1
- package/dest/simulator/public_kernel.js +22 -4
- package/package.json +13 -13
- package/src/block_builder/solo_block_builder.ts +17 -77
- package/src/config.ts +0 -4
- package/src/index.ts +7 -7
- package/src/publisher/l1-publisher.ts +1 -85
- package/src/publisher/viem-tx-sender.ts +2 -52
- package/src/sequencer/abstract_phase_manager.ts +58 -48
- package/src/sequencer/app_logic_phase_manager.ts +12 -22
- package/src/sequencer/hints_builder.ts +56 -0
- package/src/sequencer/index.ts +1 -1
- package/src/sequencer/phase_manager_factory.ts +12 -0
- package/src/sequencer/processed_tx.ts +133 -19
- package/src/sequencer/public_processor.ts +25 -13
- package/src/sequencer/sequencer.ts +0 -36
- package/src/sequencer/setup_phase_manager.ts +5 -19
- package/src/sequencer/tail_phase_manager.ts +49 -0
- package/src/sequencer/teardown_phase_manager.ts +5 -18
- package/src/simulator/index.ts +7 -0
- package/src/simulator/public_executor.ts +0 -20
- package/src/simulator/public_kernel.ts +35 -5
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { BLOB_SIZE_IN_BYTES } from '@aztec/circuits.js/constants';
|
|
2
1
|
import { createEthereumChain } from '@aztec/ethereum';
|
|
3
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
-
import { AvailabilityOracleAbi,
|
|
3
|
+
import { AvailabilityOracleAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
5
4
|
import { createPublicClient, createWalletClient, getAddress, getContract, hexToBytes, http, } from 'viem';
|
|
6
5
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
7
6
|
import * as chains from 'viem/chains';
|
|
@@ -33,11 +32,6 @@ export class ViemTxSender {
|
|
|
33
32
|
abi: RollupAbi,
|
|
34
33
|
client: walletClient,
|
|
35
34
|
});
|
|
36
|
-
this.contractDeploymentEmitterContract = getContract({
|
|
37
|
-
address: getAddress(l1Contracts.contractDeploymentEmitterAddress.toString()),
|
|
38
|
-
abi: ContractDeploymentEmitterAbi,
|
|
39
|
-
client: walletClient,
|
|
40
|
-
});
|
|
41
35
|
}
|
|
42
36
|
async getCurrentArchive() {
|
|
43
37
|
const archive = await this.rollupContract.read.archive();
|
|
@@ -117,39 +111,6 @@ export class ViemTxSender {
|
|
|
117
111
|
});
|
|
118
112
|
return hash;
|
|
119
113
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Sends a tx to the contract deployment emitter contract with contract deployment data such as bytecode. Returns once the tx has been mined.
|
|
122
|
-
* @param l2BlockNum - Number of the L2 block that owns this encrypted logs.
|
|
123
|
-
* @param l2BlockHash - The hash of the block corresponding to this data.
|
|
124
|
-
* @param newExtendedContractData - Data to publish.
|
|
125
|
-
* @returns The hash of the mined tx.
|
|
126
|
-
*/
|
|
127
|
-
async sendEmitContractDeploymentTx(l2BlockNum, l2BlockHash, newExtendedContractData) {
|
|
128
|
-
const hashes = [];
|
|
129
|
-
for (const extendedContractData of newExtendedContractData) {
|
|
130
|
-
const args = [
|
|
131
|
-
BigInt(l2BlockNum),
|
|
132
|
-
extendedContractData.contractData.contractAddress.toString(),
|
|
133
|
-
extendedContractData.contractData.portalContractAddress.toString(),
|
|
134
|
-
`0x${l2BlockHash.toString('hex')}`,
|
|
135
|
-
extendedContractData.contractClassId.toString(),
|
|
136
|
-
extendedContractData.saltedInitializationHash.toString(),
|
|
137
|
-
extendedContractData.publicKeyHash.toString(),
|
|
138
|
-
`0x${extendedContractData.bytecode.toString('hex')}`,
|
|
139
|
-
];
|
|
140
|
-
const codeSize = extendedContractData.bytecode.length;
|
|
141
|
-
this.log(`Bytecode is ${codeSize} bytes and require ${codeSize / BLOB_SIZE_IN_BYTES} blobs`);
|
|
142
|
-
const gas = await this.contractDeploymentEmitterContract.estimateGas.emitContractDeployment(args, {
|
|
143
|
-
account: this.account,
|
|
144
|
-
});
|
|
145
|
-
const hash = await this.contractDeploymentEmitterContract.write.emitContractDeployment(args, {
|
|
146
|
-
gas,
|
|
147
|
-
account: this.account,
|
|
148
|
-
});
|
|
149
|
-
hashes.push(hash);
|
|
150
|
-
}
|
|
151
|
-
return hashes;
|
|
152
|
-
}
|
|
153
114
|
/**
|
|
154
115
|
* Gets the chain object for the given chain id.
|
|
155
116
|
* @param chainId - Chain id of the target EVM chain.
|
|
@@ -172,4 +133,4 @@ export class ViemTxSender {
|
|
|
172
133
|
function getCalldataGasUsage(data) {
|
|
173
134
|
return data.filter(byte => byte === 0).length * 4 + data.filter(byte => byte !== 0).length * 16;
|
|
174
135
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmllbS10eC1zZW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL3ZpZW0tdHgtc2VuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBTUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsRUFDVixJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBVXRDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFjdkIsWUFBWSxNQUFzQjtRQUoxQixRQUFHLEdBQUcsaUJBQWlCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUtoRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztZQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENB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
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { FunctionL2Logs, Tx } from '@aztec/circuit-types';
|
|
1
|
+
import { FunctionL2Logs, SimulationError, Tx } from '@aztec/circuit-types';
|
|
2
2
|
import { Fr, GlobalVariables, Header, PrivateKernelTailCircuitPublicInputs, Proof, PublicCallData, PublicCallRequest, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelCircuitPublicInputs, PublicKernelData } from '@aztec/circuits.js';
|
|
3
3
|
import { DebugLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { PublicExecutionResult, PublicExecutor } from '@aztec/simulator';
|
|
5
5
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
6
6
|
import { PublicProver } from '../prover/index.js';
|
|
7
7
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
8
|
+
import { HintsBuilder } from './hints_builder.js';
|
|
8
9
|
import { FailedTx } from './processed_tx.js';
|
|
9
10
|
export declare enum PublicKernelPhase {
|
|
10
11
|
SETUP = "setup",
|
|
11
12
|
APP_LOGIC = "app-logic",
|
|
12
|
-
TEARDOWN = "teardown"
|
|
13
|
+
TEARDOWN = "teardown",
|
|
14
|
+
TAIL = "tail"
|
|
13
15
|
}
|
|
14
16
|
export declare const PhaseIsRevertible: Record<PublicKernelPhase, boolean>;
|
|
15
17
|
export declare abstract class AbstractPhaseManager {
|
|
@@ -20,6 +22,7 @@ export declare abstract class AbstractPhaseManager {
|
|
|
20
22
|
protected globalVariables: GlobalVariables;
|
|
21
23
|
protected historicalHeader: Header;
|
|
22
24
|
phase: PublicKernelPhase;
|
|
25
|
+
protected hintsBuilder: HintsBuilder;
|
|
23
26
|
protected log: DebugLogger;
|
|
24
27
|
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, phase: PublicKernelPhase);
|
|
25
28
|
/**
|
|
@@ -37,23 +40,17 @@ export declare abstract class AbstractPhaseManager {
|
|
|
37
40
|
* the proof of the public kernel circuit for this phase
|
|
38
41
|
*/
|
|
39
42
|
publicKernelProof: Proof;
|
|
43
|
+
/**
|
|
44
|
+
* revert reason, if any
|
|
45
|
+
*/
|
|
46
|
+
revertReason: SimulationError | undefined;
|
|
40
47
|
}>;
|
|
41
48
|
abstract rollback(tx: Tx, err: unknown): Promise<FailedTx>;
|
|
42
49
|
static extractEnqueuedPublicCallsByPhase(publicInputs: PrivateKernelTailCircuitPublicInputs, enqueuedPublicFunctionCalls: PublicCallRequest[]): Record<PublicKernelPhase, PublicCallRequest[]>;
|
|
43
50
|
protected extractEnqueuedPublicCalls(tx: Tx): PublicCallRequest[];
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
publicKernelPublicInput: PublicKernelCircuitPublicInputs;
|
|
49
|
-
/**
|
|
50
|
-
* the proof of the public kernel circuit for this phase
|
|
51
|
-
*/
|
|
52
|
-
publicKernelProof: Proof;
|
|
53
|
-
};
|
|
54
|
-
protected processEnqueuedPublicCalls(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<[PublicKernelCircuitPublicInputs, Proof, FunctionL2Logs[]]>;
|
|
55
|
-
protected runKernelCircuit(callData: PublicCallData, previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): Promise<[PublicKernelCircuitPublicInputs, Proof]>;
|
|
56
|
-
protected getKernelCircuitOutput(callData: PublicCallData, previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): Promise<PublicKernelCircuitPublicInputs>;
|
|
51
|
+
protected processEnqueuedPublicCalls(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<[PublicKernelCircuitPublicInputs, Proof, FunctionL2Logs[], SimulationError | undefined]>;
|
|
52
|
+
protected runKernelCircuit(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof, callData?: PublicCallData): Promise<[PublicKernelCircuitPublicInputs, Proof]>;
|
|
53
|
+
protected getKernelCircuitOutput(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof, callData?: PublicCallData): Promise<PublicKernelCircuitPublicInputs>;
|
|
57
54
|
protected getPreviousKernelData(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): PublicKernelData;
|
|
58
55
|
protected getPublicCircuitPublicInputs(result: PublicExecutionResult): Promise<PublicCircuitPublicInputs>;
|
|
59
56
|
protected getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallStackItem>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/abstract_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,EAAE,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/abstract_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,eAAe,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAKL,EAAE,EACF,eAAe,EACf,MAAM,EAcN,oCAAoC,EACpC,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EAIzB,+BAA+B,EAC/B,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAEL,qBAAqB,EACrB,cAAc,EAIf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAK1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAKhE,CAAC;AAEF,8BAAsB,oBAAoB;IAItC,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAC3B,KAAK,EAAE,iBAAiB;IATjC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;gBAEf,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EAC3B,KAAK,EAAE,iBAAiB;IAKjC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CACb,EAAE,EAAE,EAAE,EACN,wBAAwB,EAAE,+BAA+B,EACzD,yBAAyB,EAAE,KAAK,GAC/B,OAAO,CAAC;QACT;;WAEG;QACH,kBAAkB,EAAE,+BAA+B,CAAC;QACpD;;WAEG;QACH,iBAAiB,EAAE,KAAK,CAAC;QACzB;;WAEG;QACH,YAAY,EAAE,eAAe,GAAG,SAAS,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;WAE5C,iCAAiC,CAC7C,YAAY,EAAE,oCAAoC,EAClD,2BAA2B,EAAE,iBAAiB,EAAE,GAC/C,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IA6CjD,SAAS,CAAC,0BAA0B,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,EAAE;cAQjD,0BAA0B,CACxC,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK,GAC/B,OAAO,CAAC,CAAC,+BAA+B,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,eAAe,GAAG,SAAS,CAAC,CAAC;cAsEnF,gBAAgB,CAC9B,cAAc,EAAE,+BAA+B,EAC/C,aAAa,EAAE,KAAK,EACpB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;cAMpC,sBAAsB,CACpC,cAAc,EAAE,+BAA+B,EAC/C,aAAa,EAAE,KAAK,EACpB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,+BAA+B,CAAC;IAgC3C,SAAS,CAAC,qBAAqB,CAC7B,cAAc,EAAE,+BAA+B,EAC/C,aAAa,EAAE,KAAK,GACnB,gBAAgB;cAOH,4BAA4B,CAAC,MAAM,EAAE,qBAAqB;cA8C1D,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,UAAQ;cAShF,2BAA2B,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAW1G,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,qBAAqB;IAOxD;;;;;;;OAOG;cACa,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,UAAQ;CAW5F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress, CallRequest, ContractStorageRead, ContractStorageUpdateRequest, Fr, L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX, MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX, MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness,
|
|
2
|
+
import { AztecAddress, CallRequest, ContractStorageRead, ContractStorageUpdateRequest, Fr, L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX, MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX, MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelCircuitPrivateInputs, PublicKernelData, PublicKernelTailCircuitPrivateInputs, RETURN_VALUES_LENGTH, ReadRequest, SideEffect, SideEffectLinkedToNoteHash, VK_TREE_HEIGHT, } from '@aztec/circuits.js';
|
|
3
3
|
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
4
4
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
@@ -7,16 +7,19 @@ import { to2Fields } from '@aztec/foundation/serialize';
|
|
|
7
7
|
import { collectPublicDataReads, collectPublicDataUpdateRequests, isPublicExecutionResult, } from '@aztec/simulator';
|
|
8
8
|
import { env } from 'process';
|
|
9
9
|
import { getVerificationKeys } from '../mocks/verification_keys.js';
|
|
10
|
+
import { HintsBuilder } from './hints_builder.js';
|
|
10
11
|
export var PublicKernelPhase;
|
|
11
12
|
(function (PublicKernelPhase) {
|
|
12
13
|
PublicKernelPhase["SETUP"] = "setup";
|
|
13
14
|
PublicKernelPhase["APP_LOGIC"] = "app-logic";
|
|
14
15
|
PublicKernelPhase["TEARDOWN"] = "teardown";
|
|
16
|
+
PublicKernelPhase["TAIL"] = "tail";
|
|
15
17
|
})(PublicKernelPhase || (PublicKernelPhase = {}));
|
|
16
18
|
export const PhaseIsRevertible = {
|
|
17
19
|
[PublicKernelPhase.SETUP]: false,
|
|
18
20
|
[PublicKernelPhase.APP_LOGIC]: true,
|
|
19
21
|
[PublicKernelPhase.TEARDOWN]: false,
|
|
22
|
+
[PublicKernelPhase.TAIL]: false,
|
|
20
23
|
};
|
|
21
24
|
export class AbstractPhaseManager {
|
|
22
25
|
constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, phase) {
|
|
@@ -27,6 +30,7 @@ export class AbstractPhaseManager {
|
|
|
27
30
|
this.globalVariables = globalVariables;
|
|
28
31
|
this.historicalHeader = historicalHeader;
|
|
29
32
|
this.phase = phase;
|
|
33
|
+
this.hintsBuilder = new HintsBuilder(db);
|
|
30
34
|
this.log = createDebugLogger(`aztec:sequencer:${phase}`);
|
|
31
35
|
}
|
|
32
36
|
static extractEnqueuedPublicCallsByPhase(publicInputs, enqueuedPublicFunctionCalls) {
|
|
@@ -45,6 +49,7 @@ export class AbstractPhaseManager {
|
|
|
45
49
|
[PublicKernelPhase.SETUP]: [],
|
|
46
50
|
[PublicKernelPhase.APP_LOGIC]: [],
|
|
47
51
|
[PublicKernelPhase.TEARDOWN]: [],
|
|
52
|
+
[PublicKernelPhase.TAIL]: [],
|
|
48
53
|
};
|
|
49
54
|
}
|
|
50
55
|
// find the first call that is revertible
|
|
@@ -54,6 +59,7 @@ export class AbstractPhaseManager {
|
|
|
54
59
|
[PublicKernelPhase.SETUP]: [],
|
|
55
60
|
[PublicKernelPhase.APP_LOGIC]: publicCallsStack,
|
|
56
61
|
[PublicKernelPhase.TEARDOWN]: [],
|
|
62
|
+
[PublicKernelPhase.TAIL]: [],
|
|
57
63
|
};
|
|
58
64
|
}
|
|
59
65
|
else {
|
|
@@ -61,6 +67,7 @@ export class AbstractPhaseManager {
|
|
|
61
67
|
[PublicKernelPhase.SETUP]: publicCallsStack.slice(0, firstRevertibleCallIndex - 1),
|
|
62
68
|
[PublicKernelPhase.APP_LOGIC]: publicCallsStack.slice(firstRevertibleCallIndex),
|
|
63
69
|
[PublicKernelPhase.TEARDOWN]: [publicCallsStack[firstRevertibleCallIndex - 1]],
|
|
70
|
+
[PublicKernelPhase.TAIL]: [],
|
|
64
71
|
};
|
|
65
72
|
}
|
|
66
73
|
}
|
|
@@ -68,28 +75,12 @@ export class AbstractPhaseManager {
|
|
|
68
75
|
const calls = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls)[this.phase];
|
|
69
76
|
return calls;
|
|
70
77
|
}
|
|
71
|
-
static getKernelOutputAndProof(tx, publicKernelPublicInput, previousPublicKernelProof) {
|
|
72
|
-
if (publicKernelPublicInput && previousPublicKernelProof) {
|
|
73
|
-
return {
|
|
74
|
-
publicKernelPublicInput: publicKernelPublicInput,
|
|
75
|
-
publicKernelProof: previousPublicKernelProof,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
const publicKernelPublicInput = new PublicKernelCircuitPublicInputs(tx.data.aggregationObject, PublicAccumulatedNonRevertibleData.fromPrivateAccumulatedNonRevertibleData(tx.data.endNonRevertibleData), PublicAccumulatedRevertibleData.fromPrivateAccumulatedRevertibleData(tx.data.end), tx.data.constants, tx.data.needsSetup, tx.data.needsAppLogic, tx.data.needsTeardown);
|
|
80
|
-
const publicKernelProof = previousPublicKernelProof || tx.proof;
|
|
81
|
-
return {
|
|
82
|
-
publicKernelPublicInput,
|
|
83
|
-
publicKernelProof,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
78
|
async processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof) {
|
|
88
79
|
let kernelOutput = previousPublicKernelOutput;
|
|
89
80
|
let kernelProof = previousPublicKernelProof;
|
|
90
81
|
const enqueuedCalls = this.extractEnqueuedPublicCalls(tx);
|
|
91
82
|
if (!enqueuedCalls || !enqueuedCalls.length) {
|
|
92
|
-
return [kernelOutput, kernelProof, []];
|
|
83
|
+
return [kernelOutput, kernelProof, [], undefined];
|
|
93
84
|
}
|
|
94
85
|
const newUnencryptedFunctionLogs = [];
|
|
95
86
|
// TODO(#1684): Should multiple separately enqueued public calls be treated as
|
|
@@ -112,7 +103,13 @@ export class AbstractPhaseManager {
|
|
|
112
103
|
this.log.debug(`Running public kernel circuit for ${result.execution.contractAddress.toString()}:${functionSelector}`);
|
|
113
104
|
executionStack.push(...result.nestedExecutions);
|
|
114
105
|
const callData = await this.getPublicCallData(result, isExecutionRequest);
|
|
115
|
-
[kernelOutput, kernelProof] = await this.runKernelCircuit(
|
|
106
|
+
[kernelOutput, kernelProof] = await this.runKernelCircuit(kernelOutput, kernelProof, callData);
|
|
107
|
+
if (kernelOutput.reverted && this.phase === PublicKernelPhase.APP_LOGIC) {
|
|
108
|
+
this.log.debug(`Reverting on ${result.execution.contractAddress.toString()}:${functionSelector} with reason: ${result.revertReason}`);
|
|
109
|
+
// halt immediately if the public kernel circuit has reverted.
|
|
110
|
+
// return no logs, as they should not go on-chain.
|
|
111
|
+
return [kernelOutput, kernelProof, [], result.revertReason];
|
|
112
|
+
}
|
|
116
113
|
if (!enqueuedExecutionResult) {
|
|
117
114
|
enqueuedExecutionResult = result;
|
|
118
115
|
}
|
|
@@ -123,15 +120,24 @@ export class AbstractPhaseManager {
|
|
|
123
120
|
}
|
|
124
121
|
// TODO(#3675): This should be done in a public kernel circuit
|
|
125
122
|
removeRedundantPublicDataWrites(kernelOutput);
|
|
126
|
-
return [kernelOutput, kernelProof, newUnencryptedFunctionLogs];
|
|
123
|
+
return [kernelOutput, kernelProof, newUnencryptedFunctionLogs, undefined];
|
|
127
124
|
}
|
|
128
|
-
async runKernelCircuit(
|
|
129
|
-
const output = await this.getKernelCircuitOutput(
|
|
125
|
+
async runKernelCircuit(previousOutput, previousProof, callData) {
|
|
126
|
+
const output = await this.getKernelCircuitOutput(previousOutput, previousProof, callData);
|
|
130
127
|
const proof = await this.publicProver.getPublicKernelCircuitProof(output);
|
|
131
128
|
return [output, proof];
|
|
132
129
|
}
|
|
133
|
-
getKernelCircuitOutput(
|
|
130
|
+
async getKernelCircuitOutput(previousOutput, previousProof, callData) {
|
|
134
131
|
const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
|
|
132
|
+
if (this.phase === PublicKernelPhase.TAIL) {
|
|
133
|
+
const { endNonRevertibleData, end } = previousOutput;
|
|
134
|
+
const nullifierReadRequestResetHints = await this.hintsBuilder.getNullifierReadRequestResetHints(endNonRevertibleData.nullifierReadRequests, end.nullifierReadRequests, endNonRevertibleData.newNullifiers, end.newNullifiers);
|
|
135
|
+
const inputs = new PublicKernelTailCircuitPrivateInputs(previousKernel, nullifierReadRequestResetHints);
|
|
136
|
+
return this.publicKernel.publicKernelCircuitTail(inputs);
|
|
137
|
+
}
|
|
138
|
+
if (!callData) {
|
|
139
|
+
throw new Error(`Cannot run public kernel circuit without call data for phase '${this.phase}'.`);
|
|
140
|
+
}
|
|
135
141
|
const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData);
|
|
136
142
|
switch (this.phase) {
|
|
137
143
|
case PublicKernelPhase.SETUP:
|
|
@@ -166,12 +172,14 @@ export class AbstractPhaseManager {
|
|
|
166
172
|
newNullifiers: padArrayEnd(result.newNullifiers, SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_CALL),
|
|
167
173
|
newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages, L2ToL1Message.empty(), MAX_NEW_L2_TO_L1_MSGS_PER_CALL),
|
|
168
174
|
returnValues: padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH),
|
|
175
|
+
nullifierReadRequests: padArrayEnd(result.nullifierReadRequests, ReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_CALL),
|
|
169
176
|
contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL),
|
|
170
177
|
contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL),
|
|
171
178
|
publicCallStackHashes,
|
|
172
179
|
unencryptedLogsHash,
|
|
173
180
|
unencryptedLogPreimagesLength,
|
|
174
181
|
historicalHeader: this.historicalHeader,
|
|
182
|
+
reverted: result.reverted,
|
|
175
183
|
});
|
|
176
184
|
}
|
|
177
185
|
async getPublicCallStackItem(result, isExecutionRequest = false) {
|
|
@@ -277,4 +285,4 @@ function patchPublicStorageActionOrdering(publicInputs, execResult, phase) {
|
|
|
277
285
|
? MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
|
|
278
286
|
: MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
279
287
|
}
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFlBQVksRUFBTSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUdGLGFBQWEsRUFDYiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQiwyQ0FBMkMsRUFDM0MscURBQXFELEVBQ3JELHFDQUFxQyxFQUNyQyw4QkFBOEIsRUFDOUIsd0NBQXdDLEVBQ3hDLHVDQUF1QyxFQUN2QyxpREFBaUQsRUFDakQsaUJBQWlCLEVBR2pCLGtDQUFrQyxFQUNsQywrQkFBK0IsRUFDL0IsY0FBYyxFQUVkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFTLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFJTCxzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLHVCQUF1QixHQUN4QixNQUFNLGtCQUFrQixDQUFDO0FBRzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxTQUFTLENB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
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFlBQVksRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLEVBQUUsRUFHRixhQUFhLEVBQ2IsOEJBQThCLEVBQzlCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsMkNBQTJDLEVBQzNDLHFEQUFxRCxFQUNyRCxvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5Qix3Q0FBd0MsRUFDeEMsdUNBQXVDLEVBQ3ZDLGlEQUFpRCxFQUNqRCxpQkFBaUIsRUFHakIsY0FBYyxFQUVkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFFaEMsZ0JBQWdCLEVBQ2hCLG9DQUFvQyxFQUNwQyxvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLFVBQVUsRUFDViwwQkFBMEIsRUFDMUIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBUyxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBSUwsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUMvQix1QkFBdUIsR0FDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sU0FBUyxDQUFD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
|
|
@@ -22,14 +22,9 @@ export declare class AppLogicPhaseManager extends AbstractPhaseManager {
|
|
|
22
22
|
phase: PublicKernelPhase;
|
|
23
23
|
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
|
|
24
24
|
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
|
|
25
|
-
/**
|
|
26
|
-
* the output of the public kernel circuit for this phase
|
|
27
|
-
*/
|
|
28
25
|
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
29
|
-
/**
|
|
30
|
-
* the proof of the public kernel circuit for this phase
|
|
31
|
-
*/
|
|
32
26
|
publicKernelProof: Proof;
|
|
27
|
+
revertReason: import("@aztec/circuit-types").SimulationError | undefined;
|
|
33
28
|
}>;
|
|
34
29
|
rollback(tx: Tx, err: unknown): Promise<FailedTx>;
|
|
35
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_logic_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/app_logic_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB;IAE1D,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;IAC/B,KAAK,EAAE,iBAAiB;gBARrB,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAC/B,KAAK,GAAE,iBAA+C;
|
|
1
|
+
{"version":3,"file":"app_logic_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/app_logic_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB;IAE1D,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;IAC/B,KAAK,EAAE,iBAAiB;gBARrB,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAC/B,KAAK,GAAE,iBAA+C;IAKhD,MAAM,CACnB,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK;;;;;IAqB5B,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAWxD"}
|
|
@@ -22,15 +22,18 @@ export class AppLogicPhaseManager extends AbstractPhaseManager {
|
|
|
22
22
|
// TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase?
|
|
23
23
|
this.log(`Processing tx ${tx.getTxHash()}`);
|
|
24
24
|
await this.publicContractsDB.addNewContracts(tx);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
const [publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs, revertReason] = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof);
|
|
26
|
+
if (revertReason) {
|
|
27
|
+
await this.rollback(tx, revertReason);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs);
|
|
31
|
+
await this.publicStateDB.commit();
|
|
32
|
+
}
|
|
33
|
+
return { publicKernelOutput, publicKernelProof, revertReason };
|
|
31
34
|
}
|
|
32
35
|
async rollback(tx, err) {
|
|
33
|
-
this.log.warn(`
|
|
36
|
+
this.log.warn(`Rolling back changes from ${tx.getTxHash()}`);
|
|
34
37
|
// remove contracts on failure
|
|
35
38
|
await this.publicContractsDB.removeNewContracts(tx);
|
|
36
39
|
// rollback any state updates from this failed transaction
|
|
@@ -41,4 +44,4 @@ export class AppLogicPhaseManager extends AbstractPhaseManager {
|
|
|
41
44
|
};
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwX2xvZ2ljX3BoYXNlX21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL2FwcF9sb2dpY19waGFzZV9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3RGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG9CQUFvQjtJQUM1RCxZQUNZLEVBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFlBQTBDLEVBQzFDLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBOEMsRUFDOUMsYUFBNEIsRUFDL0IsUUFBMkIsaUJBQWlCLENBQUMsU0FBUztRQUU3RCxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVZ0RixPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQThCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE2QjtRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFpRDtJQUcvRCxDQUFDO0lBRVEsS0FBSyxDQUFDLE1BQU0sQ0FDbkIsRUFBTSxFQUNOLDBCQUEyRCxFQUMzRCx5QkFBZ0M7UUFFaEMsd0ZBQXdGO1FBQ3hGLHlGQUF5RjtRQUN6RiwyREFBMkQ7UUFDM0Qsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLENBQUMsR0FDckYsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFbkcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUMvRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFNLEVBQUUsR0FBWTtRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCw4QkFBOEI7UUFDOUIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEQsMERBQTBEO1FBQzFELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxPQUFPO1lBQ0wsRUFBRTtZQUNGLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQztTQUMvRCxDQUFDO0lBQ0osQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Fr, MAX_NON_REVERTIBLE_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_REVERTIBLE_NULLIFIERS_PER_TX, MembershipWitness, NullifierLeafPreimage, ReadRequestContext, SideEffectLinkedToNoteHash } from '@aztec/circuits.js';
|
|
2
|
+
import { Tuple } from '@aztec/foundation/serialize';
|
|
3
|
+
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
4
|
+
export declare class HintsBuilder {
|
|
5
|
+
private db;
|
|
6
|
+
constructor(db: MerkleTreeOperations);
|
|
7
|
+
getNullifierReadRequestResetHints(nullifierReadRequestsNonRevertible: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>, nullifierReadRequestsRevertible: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>, nullifiersNonRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_NON_REVERTIBLE_NULLIFIERS_PER_TX>, nullifiersRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_REVERTIBLE_NULLIFIERS_PER_TX>): Promise<import("@aztec/circuits.js").NullifierReadRequestResetHints>;
|
|
8
|
+
getNullifierMembershipWitness(nullifier: Fr): Promise<{
|
|
9
|
+
membershipWitness: MembershipWitness<20>;
|
|
10
|
+
leafPreimage: NullifierLeafPreimage;
|
|
11
|
+
} | undefined>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=hints_builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hints_builder.d.ts","sourceRoot":"","sources":["../../src/sequencer/hints_builder.ts"],"names":[],"mappings":"AACA,OAAO,EACL,EAAE,EAEF,oCAAoC,EACpC,kCAAkC,EAClC,gCAAgC,EAChC,iBAAiB,EAEjB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAI3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,qBAAa,YAAY;IACX,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,oBAAoB;IAE5C,iCAAiC,CAC/B,kCAAkC,EAAE,KAAK,CAAC,kBAAkB,EAAE,OAAO,kCAAkC,CAAC,EACxG,+BAA+B,EAAE,KAAK,CAAC,kBAAkB,EAAE,OAAO,kCAAkC,CAAC,EACrG,uBAAuB,EAAE,KAAK,CAAC,0BAA0B,EAAE,OAAO,oCAAoC,CAAC,EACvG,oBAAoB,EAAE,KAAK,CAAC,0BAA0B,EAAE,OAAO,gCAAgC,CAAC;IAa5F,6BAA6B,CAAC,SAAS,EAAE,EAAE;;;;CAgBlD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
+
import { MAX_NEW_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MembershipWitness, NULLIFIER_TREE_HEIGHT, buildNullifierReadRequestResetHints, concatAccumulatedData, mergeAccumulatedData, } from '@aztec/circuits.js';
|
|
3
|
+
export class HintsBuilder {
|
|
4
|
+
constructor(db) {
|
|
5
|
+
this.db = db;
|
|
6
|
+
}
|
|
7
|
+
getNullifierReadRequestResetHints(nullifierReadRequestsNonRevertible, nullifierReadRequestsRevertible, nullifiersNonRevertible, nullifiersRevertible) {
|
|
8
|
+
return buildNullifierReadRequestResetHints(this, mergeAccumulatedData(MAX_NULLIFIER_READ_REQUESTS_PER_TX, nullifierReadRequestsNonRevertible, nullifierReadRequestsRevertible), concatAccumulatedData(MAX_NEW_NULLIFIERS_PER_TX, nullifiersNonRevertible, nullifiersRevertible));
|
|
9
|
+
}
|
|
10
|
+
async getNullifierMembershipWitness(nullifier) {
|
|
11
|
+
const index = await this.db.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer());
|
|
12
|
+
if (index === undefined) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const siblingPath = await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, index);
|
|
16
|
+
const membershipWitness = new MembershipWitness(NULLIFIER_TREE_HEIGHT, index, siblingPath.toTuple());
|
|
17
|
+
const leafPreimage = (await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index));
|
|
18
|
+
return { membershipWitness, leafPreimage };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGludHNfYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvaGludHNfYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUVMLHlCQUF5QixFQUV6QixrQ0FBa0MsRUFFbEMsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUlyQixtQ0FBbUMsRUFDbkMscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBSTVCLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQW9CLEVBQXdCO1FBQXhCLE9BQUUsR0FBRixFQUFFLENBQXNCO0lBQUcsQ0FBQztJQUVoRCxpQ0FBaUMsQ0FDL0Isa0NBQXdHLEVBQ3hHLCtCQUFxRyxFQUNyRyx1QkFBdUcsRUFDdkcsb0JBQWdHO1FBRWhHLE9BQU8sbUNBQW1DLENBQ3hDLElBQUksRUFDSixvQkFBb0IsQ0FDbEIsa0NBQWtDLEVBQ2xDLGtDQUFrQyxFQUNsQywrQkFBK0IsQ0FDaEMsRUFDRCxxQkFBcUIsQ0FBQyx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUNoRyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxTQUFhO1FBQy9DLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRixNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQzdDLHFCQUFxQixFQUNyQixLQUFLLEVBQ0wsV0FBVyxDQUFDLE9BQU8sRUFBZ0MsQ0FDcEQsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUEyQixDQUFDO1FBRW5ILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
package/dest/sequencer/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './sequencer.js';
|
|
2
1
|
export * from './config.js';
|
|
3
|
-
|
|
2
|
+
export * from './sequencer.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZ0JBQWdCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase_manager_factory.d.ts","sourceRoot":"","sources":["../../src/sequencer/phase_manager_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"phase_manager_factory.d.ts","sourceRoot":"","sources":["../../src/sequencer/phase_manager_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAMtF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,KAAK,EAAE,iBAAiB;CAGrC;AAED,qBAAa,4BAA6B,SAAQ,KAAK;;CAItD;AAED,qBAAa,mBAAmB;WAChB,WAAW,CACvB,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,GAC3B,oBAAoB,GAAG,SAAS;WAuCrB,eAAe,CAC3B,MAAM,EAAE,+BAA+B,EACvC,mBAAmB,EAAE,oBAAoB,EACzC,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,GAC3B,oBAAoB,GAAG,SAAS;CA8CpC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PublicKernelPhase } from './abstract_phase_manager.js';
|
|
2
2
|
import { AppLogicPhaseManager } from './app_logic_phase_manager.js';
|
|
3
3
|
import { SetupPhaseManager } from './setup_phase_manager.js';
|
|
4
|
+
import { TailPhaseManager } from './tail_phase_manager.js';
|
|
4
5
|
import { TeardownPhaseManager } from './teardown_phase_manager.js';
|
|
5
6
|
export class PhaseDidNotChangeError extends Error {
|
|
6
7
|
constructor(phase) {
|
|
@@ -43,9 +44,12 @@ export class PhaseManagerFactory {
|
|
|
43
44
|
}
|
|
44
45
|
return new TeardownPhaseManager(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, publicContractsDB, publicStateDB);
|
|
45
46
|
}
|
|
47
|
+
else if (currentPhaseManager.phase !== PublicKernelPhase.TAIL) {
|
|
48
|
+
return new TailPhaseManager(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, publicContractsDB, publicStateDB);
|
|
49
|
+
}
|
|
46
50
|
else {
|
|
47
51
|
return undefined;
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VfbWFuYWdlcl9mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9waGFzZV9tYW5hZ2VyX2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5FLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0lBQy9DLFlBQVksS0FBd0I7UUFDbEMsS0FBSyxDQUFDLG9DQUFvQyxLQUFLLG1DQUFtQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxLQUFLO0lBQ3JEO1FBQ0UsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFtQjtJQUN2QixNQUFNLENBQUMsV0FBVyxDQUN2QixFQUFNLEVBQ04sRUFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEMsRUFDMUMsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsZ0JBQXdCLEVBQ3hCLGlCQUE4QyxFQUM5QyxhQUE0QjtRQUU1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLGlCQUFpQixDQUMxQixFQUFFLEVBQ0YsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxDQUNkLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IsRUFBRSxFQUNGLGNBQWMsRUFDZCxZQUFZLEVBQ1osWUFBWSxFQUNaLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGFBQWEsQ0FDZCxDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksb0JBQW9CLENBQzdCLEVBQUUsRUFDRixjQUFjLEVBQ2QsWUFBWSxFQUNaLFlBQVksRUFDWixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixhQUFhLENBQ2QsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUMzQixNQUF1QyxFQUN2QyxtQkFBeUMsRUFDekMsRUFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEMsRUFDMUMsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsZ0JBQXdCLEVBQ3hCLGlCQUE4QyxFQUM5QyxhQUE0QjtRQUU1QixJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzlELE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLG9CQUFvQixDQUM3QixFQUFFLEVBQ0YsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxDQUNkLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdELE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLG9CQUFvQixDQUM3QixFQUFFLEVBQ0YsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxDQUNkLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEUsT0FBTyxJQUFJLGdCQUFnQixDQUN6QixFQUFFLEVBQ0YsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxDQUNkLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|